0000: 28 66 75 6e 63 74 69 6f 6e 28 46 2f 2a 74 68 65 (function(F/*the
0010: 20 66 6f 73 73 69 6c 20 6f 62 6a 65 63 74 2a 2f fossil object*/
0020: 29 7b 0a 20 20 22 75 73 65 20 73 74 72 69 63 74 ){. "use strict
0030: 22 3b 0a 20 20 2f 2a 2a 0a 20 20 20 20 20 43 6c ";. /**. Cl
0040: 69 65 6e 74 2d 73 69 64 65 20 69 6d 70 6c 65 6d ient-side implem
0050: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 entation of the
0060: 2f 77 69 6b 69 65 64 69 74 20 61 70 70 2e 20 52 /wikiedit app. R
0070: 65 71 75 69 72 65 73 20 74 68 61 74 0a 20 20 20 equires that.
0080: 20 20 74 68 65 20 66 6f 73 73 69 6c 20 4a 53 20 the fossil JS
0090: 62 6f 6f 74 73 74 72 61 70 70 69 6e 67 20 69 73 bootstrapping is
00a0: 20 63 6f 6d 70 6c 65 74 65 20 61 6e 64 20 74 68 complete and th
00b0: 61 74 20 73 65 76 65 72 61 6c 20 66 6f 73 73 69 at several fossi
00c0: 6c 0a 20 20 20 20 20 4a 53 20 41 50 49 73 20 68 l. JS APIs h
00d0: 61 76 65 20 62 65 65 6e 20 69 6e 73 74 61 6c 6c ave been install
00e0: 65 64 3a 20 66 6f 73 73 69 6c 2e 66 65 74 63 68 ed: fossil.fetch
00f0: 2c 20 66 6f 73 73 69 6c 2e 64 6f 6d 2c 0a 20 20 , fossil.dom,.
0100: 20 20 20 66 6f 73 73 69 6c 2e 74 61 62 73 2c 20 fossil.tabs,
0110: 66 6f 73 73 69 6c 2e 73 74 6f 72 61 67 65 2c 20 fossil.storage,
0120: 66 6f 73 73 69 6c 2e 63 6f 6e 66 69 72 6d 65 72 fossil.confirmer
0130: 2e 0a 0a 20 20 20 20 20 43 75 73 74 6f 6d 20 65 ... Custom e
0140: 76 65 6e 74 73 20 77 68 69 63 68 20 63 61 6e 20 vents which can
0150: 62 65 20 6c 69 73 74 65 6e 65 64 20 66 6f 72 20 be listened for
0160: 76 69 61 0a 20 20 20 20 20 66 6f 73 73 69 6c 2e via. fossil.
0170: 70 61 67 65 2e 61 64 64 45 76 65 6e 74 4c 69 73 page.addEventLis
0180: 74 65 6e 65 72 28 29 3a 0a 0a 20 20 20 20 20 2d tener():.. -
0190: 20 45 76 65 6e 74 20 27 77 69 6b 69 2d 70 61 67 Event 'wiki-pag
01a0: 65 2d 6c 6f 61 64 65 64 27 3a 20 70 61 73 73 65 e-loaded': passe
01b0: 73 20 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e s on information
01c0: 20 77 68 65 6e 20 69 74 0a 20 20 20 20 20 6c 6f when it. lo
01d0: 61 64 73 20 61 20 77 69 6b 69 20 28 77 68 65 74 ads a wiki (whet
01e0: 68 65 72 20 66 72 6f 6d 20 74 68 65 20 6e 65 74 her from the net
01f0: 77 6f 72 6b 20 6f 72 20 69 74 73 20 69 6e 74 65 work or its inte
0200: 72 6e 61 6c 20 6c 6f 63 61 6c 2d 65 64 69 74 0a rnal local-edit.
0210: 20 20 20 20 20 63 61 63 68 65 29 2c 20 69 6e 20 cache), in
0220: 74 68 65 20 66 6f 72 6d 20 6f 66 20 61 6e 20 22 the form of an "
0230: 77 69 6e 66 6f 22 20 6f 62 6a 65 63 74 3a 0a 0a winfo" object:..
0240: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 6e 61 {. na
0250: 6d 65 3a 20 73 74 72 69 6e 67 2c 0a 20 20 20 20 me: string,.
0260: 20 20 20 6d 69 6d 65 74 79 70 65 3a 20 6d 69 6d mimetype: mim
0270: 65 74 79 70 65 20 73 74 72 69 6e 67 2c 0a 20 20 etype string,.
0280: 20 20 20 20 20 74 79 70 65 3a 20 22 6e 6f 72 6d type: "norm
0290: 61 6c 22 20 7c 20 22 74 61 67 22 20 7c 20 22 63 al" | "tag" | "c
02a0: 68 65 63 6b 69 6e 22 20 7c 20 22 62 72 61 6e 63 heckin" | "branc
02b0: 68 22 20 7c 20 22 73 61 6e 64 62 6f 78 22 2c 0a h" | "sandbox",.
02c0: 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e 3a 20 version:
02d0: 55 55 49 44 20 73 74 72 69 6e 67 20 6f 72 20 6e UUID string or n
02e0: 75 6c 6c 20 66 6f 72 20 61 20 73 61 6e 64 62 6f ull for a sandbo
02f0: 78 20 70 61 67 65 2c 0a 20 20 20 20 20 20 20 70 x page,. p
0300: 61 72 65 6e 74 3a 20 70 61 72 65 6e 74 20 55 55 arent: parent UU
0310: 49 44 20 73 74 72 69 6e 67 20 6f 72 20 6e 75 6c ID string or nul
0320: 6c 20 69 66 20 6e 6f 20 70 61 72 65 6e 74 2c 0a l if no parent,.
0330: 20 20 20 20 20 20 20 63 6f 6e 74 65 6e 74 3a 20 content:
0340: 73 74 72 69 6e 67 0a 20 20 20 20 20 7d 0a 0a 20 string. }..
0350: 20 20 20 20 54 68 65 20 69 6e 74 65 72 6e 61 6c The internal
0360: 20 64 6f 63 73 20 61 6e 64 20 63 6f 64 65 20 66 docs and code f
0370: 72 65 71 75 65 6e 74 6c 79 20 75 73 65 20 74 68 requently use th
0380: 65 20 74 65 72 6d 20 22 77 69 6e 66 6f 22 2c 20 e term "winfo",
0390: 61 6e 64 20 73 75 63 68 0a 20 20 20 20 20 72 65 and such. re
03a0: 66 65 72 65 6e 63 65 73 20 72 65 66 65 72 20 74 ferences refer t
03b0: 6f 20 61 6e 20 6f 62 6a 65 63 74 20 77 69 74 68 o an object with
03c0: 20 74 68 61 74 20 66 6f 72 6d 2e 0a 0a 20 20 20 that form...
03d0: 20 20 54 68 65 20 66 6f 73 73 69 6c 2e 70 61 67 The fossil.pag
03e0: 65 2e 77 69 6b 69 43 6f 6e 74 65 6e 74 28 29 20 e.wikiContent()
03f0: 6d 65 74 68 6f 64 20 67 65 74 73 20 6f 72 20 73 method gets or s
0400: 65 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 0a ets the current.
0410: 20 20 20 20 20 66 69 6c 65 20 63 6f 6e 74 65 6e file conten
0420: 74 20 66 6f 72 20 74 68 65 20 70 61 67 65 2e 0a t for the page..
0430: 0a 20 20 20 20 20 2d 20 45 76 65 6e 74 20 27 77 . - Event 'w
0440: 69 6b 69 2d 73 61 76 65 64 27 3a 20 69 73 20 66 iki-saved': is f
0450: 69 72 65 64 20 77 68 65 6e 20 61 20 63 6f 6d 6d ired when a comm
0460: 69 74 20 63 6f 6d 70 6c 65 74 65 73 2c 0a 20 20 it completes,.
0470: 20 20 20 70 61 73 73 69 6e 67 20 6f 6e 20 74 68 passing on th
0480: 65 20 73 61 6d 65 20 69 6e 66 6f 20 61 73 20 66 e same info as f
0490: 69 6c 65 65 64 69 74 2d 66 69 6c 65 2d 6c 6f 61 ileedit-file-loa
04a0: 64 65 64 2e 0a 0a 20 20 20 20 20 2d 20 45 76 65 ded... - Eve
04b0: 6e 74 20 27 77 69 6b 69 2d 63 6f 6e 74 65 6e 74 nt 'wiki-content
04c0: 2d 72 65 70 6c 61 63 65 64 27 3a 20 77 68 65 6e -replaced': when
04d0: 20 74 68 65 20 65 64 69 74 6f 72 27 73 20 63 6f the editor's co
04e0: 6e 74 65 6e 74 20 69 73 0a 20 20 20 20 20 72 65 ntent is. re
04f0: 70 6c 61 63 65 64 2c 20 61 73 20 6f 70 70 6f 73 placed, as oppos
0500: 65 64 20 74 6f 20 69 74 20 62 65 69 6e 67 20 65 ed to it being e
0510: 64 69 74 65 64 20 76 69 61 20 75 73 65 72 0a 20 dited via user.
0520: 20 20 20 20 69 6e 74 65 72 61 63 74 69 6f 6e 2e interaction.
0530: 20 54 68 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 68 This normally h
0540: 61 70 70 65 6e 73 20 76 69 61 20 73 65 6c 65 63 appens via selec
0550: 74 69 6e 67 20 61 20 66 69 6c 65 20 74 6f 0a 20 ting a file to.
0560: 20 20 20 20 6c 6f 61 64 2e 20 54 68 65 20 65 76 load. The ev
0570: 65 6e 74 20 64 65 74 61 69 6c 20 69 73 20 74 68 ent detail is th
0580: 65 20 66 6f 73 73 69 6c 2e 70 61 67 65 20 6f 62 e fossil.page ob
0590: 6a 65 63 74 2c 20 6e 6f 74 20 74 68 65 20 63 75 ject, not the cu
05a0: 72 72 65 6e 74 0a 20 20 20 20 20 66 69 6c 65 20 rrent. file
05b0: 63 6f 6e 74 65 6e 74 2e 0a 0a 20 20 20 20 20 2d content... -
05c0: 20 45 76 65 6e 74 20 27 77 69 6b 69 2d 70 72 65 Event 'wiki-pre
05d0: 76 69 65 77 2d 75 70 64 61 74 65 64 27 3a 20 77 view-updated': w
05e0: 68 65 6e 20 74 68 65 20 70 72 65 76 69 65 77 20 hen the preview
05f0: 69 73 20 72 65 66 72 65 73 68 65 64 0a 20 20 20 is refreshed.
0600: 20 20 66 72 6f 6d 20 74 68 65 20 73 65 72 76 65 from the serve
0610: 72 2c 20 74 68 69 73 20 65 76 65 6e 74 20 70 61 r, this event pa
0620: 73 73 65 73 20 6f 6e 20 69 6e 66 6f 72 6d 61 74 sses on informat
0630: 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 70 72 ion about the pr
0640: 65 76 69 65 77 0a 20 20 20 20 20 63 68 61 6e 67 eview. chang
0650: 65 20 69 6e 20 74 68 65 20 66 6f 72 6d 20 6f 66 e in the form of
0660: 20 61 6e 20 6f 62 6a 65 63 74 3a 0a 0a 20 20 20 an object:..
0670: 20 20 7b 0a 20 20 20 20 20 65 6c 65 6d 65 6e 74 {. element
0680: 3a 20 74 68 65 20 44 4f 4d 20 65 6c 65 6d 65 6e : the DOM elemen
0690: 74 20 77 68 69 63 68 20 63 6f 6e 74 61 69 6e 73 t which contains
06a0: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 70 72 65 the content pre
06b0: 76 69 65 77 2e 0a 20 20 20 20 20 6d 69 6d 65 74 view.. mimet
06c0: 79 70 65 3a 20 74 68 65 20 70 61 67 65 27 73 20 ype: the page's
06d0: 6d 69 6d 65 74 79 70 65 2e 0a 20 20 20 20 20 7d mimetype.. }
06e0: 0a 0a 20 20 20 20 20 48 65 72 65 27 73 20 61 6e .. Here's an
06f0: 20 65 78 61 6d 70 6c 65 20 77 68 69 63 68 20 63 example which c
0700: 61 6e 20 62 65 20 75 73 65 64 20 77 69 74 68 20 an be used with
0710: 74 68 65 20 68 69 67 68 6c 69 67 68 74 6a 73 20 the highlightjs
0720: 63 6f 64 65 0a 20 20 20 20 20 68 69 67 68 6c 69 code. highli
0730: 67 68 74 65 72 20 74 6f 20 75 70 64 61 74 65 20 ghter to update
0740: 74 68 65 20 68 69 67 68 6c 69 67 68 74 69 6e 67 the highlighting
0750: 20 77 68 65 6e 20 74 68 65 20 70 72 65 76 69 65 when the previe
0760: 77 20 69 73 0a 20 20 20 20 20 72 65 66 72 65 73 w is. refres
0770: 68 65 64 20 69 6e 20 22 77 69 6b 69 22 20 6d 6f hed in "wiki" mo
0780: 64 65 20 28 77 68 69 63 68 20 69 6e 63 6c 75 64 de (which includ
0790: 65 73 20 66 6f 73 73 69 6c 2d 6e 61 74 69 76 65 es fossil-native
07a0: 20 77 69 6b 69 20 61 6e 64 0a 20 20 20 20 20 6d wiki and. m
07b0: 61 72 6b 64 6f 77 6e 29 3a 0a 0a 20 20 20 20 20 arkdown):..
07c0: 66 6f 73 73 69 6c 2e 70 61 67 65 2e 61 64 64 45 fossil.page.addE
07d0: 76 65 6e 74 4c 69 73 74 65 6e 65 72 28 0a 20 20 ventListener(.
07e0: 20 20 20 20 20 27 77 69 6b 69 2d 70 72 65 76 69 'wiki-previ
07f0: 65 77 2d 75 70 64 61 74 65 64 27 2c 0a 20 20 20 ew-updated',.
0800: 20 20 20 20 28 65 76 29 3d 3e 7b 0a 20 20 20 20 (ev)=>{.
0810: 20 20 20 20 20 69 66 28 65 76 2e 64 65 74 61 69 if(ev.detai
0820: 6c 2e 6d 69 6d 65 74 79 70 65 21 3d 3d 27 74 65 l.mimetype!=='te
0830: 78 74 2f 70 6c 61 69 6e 27 29 7b 0a 20 20 20 20 xt/plain'){.
0840: 20 20 20 20 20 20 20 65 76 2e 64 65 74 61 69 6c ev.detail
0850: 2e 65 6c 65 6d 65 6e 74 2e 71 75 65 72 79 53 65 .element.querySe
0860: 6c 65 63 74 6f 72 41 6c 6c 28 0a 20 20 20 20 20 lectorAll(.
0870: 20 20 20 20 20 20 20 20 27 63 6f 64 65 5b 63 6c 'code[cl
0880: 61 73 73 5e 3d 6c 61 6e 67 75 61 67 65 2d 5d 27 ass^=language-]'
0890: 0a 20 20 20 20 20 20 20 20 20 20 20 29 2e 66 6f . ).fo
08a0: 72 45 61 63 68 28 28 65 29 3d 3e 68 6c 6a 73 2e rEach((e)=>hljs.
08b0: 68 69 67 68 6c 69 67 68 74 42 6c 6f 63 6b 28 65 highlightBlock(e
08c0: 29 29 3b 0a 20 20 20 20 20 20 20 20 20 7d 0a 20 ));. }.
08d0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 29 3b 0a }. );.
08e0: 20 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 45 20 3d */. const E =
08f0: 20 28 73 29 3d 3e 64 6f 63 75 6d 65 6e 74 2e 71 (s)=>document.q
0900: 75 65 72 79 53 65 6c 65 63 74 6f 72 28 73 29 2c uerySelector(s),
0910: 0a 20 20 20 20 20 20 20 20 44 20 3d 20 46 2e 64 . D = F.d
0920: 6f 6d 2c 0a 20 20 20 20 20 20 20 20 50 20 3d 20 om,. P =
0930: 46 2e 70 61 67 65 3b 0a 0a 20 20 50 2e 63 6f 6e F.page;.. P.con
0940: 66 69 67 20 3d 20 7b 7d 3b 0a 0a 20 20 2f 2a 2a fig = {};.. /**
0950: 0a 20 20 20 20 20 24 73 74 61 73 68 20 69 73 20 . $stash is
0960: 61 6e 20 69 6e 74 65 72 6e 61 6c 2d 75 73 65 2d an internal-use-
0970: 6f 6e 6c 79 20 6f 62 6a 65 63 74 20 66 6f 72 20 only object for
0980: 6d 61 6e 61 67 69 6e 67 20 22 73 74 61 73 68 65 managing "stashe
0990: 64 22 0a 20 20 20 20 20 6c 6f 63 61 6c 20 65 64 d". local ed
09a0: 69 74 73 2c 20 74 6f 20 68 65 6c 70 20 61 76 6f its, to help avo
09b0: 69 64 20 74 68 61 74 20 75 73 65 72 73 20 61 63 id that users ac
09c0: 63 69 64 65 6e 74 61 6c 6c 79 20 6c 6f 73 65 20 cidentally lose
09d0: 63 6f 6e 74 65 6e 74 0a 20 20 20 20 20 62 79 20 content. by
09e0: 73 77 69 74 63 68 69 6e 67 20 74 61 62 73 20 6f switching tabs o
09f0: 72 20 66 6f 6c 6c 6f 77 69 6e 67 20 6c 69 6e 6b r following link
0a00: 73 20 6f 72 20 73 6f 6d 65 20 73 75 63 68 2e 20 s or some such.
0a10: 54 68 65 20 62 61 73 69 63 0a 20 20 20 20 20 74 The basic. t
0a20: 68 65 6f 72 79 20 6f 66 20 6f 70 65 72 61 74 69 heory of operati
0a30: 6f 6e 20 69 73 2e 2e 2e 0a 0a 20 20 20 20 20 41 on is..... A
0a40: 6c 6c 20 22 73 74 61 73 68 65 64 22 20 73 74 61 ll "stashed" sta
0a50: 74 65 20 69 73 20 73 74 6f 72 65 64 20 75 73 69 te is stored usi
0a60: 6e 67 20 66 6f 73 73 69 6c 2e 73 74 6f 72 61 67 ng fossil.storag
0a70: 65 2e 0a 0a 20 20 20 20 20 2d 20 57 68 65 6e 20 e... - When
0a80: 74 68 65 20 63 75 72 72 65 6e 74 20 77 69 6b 69 the current wiki
0a90: 20 63 6f 6e 74 65 6e 74 20 69 73 20 6d 6f 64 69 content is modi
0aa0: 66 69 65 64 20 62 79 20 74 68 65 20 75 73 65 72 fied by the user
0ab0: 2c 20 74 68 65 0a 20 20 20 20 20 20 20 63 75 72 , the. cur
0ac0: 72 65 6e 74 20 73 74 61 74 65 20 6f 66 20 74 68 rent state of th
0ad0: 65 20 70 61 67 65 20 69 73 20 73 74 61 73 68 65 e page is stashe
0ae0: 64 2e 0a 0a 20 20 20 20 20 2d 20 57 68 65 6e 20 d... - When
0af0: 73 61 76 69 6e 67 2c 20 74 68 65 20 73 74 61 73 saving, the stas
0b00: 68 65 64 20 65 6e 74 72 79 20 66 6f 72 20 74 68 hed entry for th
0b10: 65 20 70 72 65 76 69 6f 75 73 20 76 65 72 73 69 e previous versi
0b20: 6f 6e 20 69 73 0a 20 20 20 20 20 20 20 72 65 6d on is. rem
0b30: 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 73 74 oved from the st
0b40: 61 73 68 2e 0a 0a 20 20 20 20 20 2d 20 57 68 65 ash... - Whe
0b50: 6e 20 22 6c 6f 61 64 69 6e 67 22 2c 20 77 65 20 n "loading", we
0b60: 75 73 65 20 61 6e 79 20 73 74 61 73 68 65 64 20 use any stashed
0b70: 73 74 61 74 65 20 66 6f 72 20 74 68 65 20 67 69 state for the gi
0b80: 76 65 6e 0a 20 20 20 20 20 20 20 63 68 65 63 6b ven. check
0b90: 69 6e 2f 66 69 6c 65 20 63 6f 6d 62 69 6e 61 74 in/file combinat
0ba0: 69 6f 6e 2e 20 57 68 65 6e 20 66 6f 72 63 69 6e ion. When forcin
0bb0: 67 20 61 20 72 65 2d 6c 6f 61 64 20 6f 66 20 63 g a re-load of c
0bc0: 6f 6e 74 65 6e 74 2c 0a 20 20 20 20 20 20 20 61 ontent,. a
0bd0: 6e 79 20 73 74 61 73 68 65 64 20 65 6e 74 72 79 ny stashed entry
0be0: 20 66 6f 72 20 74 68 61 74 20 63 6f 6d 62 69 6e for that combin
0bf0: 61 74 69 6f 6e 20 69 73 20 72 65 6d 6f 76 65 64 ation is removed
0c00: 20 66 72 6f 6d 20 74 68 65 0a 20 20 20 20 20 20 from the.
0c10: 20 73 74 61 73 68 2e 0a 0a 20 20 20 20 20 2d 20 stash... -
0c20: 45 76 65 72 79 20 74 69 6d 65 20 50 2e 73 74 61 Every time P.sta
0c30: 73 68 43 6f 6e 74 65 6e 74 43 68 61 6e 67 65 28 shContentChange(
0c40: 29 20 75 70 64 61 74 65 73 20 74 68 65 20 73 74 ) updates the st
0c50: 61 73 68 2c 20 69 74 20 69 73 0a 20 20 20 20 20 ash, it is.
0c60: 20 20 70 72 75 6e 65 64 20 74 6f 20 24 73 74 61 pruned to $sta
0c70: 73 68 2e 70 72 75 6e 65 2e 64 65 66 61 75 6c 74 sh.prune.default
0c80: 4d 61 78 43 6f 75 6e 74 20 6d 6f 73 74 2d 72 65 MaxCount most-re
0c90: 63 65 6e 74 6c 79 2d 75 70 64 61 74 65 64 0a 20 cently-updated.
0ca0: 20 20 20 20 20 20 65 6e 74 72 69 65 73 2e 0a 0a entries...
0cb0: 20 20 20 20 20 2d 20 54 68 69 73 20 41 50 49 20 - This API
0cc0: 6f 66 74 65 6e 20 72 65 66 65 72 73 20 74 6f 20 often refers to
0cd0: 22 77 69 6e 66 6f 20 6f 62 6a 65 63 74 73 2e 22 "winfo objects."
0ce0: 20 54 68 6f 73 65 20 61 72 65 20 6f 62 6a 65 63 Those are objec
0cf0: 74 73 0a 20 20 20 20 20 20 20 77 69 74 68 20 61 ts. with a
0d00: 20 6d 69 6e 69 6d 75 6d 20 6f 66 20 7b 70 61 67 minimum of {pag
0d10: 65 2c 6d 69 6d 65 74 79 70 65 7d 20 70 72 6f 70 e,mimetype} prop
0d20: 65 72 74 69 65 73 20 28 77 68 69 63 68 20 6d 75 erties (which mu
0d30: 73 74 20 62 65 0a 20 20 20 20 20 20 20 76 61 6c st be. val
0d40: 69 64 29 2c 20 61 6e 64 20 74 68 65 20 70 61 67 id), and the pag
0d50: 65 20 6e 61 6d 65 20 69 73 20 75 73 65 64 20 61 e name is used a
0d60: 73 20 62 61 73 69 73 20 66 6f 72 20 74 68 65 20 s basis for the
0d70: 73 74 61 73 68 20 6b 65 79 73 0a 20 20 20 20 20 stash keys.
0d80: 20 20 66 6f 72 20 61 6e 79 20 67 69 76 65 6e 20 for any given
0d90: 70 61 67 65 2e 0a 0a 20 20 20 20 20 54 68 65 20 page... The
0da0: 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68 65 structure of the
0db0: 20 73 74 61 73 68 20 69 73 20 61 20 62 69 74 20 stash is a bit
0dc0: 63 6f 6e 76 6f 6c 75 74 65 64 20 66 6f 72 20 65 convoluted for e
0dd0: 66 66 69 63 69 65 6e 63 79 27 73 0a 20 20 20 20 fficiency's.
0de0: 20 73 61 6b 65 3a 20 77 65 20 73 74 6f 72 65 20 sake: we store
0df0: 61 20 6d 61 70 20 6f 66 20 66 69 6c 65 20 69 6e a map of file in
0e00: 66 6f 20 28 77 69 6e 66 6f 29 20 6f 62 6a 65 63 fo (winfo) objec
0e10: 74 73 20 73 65 70 61 72 61 74 65 6c 79 20 66 72 ts separately fr
0e20: 6f 6d 0a 20 20 20 20 20 74 68 6f 73 65 20 66 69 om. those fi
0e30: 6c 65 73 27 20 63 6f 6e 74 65 6e 74 73 20 62 65 les' contents be
0e40: 63 61 75 73 65 20 6f 74 68 65 72 77 69 73 65 20 cause otherwise
0e50: 77 65 20 77 6f 75 6c 64 20 62 65 20 72 65 71 75 we would be requ
0e60: 69 72 65 64 20 74 6f 0a 20 20 20 20 20 4a 53 4f ired to. JSO
0e70: 4e 69 7a 65 2f 64 65 2d 4a 53 4f 4e 69 7a 65 20 Nize/de-JSONize
0e80: 74 68 65 20 66 69 6c 65 20 63 6f 6e 74 65 6e 74 the file content
0e90: 20 77 68 65 6e 20 73 74 61 73 68 69 6e 67 2f 72 when stashing/r
0ea0: 65 73 74 6f 72 69 6e 67 20 69 74 2c 0a 20 20 20 estoring it,.
0eb0: 20 20 61 6e 64 20 74 68 61 74 20 77 6f 75 6c 64 and that would
0ec0: 20 62 65 20 68 6f 72 72 69 62 6c 79 20 69 6e 65 be horribly ine
0ed0: 66 66 69 63 69 65 6e 74 20 28 6d 65 61 6e 69 6e fficient (meanin
0ee0: 67 20 22 62 61 74 74 65 72 79 2d 63 6f 6e 73 75 g "battery-consu
0ef0: 6d 69 6e 67 22 0a 20 20 20 20 20 6f 6e 20 6d 6f ming". on mo
0f00: 62 69 6c 65 20 64 65 76 69 63 65 73 29 2e 0a 20 bile devices)..
0f10: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 24 73 74 61 */. const $sta
0f20: 73 68 20 3d 20 7b 0a 20 20 20 20 6b 65 79 73 3a sh = {. keys:
0f30: 20 7b 0a 20 20 20 20 20 20 69 6e 64 65 78 3a 20 {. index:
0f40: 46 2e 70 61 67 65 2e 6e 61 6d 65 2b 27 2f 69 6e F.page.name+'/in
0f50: 64 65 78 27 0a 20 20 20 20 7d 2c 0a 20 20 20 20 dex'. },.
0f60: 2f 2a 2a 0a 20 20 20 20 20 20 20 69 6e 64 65 78 /**. index
0f70: 3a 20 7b 0a 20 20 20 20 20 20 20 22 50 41 47 45 : {. "PAGE
0f80: 5f 4e 41 4d 45 22 3a 20 7b 77 69 6b 69 20 70 61 _NAME": {wiki pa
0f90: 67 65 20 69 6e 66 6f 20 77 2f 6f 20 63 6f 6e 74 ge info w/o cont
0fa0: 65 6e 74 7d 0a 20 20 20 20 20 20 20 2e 2e 2e 0a ent}. ....
0fb0: 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 }..
0fc0: 20 49 6e 20 46 2e 73 74 6f 72 61 67 65 20 77 65 In F.storage we
0fd0: 2e 2e 2e 0a 0a 20 20 20 20 20 20 20 2d 20 53 74 ..... - St
0fe0: 6f 72 65 20 74 68 69 73 2e 69 6e 64 65 78 20 75 ore this.index u
0ff0: 6e 64 65 72 20 74 68 65 20 6b 65 79 20 74 68 69 nder the key thi
1000: 73 2e 6b 65 79 73 2e 69 6e 64 65 78 2e 0a 0a 20 s.keys.index...
1010: 20 20 20 20 20 20 2d 20 53 74 6f 72 65 20 65 61 - Store ea
1020: 63 68 20 70 61 67 65 27 73 20 63 6f 6e 74 65 6e ch page's conten
1030: 74 20 75 6e 64 65 72 20 74 68 65 20 6b 65 79 0a t under the key.
1040: 20 20 20 20 20 20 20 28 50 2e 6e 61 6d 65 2b 27 (P.name+'
1050: 2f 50 41 47 45 5f 4e 41 4d 45 27 29 2e 20 54 68 /PAGE_NAME'). Th
1060: 65 73 65 20 61 72 65 20 73 74 6f 72 65 64 20 73 ese are stored s
1070: 65 70 61 72 61 74 65 6c 79 20 66 72 6f 6d 20 74 eparately from t
1080: 68 65 0a 20 20 20 20 20 20 20 69 6e 64 65 78 20 he. index
1090: 65 6e 74 72 69 65 73 20 74 6f 20 61 76 6f 69 64 entries to avoid
10a0: 20 68 61 76 69 6e 67 20 74 6f 20 4a 53 4f 4e 69 having to JSONi
10b0: 7a 65 2f 64 65 2d 4a 53 4f 4e 69 7a 65 20 74 68 ze/de-JSONize th
10c0: 65 0a 20 20 20 20 20 20 20 63 6f 6e 74 65 6e 74 e. content
10d0: 2e 20 54 68 65 20 61 73 73 75 6d 70 74 69 6f 6e . The assumption
10e0: 2f 68 6f 70 65 20 69 73 20 74 68 61 74 20 74 68 /hope is that th
10f0: 65 20 62 72 6f 77 73 65 72 20 63 61 6e 20 73 74 e browser can st
1100: 6f 72 65 0a 20 20 20 20 20 20 20 74 68 6f 73 65 ore. those
1110: 20 72 65 63 6f 72 64 73 20 22 64 69 72 65 63 74 records "direct
1120: 6c 79 2c 22 20 77 69 74 68 6f 75 74 20 61 6e 79 ly," without any
1130: 20 69 6e 74 65 72 6d 65 64 69 61 72 79 0a 20 20 intermediary.
1140: 20 20 20 20 20 65 6e 63 6f 64 69 6e 67 2f 64 65 encoding/de
1150: 63 6f 64 69 6e 67 20 67 6f 69 6e 67 20 6f 6e 2e coding going on.
1160: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 6e 64 65 . */. inde
1170: 78 4b 65 79 3a 20 66 75 6e 63 74 69 6f 6e 28 77 xKey: function(w
1180: 69 6e 66 6f 29 7b 72 65 74 75 72 6e 20 77 69 6e info){return win
1190: 66 6f 2e 6e 61 6d 65 7d 2c 0a 20 20 20 20 2f 2a fo.name},. /*
11a0: 2a 20 52 65 74 75 72 6e 73 20 74 68 65 20 6b 65 * Returns the ke
11b0: 79 20 66 6f 72 20 73 74 6f 72 69 6e 67 20 63 6f y for storing co
11c0: 6e 74 65 6e 74 20 66 6f 72 20 74 68 65 20 67 69 ntent for the gi
11d0: 76 65 6e 20 6b 65 79 20 73 75 66 66 69 78 2c 0a ven key suffix,.
11e0: 20 20 20 20 20 20 20 20 62 79 20 70 72 65 70 65 by prepe
11f0: 6e 64 69 6e 67 20 50 2e 6e 61 6d 65 20 74 6f 20 nding P.name to
1200: 73 75 66 66 69 78 2e 20 2a 2f 0a 20 20 20 20 63 suffix. */. c
1210: 6f 6e 74 65 6e 74 4b 65 79 3a 20 66 75 6e 63 74 ontentKey: funct
1220: 69 6f 6e 28 73 75 66 66 69 78 29 7b 72 65 74 75 ion(suffix){retu
1230: 72 6e 20 50 2e 6e 61 6d 65 2b 27 2f 27 2b 73 75 rn P.name+'/'+su
1240: 66 66 69 78 7d 2c 0a 20 20 20 20 2f 2a 2a 20 52 ffix},. /** R
1250: 65 74 75 72 6e 73 20 74 68 65 20 69 6e 64 65 78 eturns the index
1260: 20 6f 62 6a 65 63 74 2c 20 66 65 74 63 68 69 6e object, fetchin
1270: 67 20 69 74 20 66 72 6f 6d 20 74 68 65 20 73 74 g it from the st
1280: 61 73 68 20 6f 72 20 63 72 65 61 74 69 6e 67 0a ash or creating.
1290: 20 20 20 20 20 20 20 20 69 74 20 61 6e 65 77 20 it anew
12a0: 6f 6e 20 74 68 65 20 66 69 72 73 74 20 63 61 6c on the first cal
12b0: 6c 2e 20 2a 2f 0a 20 20 20 20 67 65 74 49 6e 64 l. */. getInd
12c0: 65 78 3a 20 66 75 6e 63 74 69 6f 6e 28 29 7b 0a ex: function(){.
12d0: 20 20 20 20 20 20 69 66 28 21 74 68 69 73 2e 69 if(!this.i
12e0: 6e 64 65 78 29 7b 0a 20 20 20 20 20 20 20 20 74 ndex){. t
12f0: 68 69 73 2e 69 6e 64 65 78 20 3d 20 46 2e 73 74 his.index = F.st
1300: 6f 72 61 67 65 2e 67 65 74 4a 53 4f 4e 28 0a 20 orage.getJSON(.
1310: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6b 65 this.ke
1320: 79 73 2e 69 6e 64 65 78 2c 20 7b 7d 0a 20 20 20 ys.index, {}.
1330: 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 7d 0a );. }.
1340: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 return thi
1350: 73 2e 69 6e 64 65 78 3b 0a 20 20 20 20 7d 2c 0a s.index;. },.
1360: 20 20 20 20 5f 66 69 72 65 53 74 61 73 68 45 76 _fireStashEv
1370: 65 6e 74 3a 20 66 75 6e 63 74 69 6f 6e 28 29 7b ent: function(){
1380: 0a 20 20 20 20 20 20 69 66 28 74 68 69 73 2e 5f . if(this._
1390: 64 69 73 61 62 6c 65 4e 65 78 74 45 76 65 6e 74 disableNextEvent
13a0: 29 20 64 65 6c 65 74 65 20 74 68 69 73 2e 5f 64 ) delete this._d
13b0: 69 73 61 62 6c 65 4e 65 78 74 45 76 65 6e 74 3b isableNextEvent;
13c0: 0a 20 20 20 20 20 20 65 6c 73 65 20 46 2e 70 61 . else F.pa
13d0: 67 65 2e 64 69 73 70 61 74 63 68 45 76 65 6e 74 ge.dispatchEvent
13e0: 28 27 77 69 6b 69 2d 73 74 61 73 68 2d 75 70 64 ('wiki-stash-upd
13f0: 61 74 65 64 27 2c 20 74 68 69 73 29 3b 0a 20 20 ated', this);.
1400: 20 20 7d 2c 0a 20 20 20 20 2f 2a 2a 0a 20 20 20 },. /**.
1410: 20 20 20 20 52 65 74 75 72 6e 73 20 74 68 65 20 Returns the
1420: 73 74 61 73 68 65 64 20 76 65 72 73 69 6f 6e 2c stashed version,
1430: 20 69 66 20 61 6e 79 2c 20 66 6f 72 20 74 68 65 if any, for the
1440: 20 67 69 76 65 6e 20 77 69 6e 66 6f 20 6f 62 6a given winfo obj
1450: 65 63 74 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 ect.. */.
1460: 67 65 74 57 69 6e 66 6f 3a 20 66 75 6e 63 74 69 getWinfo: functi
1470: 6f 6e 28 77 69 6e 66 6f 29 7b 0a 20 20 20 20 20 on(winfo){.
1480: 20 63 6f 6e 73 74 20 6e 64 78 20 3d 20 74 68 69 const ndx = thi
1490: 73 2e 67 65 74 49 6e 64 65 78 28 29 3b 0a 20 20 s.getIndex();.
14a0: 20 20 20 20 72 65 74 75 72 6e 20 6e 64 78 5b 74 return ndx[t
14b0: 68 69 73 2e 69 6e 64 65 78 4b 65 79 28 77 69 6e his.indexKey(win
14c0: 66 6f 29 5d 3b 0a 20 20 20 20 7d 2c 0a 20 20 20 fo)];. },.
14d0: 20 2f 2a 2a 20 53 65 72 69 61 6c 69 7a 65 73 20 /** Serializes
14e0: 74 68 69 73 20 6f 62 6a 65 63 74 27 73 20 69 6e this object's in
14f0: 64 65 78 20 74 6f 20 46 2e 73 74 6f 72 61 67 65 dex to F.storage
1500: 2e 20 52 65 74 75 72 6e 73 20 74 68 69 73 2e 20 . Returns this.
1510: 2a 2f 0a 20 20 20 20 73 74 6f 72 65 49 6e 64 65 */. storeInde
1520: 78 3a 20 66 75 6e 63 74 69 6f 6e 28 29 7b 0a 20 x: function(){.
1530: 20 20 20 20 20 69 66 28 74 68 69 73 2e 69 6e 64 if(this.ind
1540: 65 78 29 20 46 2e 73 74 6f 72 61 67 65 2e 73 65 ex) F.storage.se
1550: 74 4a 53 4f 4e 28 74 68 69 73 2e 6b 65 79 73 2e tJSON(this.keys.
1560: 69 6e 64 65 78 2c 74 68 69 73 2e 69 6e 64 65 78 index,this.index
1570: 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 );. return
1580: 74 68 69 73 3b 0a 20 20 20 20 7d 2c 0a 20 20 20 this;. },.
1590: 20 2f 2a 2a 20 55 70 64 61 74 65 73 20 74 68 65 /** Updates the
15a0: 20 73 74 61 73 68 20 72 65 63 6f 72 64 20 66 6f stash record fo
15b0: 72 20 74 68 65 20 67 69 76 65 6e 20 77 69 6e 66 r the given winf
15c0: 6f 0a 20 20 20 20 20 20 20 20 61 6e 64 20 28 6f o. and (o
15d0: 70 74 69 6f 6e 61 6c 6c 79 29 20 63 6f 6e 74 65 ptionally) conte
15e0: 6e 74 2e 20 49 66 20 70 61 73 73 65 64 20 31 20 nt. If passed 1
15f0: 61 72 67 2c 20 6f 6e 6c 79 0a 20 20 20 20 20 20 arg, only.
1600: 20 20 74 68 65 20 77 69 6e 66 6f 20 73 74 61 73 the winfo stas
1610: 68 20 69 73 20 75 70 64 61 74 65 64 2c 20 65 6c h is updated, el
1620: 73 65 20 62 6f 74 68 20 74 68 65 20 77 69 6e 66 se both the winf
1630: 6f 0a 20 20 20 20 20 20 20 20 61 6e 64 20 69 74 o. and it
1640: 73 20 63 6f 6e 74 65 6e 74 73 20 61 72 65 20 28 s contents are (
1650: 72 65 2d 29 73 74 61 73 68 65 64 2e 20 52 65 74 re-)stashed. Ret
1660: 75 72 6e 73 20 74 68 69 73 2e 0a 20 20 20 20 2a urns this.. *
1670: 2f 0a 20 20 20 20 75 70 64 61 74 65 57 69 6e 66 /. updateWinf
1680: 6f 3a 20 66 75 6e 63 74 69 6f 6e 28 77 69 6e 66 o: function(winf
1690: 6f 2c 63 6f 6e 74 65 6e 74 29 7b 0a 20 20 20 20 o,content){.
16a0: 20 20 63 6f 6e 73 74 20 6e 64 78 20 3d 20 74 68 const ndx = th
16b0: 69 73 2e 67 65 74 49 6e 64 65 78 28 29 2c 0a 20 is.getIndex(),.
16c0: 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 20 3d key =
16d0: 20 74 68 69 73 2e 69 6e 64 65 78 4b 65 79 28 77 this.indexKey(w
16e0: 69 6e 66 6f 29 2c 0a 20 20 20 20 20 20 20 20 20 info),.
16f0: 20 20 20 6f 6c 64 20 3d 20 6e 64 78 5b 6b 65 79 old = ndx[key
1700: 5d 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 72 ];. const r
1710: 65 63 6f 72 64 20 3d 20 6f 6c 64 20 7c 7c 20 28 ecord = old || (
1720: 6e 64 78 5b 6b 65 79 5d 3d 7b 0a 20 20 20 20 20 ndx[key]={.
1730: 20 20 20 6e 61 6d 65 3a 20 77 69 6e 66 6f 2e 6e name: winfo.n
1740: 61 6d 65 0a 20 20 20 20 20 20 7d 29 3b 0a 20 20 ame. });.
1750: 20 20 20 20 72 65 63 6f 72 64 2e 6d 69 6d 65 74 record.mimet
1760: 79 70 65 20 3d 20 77 69 6e 66 6f 2e 6d 69 6d 65 ype = winfo.mime
1770: 74 79 70 65 3b 0a 20 20 20 20 20 20 72 65 63 6f type;. reco
1780: 72 64 2e 74 79 70 65 20 3d 20 77 69 6e 66 6f 2e rd.type = winfo.
1790: 74 79 70 65 3b 0a 20 20 20 20 20 20 72 65 63 6f type;. reco
17a0: 72 64 2e 70 61 72 65 6e 74 20 3d 20 77 69 6e 66 rd.parent = winf
17b0: 6f 2e 70 61 72 65 6e 74 3b 0a 20 20 20 20 20 20 o.parent;.
17c0: 72 65 63 6f 72 64 2e 76 65 72 73 69 6f 6e 20 3d record.version =
17d0: 20 77 69 6e 66 6f 2e 76 65 72 73 69 6f 6e 3b 20 winfo.version;
17e0: 20 20 20 20 20 0a 20 20 20 20 20 20 72 65 63 6f . reco
17f0: 72 64 2e 73 74 61 73 68 54 69 6d 65 20 3d 20 6e rd.stashTime = n
1800: 65 77 20 44 61 74 65 28 29 2e 67 65 74 54 69 6d ew Date().getTim
1810: 65 28 29 3b 0a 20 20 20 20 20 20 74 68 69 73 2e e();. this.
1820: 73 74 6f 72 65 49 6e 64 65 78 28 29 3b 0a 20 20 storeIndex();.
1830: 20 20 20 20 69 66 28 61 72 67 75 6d 65 6e 74 73 if(arguments
1840: 2e 6c 65 6e 67 74 68 3e 31 29 7b 0a 20 20 20 20 .length>1){.
1850: 20 20 20 20 46 2e 73 74 6f 72 61 67 65 2e 73 65 F.storage.se
1860: 74 28 74 68 69 73 2e 63 6f 6e 74 65 6e 74 4b 65 t(this.contentKe
1870: 79 28 6b 65 79 29 2c 20 63 6f 6e 74 65 6e 74 29 y(key), content)
1880: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 ;. }.
1890: 74 68 69 73 2e 5f 66 69 72 65 53 74 61 73 68 45 this._fireStashE
18a0: 76 65 6e 74 28 29 3b 0a 20 20 20 20 20 20 72 65 vent();. re
18b0: 74 75 72 6e 20 74 68 69 73 3b 0a 20 20 20 20 7d turn this;. }
18c0: 2c 0a 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 20 ,. /**.
18d0: 20 52 65 74 75 72 6e 73 20 74 68 65 20 73 74 61 Returns the sta
18e0: 73 68 65 64 20 63 6f 6e 74 65 6e 74 2c 20 69 66 shed content, if
18f0: 20 61 6e 79 2c 20 66 6f 72 20 74 68 65 20 67 69 any, for the gi
1900: 76 65 6e 20 77 69 6e 66 6f 0a 20 20 20 20 20 20 ven winfo.
1910: 20 6f 62 6a 65 63 74 2e 0a 20 20 20 20 2a 2f 20 object.. */
1920: 20 20 20 20 20 20 0a 20 20 20 20 73 74 61 73 68 . stash
1930: 65 64 43 6f 6e 74 65 6e 74 3a 20 66 75 6e 63 74 edContent: funct
1940: 69 6f 6e 28 77 69 6e 66 6f 29 7b 0a 20 20 20 20 ion(winfo){.
1950: 20 20 72 65 74 75 72 6e 20 46 2e 73 74 6f 72 61 return F.stora
1960: 67 65 2e 67 65 74 28 74 68 69 73 2e 63 6f 6e 74 ge.get(this.cont
1970: 65 6e 74 4b 65 79 28 74 68 69 73 2e 69 6e 64 65 entKey(this.inde
1980: 78 4b 65 79 28 77 69 6e 66 6f 29 29 29 3b 0a 20 xKey(winfo)));.
1990: 20 20 20 7d 2c 0a 20 20 20 20 2f 2a 2a 20 52 65 },. /** Re
19a0: 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 77 65 turns true if we
19b0: 20 68 61 76 65 20 73 74 61 73 68 65 64 20 63 6f have stashed co
19c0: 6e 74 65 6e 74 20 66 6f 72 20 74 68 65 20 67 69 ntent for the gi
19d0: 76 65 6e 20 77 69 6e 66 6f 0a 20 20 20 20 20 20 ven winfo.
19e0: 20 20 72 65 63 6f 72 64 20 6f 72 20 70 61 67 65 record or page
19f0: 20 6e 61 6d 65 2e 20 2a 2f 0a 20 20 20 20 68 61 name. */. ha
1a00: 73 53 74 61 73 68 65 64 43 6f 6e 74 65 6e 74 3a sStashedContent:
1a10: 20 66 75 6e 63 74 69 6f 6e 28 77 69 6e 66 6f 29 function(winfo)
1a20: 7b 0a 20 20 20 20 20 20 69 66 28 27 73 74 72 69 {. if('stri
1a30: 6e 67 27 3d 3d 3d 74 79 70 65 6f 66 20 77 69 6e ng'===typeof win
1a40: 66 6f 29 20 77 69 6e 66 6f 20 3d 20 7b 6e 61 6d fo) winfo = {nam
1a50: 65 3a 20 77 69 6e 66 6f 7d 3b 0a 20 20 20 20 20 e: winfo};.
1a60: 20 72 65 74 75 72 6e 20 46 2e 73 74 6f 72 61 67 return F.storag
1a70: 65 2e 63 6f 6e 74 61 69 6e 73 28 74 68 69 73 2e e.contains(this.
1a80: 63 6f 6e 74 65 6e 74 4b 65 79 28 74 68 69 73 2e contentKey(this.
1a90: 69 6e 64 65 78 4b 65 79 28 77 69 6e 66 6f 29 29 indexKey(winfo))
1aa0: 29 3b 0a 20 20 20 20 7d 2c 0a 20 20 20 20 2f 2a );. },. /*
1ab0: 2a 20 55 6e 73 74 61 73 68 65 73 20 74 68 65 20 * Unstashes the
1ac0: 67 69 76 65 6e 20 77 69 6e 66 6f 20 72 65 63 6f given winfo reco
1ad0: 72 64 20 61 6e 64 20 69 74 73 20 63 6f 6e 74 65 rd and its conte
1ae0: 6e 74 2e 0a 20 20 20 20 20 20 20 20 52 65 74 75 nt.. Retu
1af0: 72 6e 73 20 74 68 69 73 2e 20 2a 2f 0a 20 20 20 rns this. */.
1b00: 20 75 6e 73 74 61 73 68 3a 20 66 75 6e 63 74 69 unstash: functi
1b10: 6f 6e 28 77 69 6e 66 6f 29 7b 0a 20 20 20 20 20 on(winfo){.
1b20: 20 63 6f 6e 73 74 20 6e 64 78 20 3d 20 74 68 69 const ndx = thi
1b30: 73 2e 67 65 74 49 6e 64 65 78 28 29 2c 0a 20 20 s.getIndex(),.
1b40: 20 20 20 20 20 20 20 20 20 20 6b 65 79 20 3d 20 key =
1b50: 74 68 69 73 2e 69 6e 64 65 78 4b 65 79 28 77 69 this.indexKey(wi
1b60: 6e 66 6f 29 3b 0a 20 20 20 20 20 20 64 65 6c 65 nfo);. dele
1b70: 74 65 20 77 69 6e 66 6f 2e 73 74 61 73 68 54 69 te winfo.stashTi
1b80: 6d 65 3b 0a 20 20 20 20 20 20 64 65 6c 65 74 65 me;. delete
1b90: 20 6e 64 78 5b 6b 65 79 5d 3b 0a 20 20 20 20 20 ndx[key];.
1ba0: 20 46 2e 73 74 6f 72 61 67 65 2e 72 65 6d 6f 76 F.storage.remov
1bb0: 65 28 74 68 69 73 2e 63 6f 6e 74 65 6e 74 4b 65 e(this.contentKe
1bc0: 79 28 6b 65 79 29 29 3b 0a 20 20 20 20 20 20 74 y(key));. t
1bd0: 68 69 73 2e 73 74 6f 72 65 49 6e 64 65 78 28 29 his.storeIndex()
1be0: 3b 0a 20 20 20 20 20 20 74 68 69 73 2e 5f 66 69 ;. this._fi
1bf0: 72 65 53 74 61 73 68 45 76 65 6e 74 28 29 3b 0a reStashEvent();.
1c00: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 return thi
1c10: 73 3b 0a 20 20 20 20 7d 2c 0a 20 20 20 20 2f 2a s;. },. /*
1c20: 2a 0a 20 20 20 20 20 20 20 43 6c 65 61 72 73 20 *. Clears
1c30: 61 6c 6c 20 24 73 74 61 73 68 20 65 6e 74 72 69 all $stash entri
1c40: 65 73 20 66 72 6f 6d 20 46 2e 73 74 6f 72 61 67 es from F.storag
1c50: 65 2e 20 52 65 74 75 72 6e 73 20 74 68 69 73 2e e. Returns this.
1c60: 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20 63 6c 65 . */. cle
1c70: 61 72 3a 20 66 75 6e 63 74 69 6f 6e 28 29 7b 0a ar: function(){.
1c80: 20 20 20 20 20 20 63 6f 6e 73 74 20 6e 64 78 20 const ndx
1c90: 3d 20 74 68 69 73 2e 67 65 74 49 6e 64 65 78 28 = this.getIndex(
1ca0: 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 ),. s
1cb0: 65 6c 66 20 3d 20 74 68 69 73 3b 0a 20 20 20 20 elf = this;.
1cc0: 20 20 6c 65 74 20 63 6f 75 6e 74 20 3d 20 30 3b let count = 0;
1cd0: 0a 20 20 20 20 20 20 4f 62 6a 65 63 74 2e 6b 65 . Object.ke
1ce0: 79 73 28 6e 64 78 29 2e 66 6f 72 45 61 63 68 28 ys(ndx).forEach(
1cf0: 66 75 6e 63 74 69 6f 6e 28 6b 29 7b 0a 20 20 20 function(k){.
1d00: 20 20 20 20 20 2b 2b 63 6f 75 6e 74 3b 0a 20 20 ++count;.
1d10: 20 20 20 20 20 20 63 6f 6e 73 74 20 65 20 3d 20 const e =
1d20: 6e 64 78 5b 6b 5d 3b 0a 20 20 20 20 20 20 20 20 ndx[k];.
1d30: 64 65 6c 65 74 65 20 6e 64 78 5b 6b 5d 3b 0a 20 delete ndx[k];.
1d40: 20 20 20 20 20 20 20 46 2e 73 74 6f 72 61 67 65 F.storage
1d50: 2e 72 65 6d 6f 76 65 28 73 65 6c 66 2e 63 6f 6e .remove(self.con
1d60: 74 65 6e 74 4b 65 79 28 6b 29 29 3b 0a 20 20 20 tentKey(k));.
1d70: 20 20 20 7d 29 3b 0a 20 20 20 20 20 20 46 2e 73 });. F.s
1d80: 74 6f 72 61 67 65 2e 72 65 6d 6f 76 65 28 74 68 torage.remove(th
1d90: 69 73 2e 6b 65 79 73 2e 69 6e 64 65 78 29 3b 0a is.keys.index);.
1da0: 20 20 20 20 20 20 64 65 6c 65 74 65 20 74 68 69 delete thi
1db0: 73 2e 69 6e 64 65 78 3b 0a 20 20 20 20 20 20 69 s.index;. i
1dc0: 66 28 63 6f 75 6e 74 29 20 74 68 69 73 2e 5f 66 f(count) this._f
1dd0: 69 72 65 53 74 61 73 68 45 76 65 6e 74 28 29 3b ireStashEvent();
1de0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 . return th
1df0: 69 73 3b 0a 20 20 20 20 7d 2c 0a 20 20 20 20 2f is;. },. /
1e00: 2a 2a 0a 20 20 20 20 20 20 20 52 65 6d 6f 76 65 **. Remove
1e10: 73 20 61 6c 6c 20 62 75 74 20 74 68 65 20 6d 61 s all but the ma
1e20: 78 43 6f 75 6e 74 20 6d 6f 73 74 2d 72 65 63 65 xCount most-rece
1e30: 6e 74 6c 79 2d 75 70 64 61 74 65 64 20 73 74 61 ntly-updated sta
1e40: 73 68 0a 20 20 20 20 20 20 20 65 6e 74 72 69 65 sh. entrie
1e50: 73 2c 20 77 68 65 72 65 20 6d 61 78 43 6f 75 6e s, where maxCoun
1e60: 74 20 64 65 66 61 75 6c 74 73 20 74 6f 20 74 68 t defaults to th
1e70: 69 73 2e 70 72 75 6e 65 2e 64 65 66 61 75 6c 74 is.prune.default
1e80: 4d 61 78 43 6f 75 6e 74 2e 0a 20 20 20 20 2a 2f MaxCount.. */
1e90: 0a 20 20 20 20 70 72 75 6e 65 3a 20 66 75 6e 63 . prune: func
1ea0: 74 69 6f 6e 20 66 28 6d 61 78 43 6f 75 6e 74 29 tion f(maxCount)
1eb0: 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 6e 64 {. const nd
1ec0: 78 20 3d 20 74 68 69 73 2e 67 65 74 49 6e 64 65 x = this.getInde
1ed0: 78 28 29 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 x();. const
1ee0: 20 6c 69 20 3d 20 5b 5d 3b 0a 20 20 20 20 20 20 li = [];.
1ef0: 69 66 28 21 6d 61 78 43 6f 75 6e 74 20 7c 7c 20 if(!maxCount ||
1f00: 6d 61 78 43 6f 75 6e 74 3c 30 29 20 6d 61 78 43 maxCount<0) maxC
1f10: 6f 75 6e 74 20 3d 20 66 2e 64 65 66 61 75 6c 74 ount = f.default
1f20: 4d 61 78 43 6f 75 6e 74 3b 0a 20 20 20 20 20 20 MaxCount;.
1f30: 4f 62 6a 65 63 74 2e 6b 65 79 73 28 6e 64 78 29 Object.keys(ndx)
1f40: 2e 66 6f 72 45 61 63 68 28 28 6b 29 3d 3e 6c 69 .forEach((k)=>li
1f50: 2e 70 75 73 68 28 6e 64 78 5b 6b 5d 29 29 3b 0a .push(ndx[k]));.
1f60: 20 20 20 20 20 20 6c 69 2e 73 6f 72 74 28 28 6c li.sort((l
1f70: 2c 72 29 3d 3e 6c 2e 73 74 61 73 68 54 69 6d 65 ,r)=>l.stashTime
1f80: 20 2d 20 72 2e 73 74 61 73 68 54 69 6d 65 29 3b - r.stashTime);
1f90: 0a 20 20 20 20 20 20 6c 65 74 20 6e 20 3d 20 30 . let n = 0
1fa0: 3b 0a 20 20 20 20 20 20 77 68 69 6c 65 28 6c 69 ;. while(li
1fb0: 2e 6c 65 6e 67 74 68 3e 6d 61 78 43 6f 75 6e 74 .length>maxCount
1fc0: 29 7b 0a 20 20 20 20 20 20 20 20 2b 2b 6e 3b 0a ){. ++n;.
1fd0: 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 65 20 const e
1fe0: 3d 20 6c 69 2e 73 68 69 66 74 28 29 3b 0a 20 20 = li.shift();.
1ff0: 20 20 20 20 20 20 74 68 69 73 2e 5f 64 69 73 61 this._disa
2000: 62 6c 65 4e 65 78 74 45 76 65 6e 74 20 3d 20 74 bleNextEvent = t
2010: 72 75 65 3b 0a 20 20 20 20 20 20 20 20 74 68 69 rue;. thi
2020: 73 2e 75 6e 73 74 61 73 68 28 65 29 3b 0a 20 20 s.unstash(e);.
2030: 20 20 20 20 20 20 63 6f 6e 73 6f 6c 65 2e 77 61 console.wa
2040: 72 6e 28 22 50 72 75 6e 65 64 20 6f 6c 64 65 73 rn("Pruned oldes
2050: 74 20 6c 6f 63 61 6c 20 66 69 6c 65 20 65 64 69 t local file edi
2060: 74 20 65 6e 74 72 79 3a 22 2c 65 29 3b 0a 20 20 t entry:",e);.
2070: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 6e }. if(n
2080: 29 20 74 68 69 73 2e 5f 66 69 72 65 53 74 61 73 ) this._fireStas
2090: 68 45 76 65 6e 74 28 29 3b 0a 20 20 20 20 7d 0a hEvent();. }.
20a0: 20 20 7d 3b 0a 20 20 24 73 74 61 73 68 2e 70 72 };. $stash.pr
20b0: 75 6e 65 2e 64 65 66 61 75 6c 74 4d 61 78 43 6f une.defaultMaxCo
20c0: 75 6e 74 20 3d 20 50 2e 63 6f 6e 66 69 67 2e 64 unt = P.config.d
20d0: 65 66 61 75 6c 74 4d 61 78 53 74 61 73 68 53 69 efaultMaxStashSi
20e0: 7a 65 20 7c 7c 20 31 30 3b 0a 20 20 50 2e 24 73 ze || 10;. P.$s
20f0: 74 61 73 68 20 3d 20 24 73 74 61 73 68 20 2f 2a tash = $stash /*
2100: 20 77 65 20 68 61 76 65 20 74 6f 20 65 78 70 6f we have to expo
2110: 73 65 20 74 68 69 73 20 66 6f 72 20 74 68 65 20 se this for the
2120: 6e 65 77 2d 70 61 67 65 20 63 61 73 65 20 3a 2f new-page case :/
2130: 20 2a 2f 3b 0a 20 20 0a 20 20 2f 2a 2a 0a 20 20 */;. . /**.
2140: 20 20 20 49 6e 74 65 72 6e 61 6c 20 77 6f 72 6b Internal work
2150: 61 72 6f 75 6e 64 20 74 6f 20 73 65 6c 65 63 74 around to select
2160: 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 65 the current pre
2170: 76 69 65 77 20 6d 6f 64 65 0a 20 20 20 20 20 61 view mode. a
2180: 6e 64 20 66 69 72 65 20 61 20 63 68 61 6e 67 65 nd fire a change
2190: 20 65 76 65 6e 74 20 69 66 20 74 68 65 20 76 61 event if the va
21a0: 6c 75 65 20 61 63 74 75 61 6c 6c 79 20 63 68 61 lue actually cha
21b0: 6e 67 65 73 0a 20 20 20 20 20 6f 72 20 69 66 20 nges. or if
21c0: 66 6f 72 63 65 45 76 65 6e 74 20 69 73 20 74 72 forceEvent is tr
21d0: 75 74 68 79 2e 0a 20 20 2a 2f 0a 20 20 50 2e 73 uthy.. */. P.s
21e0: 65 6c 65 63 74 4d 69 6d 65 74 79 70 65 20 3d 20 electMimetype =
21f0: 66 75 6e 63 74 69 6f 6e 28 6d 6f 64 65 56 61 6c function(modeVal
2200: 75 65 2c 20 66 6f 72 63 65 45 76 65 6e 74 29 7b ue, forceEvent){
2210: 0a 20 20 20 20 63 6f 6e 73 74 20 73 20 3d 20 74 . const s = t
2220: 68 69 73 2e 65 2e 73 65 6c 65 63 74 4d 69 6d 65 his.e.selectMime
2230: 74 79 70 65 3b 0a 20 20 20 20 69 66 28 21 6d 6f type;. if(!mo
2240: 64 65 56 61 6c 75 65 29 20 6d 6f 64 65 56 61 6c deValue) modeVal
2250: 75 65 20 3d 20 73 2e 76 61 6c 75 65 3b 0a 20 20 ue = s.value;.
2260: 20 20 65 6c 73 65 20 69 66 28 73 2e 76 61 6c 75 else if(s.valu
2270: 65 20 21 3d 20 6d 6f 64 65 56 61 6c 75 65 29 7b e != modeValue){
2280: 0a 20 20 20 20 20 20 73 2e 76 61 6c 75 65 20 3d . s.value =
2290: 20 6d 6f 64 65 56 61 6c 75 65 3b 0a 20 20 20 20 modeValue;.
22a0: 20 20 66 6f 72 63 65 45 76 65 6e 74 20 3d 20 74 forceEvent = t
22b0: 72 75 65 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 rue;. }. i
22c0: 66 28 66 6f 72 63 65 45 76 65 6e 74 29 7b 0a 20 f(forceEvent){.
22d0: 20 20 20 20 20 2f 2f 20 46 6f 72 63 65 20 55 49 // Force UI
22e0: 20 75 70 64 61 74 65 0a 20 20 20 20 20 20 73 2e update. s.
22f0: 64 69 73 70 61 74 63 68 45 76 65 6e 74 28 6e 65 dispatchEvent(ne
2300: 77 20 45 76 65 6e 74 28 27 63 68 61 6e 67 65 27 w Event('change'
2310: 2c 7b 74 61 72 67 65 74 3a 73 7d 29 29 3b 0a 20 ,{target:s}));.
2320: 20 20 20 7d 0a 20 20 7d 3b 0a 0a 20 20 63 6f 6e }. };.. con
2330: 73 74 20 57 69 6b 69 4c 69 73 74 20 3d 20 7b 0a st WikiList = {.
2340: 20 20 20 20 65 3a 20 7b 7d 2c 0a 20 20 20 20 2f e: {},. /
2350: 2a 2a 20 55 70 64 61 74 65 20 4f 50 54 49 4f 4e ** Update OPTION
2360: 20 65 6c 65 6d 65 6e 74 73 20 74 6f 20 72 65 66 elements to ref
2370: 6c 65 63 74 20 77 68 65 74 68 65 72 20 74 68 65 lect whether the
2380: 20 70 61 67 65 20 68 61 73 0a 20 20 20 20 20 20 page has.
2390: 20 20 6c 6f 63 61 6c 20 63 68 61 6e 67 65 73 20 local changes
23a0: 6f 72 20 69 73 20 6e 65 77 2f 75 6e 73 61 76 65 or is new/unsave
23b0: 64 2e 20 2a 2f 0a 20 20 20 20 72 65 66 72 65 73 d. */. refres
23c0: 68 53 74 61 73 68 4d 61 72 6b 73 3a 20 66 75 6e hStashMarks: fun
23d0: 63 74 69 6f 6e 28 29 7b 0a 20 20 20 20 20 20 74 ction(){. t
23e0: 68 69 73 2e 65 2e 73 65 6c 65 63 74 2e 71 75 65 his.e.select.que
23f0: 72 79 53 65 6c 65 63 74 6f 72 41 6c 6c 28 0a 20 rySelectorAll(.
2400: 20 20 20 20 20 20 20 27 6f 70 74 69 6f 6e 27 0a 'option'.
2410: 20 20 20 20 20 20 29 2e 66 6f 72 45 61 63 68 28 ).forEach(
2420: 66 75 6e 63 74 69 6f 6e 28 6f 29 7b 0a 20 20 20 function(o){.
2430: 20 20 20 20 20 63 6f 6e 73 74 20 73 74 61 73 68 const stash
2440: 65 64 20 3d 20 24 73 74 61 73 68 2e 67 65 74 57 ed = $stash.getW
2450: 69 6e 66 6f 28 7b 6e 61 6d 65 3a 6f 2e 76 61 6c info({name:o.val
2460: 75 65 7d 29 3b 0a 20 20 20 20 20 20 20 20 69 66 ue});. if
2470: 28 73 74 61 73 68 65 64 29 7b 0a 20 20 20 20 20 (stashed){.
2480: 20 20 20 20 20 63 6f 6e 73 74 20 69 73 4e 65 77 const isNew
2490: 20 3d 20 27 73 61 6e 64 62 6f 78 27 3d 3d 3d 73 = 'sandbox'===s
24a0: 74 61 73 68 65 64 2e 74 79 70 65 20 3f 20 66 61 tashed.type ? fa
24b0: 6c 73 65 20 3a 20 21 73 74 61 73 68 65 64 2e 76 lse : !stashed.v
24c0: 65 72 73 69 6f 6e 3b 0a 20 20 20 20 20 20 20 20 ersion;.
24d0: 20 20 44 2e 61 64 64 43 6c 61 73 73 28 6f 2c 20 D.addClass(o,
24e0: 69 73 4e 65 77 20 3f 20 27 73 74 61 73 68 65 64 isNew ? 'stashed
24f0: 2d 6e 65 77 27 20 3a 27 73 74 61 73 68 65 64 27 -new' :'stashed'
2500: 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 );. }else
2510: 7b 0a 20 20 20 20 20 20 20 20 20 20 44 2e 72 65 {. D.re
2520: 6d 6f 76 65 43 6c 61 73 73 28 6f 2c 20 27 73 74 moveClass(o, 'st
2530: 61 73 68 65 64 27 2c 20 27 73 74 61 73 68 65 64 ashed', 'stashed
2540: 2d 6e 65 77 27 29 3b 0a 20 20 20 20 20 20 20 20 -new');.
2550: 7d 0a 20 20 20 20 20 20 7d 29 3b 0a 20 20 20 20 }. });.
2560: 7d 2c 0a 20 20 20 20 69 6e 69 74 3a 20 66 75 6e },. init: fun
2570: 63 74 69 6f 6e 28 70 61 72 65 6e 74 45 6c 65 6d ction(parentElem
2580: 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 73 ){. const s
2590: 65 6c 20 3d 20 44 2e 73 65 6c 65 63 74 28 29 2c el = D.select(),
25a0: 20 62 74 6e 20 3d 20 44 2e 62 75 74 74 6f 6e 28 btn = D.button(
25b0: 22 52 65 6c 6f 61 64 20 70 61 67 65 20 6c 69 73 "Reload page lis
25c0: 74 22 29 3b 0a 20 20 20 20 20 20 74 68 69 73 2e t");. this.
25d0: 65 2e 73 65 6c 65 63 74 20 3d 20 73 65 6c 3b 0a e.select = sel;.
25e0: 20 20 20 20 20 20 44 2e 61 64 64 43 6c 61 73 73 D.addClass
25f0: 28 70 61 72 65 6e 74 45 6c 65 6d 2c 20 27 77 69 (parentElem, 'wi
2600: 6b 69 65 64 69 74 2d 70 61 67 65 2d 6c 69 73 74 kiedit-page-list
2610: 2d 77 72 61 70 70 65 72 27 29 3b 0a 20 20 20 20 -wrapper');.
2620: 20 20 44 2e 63 6c 65 61 72 45 6c 65 6d 65 6e 74 D.clearElement
2630: 28 70 61 72 65 6e 74 45 6c 65 6d 29 3b 0a 20 20 (parentElem);.
2640: 20 20 20 20 44 2e 61 70 70 65 6e 64 28 0a 20 20 D.append(.
2650: 20 20 20 20 20 20 70 61 72 65 6e 74 45 6c 65 6d parentElem
2660: 2c 20 62 74 6e 2c 0a 20 20 20 20 20 20 20 20 44 , btn,. D
2670: 2e 61 70 70 65 6e 64 28 44 2e 73 70 61 6e 28 29 .append(D.span()
2680: 2c 20 22 53 65 6c 65 63 74 20 61 20 70 61 67 65 , "Select a page
2690: 20 74 6f 20 65 64 69 74 3a 22 29 2c 0a 20 20 20 to edit:"),.
26a0: 20 20 20 20 20 73 65 6c 2c 0a 20 20 20 20 20 20 sel,.
26b0: 20 20 44 2e 61 70 70 65 6e 64 28 44 2e 73 70 61 D.append(D.spa
26c0: 6e 28 29 2c 20 22 2a 20 3d 20 6c 6f 63 61 6c 20 n(), "* = local
26d0: 65 64 69 74 73 20 65 78 69 73 74 22 29 2c 0a 20 edits exist"),.
26e0: 20 20 20 20 20 20 20 44 2e 61 70 70 65 6e 64 28 D.append(
26f0: 44 2e 73 70 61 6e 28 29 2c 20 22 2b 20 3d 20 6e D.span(), "+ = n
2700: 65 77 2f 75 6e 73 61 76 65 64 20 70 61 67 65 22 ew/unsaved page"
2710: 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 ). );.
2720: 20 44 2e 61 74 74 72 28 73 65 6c 2c 20 27 73 69 D.attr(sel, 'si
2730: 7a 65 27 2c 20 31 30 29 3b 0a 20 20 20 20 20 20 ze', 10);.
2740: 44 2e 6f 70 74 69 6f 6e 28 44 2e 64 69 73 61 62 D.option(D.disab
2750: 6c 65 28 44 2e 63 6c 65 61 72 45 6c 65 6d 65 6e le(D.clearElemen
2760: 74 28 73 65 6c 29 29 2c 20 22 4c 6f 61 64 69 6e t(sel)), "Loadin
2770: 67 2e 2e 2e 22 29 3b 0a 20 20 20 20 20 20 63 6f g...");. co
2780: 6e 73 74 20 73 65 6c 66 20 3d 20 74 68 69 73 3b nst self = this;
2790: 0a 20 20 20 20 20 20 62 74 6e 2e 61 64 64 45 76 . btn.addEv
27a0: 65 6e 74 4c 69 73 74 65 6e 65 72 28 0a 20 20 20 entListener(.
27b0: 20 20 20 20 20 27 63 6c 69 63 6b 27 2c 0a 20 20 'click',.
27c0: 20 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 63 function c
27d0: 6c 69 63 6b 28 29 7b 0a 20 20 20 20 20 20 20 20 lick(){.
27e0: 20 20 69 66 28 21 63 6c 69 63 6b 2e 73 6f 72 74 if(!click.sort
27f0: 69 63 61 73 65 29 7b 0a 20 20 20 20 20 20 20 20 icase){.
2800: 20 20 20 20 63 6c 69 63 6b 2e 73 6f 72 74 69 63 click.sortic
2810: 61 73 65 20 3d 20 66 75 6e 63 74 69 6f 6e 28 6c ase = function(l
2820: 2c 72 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 ,r){.
2830: 20 20 20 6c 20 3d 20 6c 2e 74 6f 4c 6f 77 65 72 l = l.toLower
2840: 43 61 73 65 28 29 3b 0a 20 20 20 20 20 20 20 20 Case();.
2850: 20 20 20 20 20 20 72 20 3d 20 72 2e 74 6f 4c 6f r = r.toLo
2860: 77 65 72 43 61 73 65 28 29 3b 0a 20 20 20 20 20 werCase();.
2870: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return
2880: 6c 3c 3d 72 20 3f 20 2d 31 20 3a 20 31 3b 0a 20 l<=r ? -1 : 1;.
2890: 20 20 20 20 20 20 20 20 20 20 20 7d 3b 0a 20 20 };.
28a0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 }.
28b0: 20 20 20 20 46 2e 66 65 74 63 68 28 27 77 69 6b F.fetch('wik
28c0: 69 61 6a 61 78 2f 6c 69 73 74 27 2c 7b 0a 20 20 iajax/list',{.
28d0: 20 20 20 20 20 20 20 20 20 20 72 65 73 70 6f 6e respon
28e0: 73 65 54 79 70 65 3a 20 27 6a 73 6f 6e 27 2c 0a seType: 'json',.
28f0: 20 20 20 20 20 20 20 20 20 20 20 20 6f 6e 6c 6f onlo
2900: 61 64 3a 20 66 75 6e 63 74 69 6f 6e 28 6c 69 73 ad: function(lis
2910: 74 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 t){.
2920: 20 20 2f 2a 20 4a 75 6d 70 20 74 68 72 6f 75 67 /* Jump throug
2930: 68 20 73 6f 6d 65 20 68 6f 6f 70 73 20 74 6f 20 h some hoops to
2940: 69 6e 74 65 67 72 61 74 65 20 6e 65 77 2f 75 6e integrate new/un
2950: 73 61 76 65 64 0a 20 20 20 20 20 20 20 20 20 20 saved.
2960: 20 20 20 20 20 20 20 70 61 67 65 73 20 69 6e 74 pages int
2970: 6f 20 74 68 65 20 6c 69 73 74 20 6f 66 20 65 78 o the list of ex
2980: 69 73 74 69 6e 67 20 70 61 67 65 73 2e 2e 2e 20 isting pages...
2990: 57 65 20 75 73 65 20 61 20 6d 61 70 0a 20 20 20 We use a map.
29a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73 as
29b0: 20 61 6e 20 69 6e 74 65 72 6d 65 64 69 61 72 79 an intermediary
29c0: 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 66 69 6c in order to fil
29d0: 74 65 72 20 6f 75 74 20 61 6e 79 20 6c 6f 63 61 ter out any loca
29e0: 6c 2d 73 74 61 73 68 0a 20 20 20 20 20 20 20 20 l-stash.
29f0: 20 20 20 20 20 20 20 20 20 64 75 70 65 73 20 66 dupes f
2a00: 72 6f 6d 20 73 65 72 76 65 72 2d 73 69 64 65 20 rom server-side
2a10: 63 6f 70 69 65 73 2e 20 2a 2f 0a 20 20 20 20 20 copies. */.
2a20: 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 6d const m
2a30: 61 70 20 3d 20 7b 7d 2c 20 6e 64 78 20 3d 20 24 ap = {}, ndx = $
2a40: 73 74 61 73 68 2e 67 65 74 49 6e 64 65 78 28 29 stash.getIndex()
2a50: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ;.
2a60: 44 2e 63 6c 65 61 72 45 6c 65 6d 65 6e 74 28 73 D.clearElement(s
2a70: 65 6c 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 el);.
2a80: 20 20 20 6c 69 73 74 2e 66 6f 72 45 61 63 68 28 list.forEach(
2a90: 28 6e 61 6d 65 29 3d 3e 6d 61 70 5b 6e 61 6d 65 (name)=>map[name
2aa0: 5d 20 3d 20 74 72 75 65 29 3b 0a 20 20 20 20 20 ] = true);.
2ab0: 20 20 20 20 20 20 20 20 20 4f 62 6a 65 63 74 2e Object.
2ac0: 6b 65 79 73 28 6e 64 78 29 2e 66 6f 72 45 61 63 keys(ndx).forEac
2ad0: 68 28 66 75 6e 63 74 69 6f 6e 28 6b 65 79 29 7b h(function(key){
2ae0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2af0: 20 63 6f 6e 73 74 20 77 69 6e 66 6f 20 3d 20 6e const winfo = n
2b00: 64 78 5b 6b 65 79 5d 3b 0a 20 20 20 20 20 20 20 dx[key];.
2b10: 20 20 20 20 20 20 20 20 20 69 66 28 21 77 69 6e if(!win
2b20: 66 6f 2e 76 65 72 73 69 6f 6e 2f 2a 6e 65 77 20 fo.version/*new
2b30: 70 61 67 65 2a 2f 29 20 6d 61 70 5b 77 69 6e 66 page*/) map[winf
2b40: 6f 2e 6e 61 6d 65 5d 20 3d 20 74 72 75 65 3b 0a o.name] = true;.
2b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 29 })
2b60: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ;.
2b70: 4f 62 6a 65 63 74 2e 6b 65 79 73 28 6d 61 70 29 Object.keys(map)
2b80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2b90: 20 2e 73 6f 72 74 28 63 6c 69 63 6b 2e 73 6f 72 .sort(click.sor
2ba0: 74 69 63 61 73 65 29 0a 20 20 20 20 20 20 20 20 ticase).
2bb0: 20 20 20 20 20 20 20 20 2e 66 6f 72 45 61 63 68 .forEach
2bc0: 28 28 6e 61 6d 65 29 3d 3e 44 2e 6f 70 74 69 6f ((name)=>D.optio
2bd0: 6e 28 73 65 6c 2c 20 6e 61 6d 65 29 29 3b 0a 20 n(sel, name));.
2be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 44 2e 65 D.e
2bf0: 6e 61 62 6c 65 28 73 65 6c 29 3b 0a 20 20 20 20 nable(sel);.
2c00: 20 20 20 20 20 20 20 20 20 20 69 66 28 50 2e 77 if(P.w
2c10: 69 6e 66 6f 29 20 73 65 6c 2e 76 61 6c 75 65 20 info) sel.value
2c20: 3d 20 50 2e 77 69 6e 66 6f 2e 6e 61 6d 65 3b 0a = P.winfo.name;.
2c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se
2c40: 6c 66 2e 72 65 66 72 65 73 68 53 74 61 73 68 4d lf.refreshStashM
2c50: 61 72 6b 73 28 29 3b 0a 20 20 20 20 20 20 20 20 arks();.
2c60: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 }.
2c70: 7d 29 3b 0a 20 20 20 20 20 20 20 20 7d 2c 0a 20 });. },.
2c80: 20 20 20 20 20 20 20 66 61 6c 73 65 0a 20 20 20 false.
2c90: 20 20 20 29 3b 0a 20 20 20 20 20 20 62 74 6e 2e );. btn.
2ca0: 63 6c 69 63 6b 28 29 3b 0a 20 20 20 20 20 20 73 click();. s
2cb0: 65 6c 2e 61 64 64 45 76 65 6e 74 4c 69 73 74 65 el.addEventListe
2cc0: 6e 65 72 28 0a 20 20 20 20 20 20 20 20 27 63 68 ner(. 'ch
2cd0: 61 6e 67 65 27 2c 0a 20 20 20 20 20 20 20 20 28 ange',. (
2ce0: 65 29 3d 3e 50 2e 6c 6f 61 64 50 61 67 65 28 65 e)=>P.loadPage(e
2cf0: 2e 74 61 72 67 65 74 2e 76 61 6c 75 65 29 2c 0a .target.value),.
2d00: 20 20 20 20 20 20 20 20 66 61 6c 73 65 0a 20 20 false.
2d10: 20 20 20 20 29 3b 0a 20 20 20 20 20 20 46 2e 70 );. F.p
2d20: 61 67 65 2e 61 64 64 45 76 65 6e 74 4c 69 73 74 age.addEventList
2d30: 65 6e 65 72 28 0a 20 20 20 20 20 20 20 20 27 77 ener(. 'w
2d40: 69 6b 69 2d 73 74 61 73 68 2d 75 70 64 61 74 65 iki-stash-update
2d50: 64 27 2c 0a 20 20 20 20 20 20 20 20 28 29 3d 3e d',. ()=>
2d60: 74 68 69 73 2e 72 65 66 72 65 73 68 53 74 61 73 this.refreshStas
2d70: 68 4d 61 72 6b 73 28 29 2c 0a 20 20 20 20 20 20 hMarks(),.
2d80: 20 20 66 61 6c 73 65 0a 20 20 20 20 20 20 29 3b false. );
2d90: 0a 20 20 20 20 7d 0a 20 20 7d 3b 0a 0a 20 20 2f . }. };.. /
2da0: 2a 2a 0a 20 20 20 20 20 4b 65 65 70 20 74 72 61 **. Keep tra
2db0: 63 6b 20 6f 66 20 68 6f 77 20 6d 61 6e 79 20 69 ck of how many i
2dc0: 6e 2d 66 6c 69 67 68 74 20 41 4a 41 58 20 72 65 n-flight AJAX re
2dd0: 71 75 65 73 74 73 20 74 68 65 72 65 20 61 72 65 quests there are
2de0: 20 73 6f 20 77 65 0a 20 20 20 20 20 63 61 6e 20 so we. can
2df0: 64 69 73 61 62 6c 65 20 69 6e 70 75 74 20 65 6c disable input el
2e00: 65 6d 65 6e 74 73 20 77 68 69 6c 65 20 61 6e 79 ements while any
2e10: 20 61 72 65 20 70 65 6e 64 69 6e 67 2e 20 46 6f are pending. Fo
2e20: 72 0a 20 20 20 20 20 73 69 6d 70 6c 69 63 69 74 r. simplicit
2e30: 79 27 73 20 73 61 6b 65 20 77 65 20 73 69 6d 70 y's sake we simp
2e40: 6c 79 20 64 69 73 61 62 6c 65 20 41 4c 4c 20 4f ly disable ALL O
2e50: 46 20 49 54 20 77 68 69 6c 65 20 61 6e 79 20 41 F IT while any A
2e60: 4a 41 58 20 69 73 0a 20 20 20 20 20 70 65 6e 64 JAX is. pend
2e70: 69 6e 67 2c 20 72 61 74 68 65 72 20 74 68 61 6e ing, rather than
2e80: 20 64 69 73 61 62 6c 69 6e 67 20 6f 70 65 72 61 disabling opera
2e90: 74 69 6f 6e 2d 73 70 65 63 69 66 69 63 20 55 49 tion-specific UI
2ea0: 20 65 6c 65 6d 65 6e 74 73 2c 0a 20 20 20 20 20 elements,.
2eb0: 77 68 69 63 68 20 77 6f 75 6c 64 20 62 65 20 61 which would be a
2ec0: 20 68 75 67 65 20 6d 61 69 6e 74 65 6e 61 6e 63 huge maintenanc
2ed0: 65 20 68 61 73 73 6c 65 2e 0a 0a 20 20 20 20 20 e hassle...
2ee0: 4e 6f 74 69 6e 67 2c 20 68 6f 77 65 76 65 72 2c Noting, however,
2ef0: 20 74 68 61 74 20 74 68 69 73 20 67 6c 6f 62 61 that this globa
2f00: 6c 20 6f 6e 2f 6f 66 66 20 69 73 20 6e 6f 74 20 l on/off is not
2f10: 2a 71 75 69 74 65 2a 0a 20 20 20 20 20 70 65 64 *quite*. ped
2f20: 61 6e 74 69 63 61 6c 6c 79 20 63 6f 72 72 65 63 antically correc
2f30: 74 2e 20 50 65 64 61 6e 74 69 63 61 6c 6c 79 20 t. Pedantically
2f40: 73 70 65 61 6b 69 6e 67 2e 20 49 66 20 61 6e 20 speaking. If an
2f50: 65 6c 65 6d 65 6e 74 20 69 73 0a 20 20 20 20 20 element is.
2f60: 64 69 73 61 62 6c 65 64 20 62 65 66 6f 72 65 20 disabled before
2f70: 61 6e 20 58 48 52 20 73 74 61 72 74 73 2c 20 74 an XHR starts, t
2f80: 68 69 73 20 63 6f 64 65 20 22 73 68 6f 75 6c 64 his code "should
2f90: 22 20 6e 6f 74 69 63 65 20 74 68 61 74 20 61 6e " notice that an
2fa0: 64 0a 20 20 20 20 20 6e 6f 74 20 69 6e 63 6c 75 d. not inclu
2fb0: 64 65 20 69 74 20 69 6e 20 74 68 65 20 74 6f 2d de it in the to-
2fc0: 72 65 2d 65 6e 61 62 6c 65 20 6c 69 73 74 2e 20 re-enable list.
2fd0: 54 68 61 74 20 77 6f 75 6c 64 20 62 65 20 61 6e That would be an
2fe0: 6e 6f 79 69 6e 67 0a 20 20 20 20 20 74 6f 20 64 noying. to d
2ff0: 6f 2c 20 61 6e 64 20 62 65 63 6f 6d 65 73 20 69 o, and becomes i
3000: 6d 70 6f 73 73 69 62 6c 65 20 74 6f 20 64 6f 20 mpossible to do
3010: 70 72 6f 70 65 72 6c 79 20 6f 6e 63 65 20 6d 75 properly once mu
3020: 6c 74 69 70 6c 65 20 58 48 52 73 0a 20 20 20 20 ltiple XHRs.
3030: 20 61 72 65 20 69 6e 20 74 72 61 6e 73 69 74 20 are in transit
3040: 61 6e 64 20 61 6e 20 65 6c 65 6d 65 6e 74 20 69 and an element i
3050: 73 20 64 69 73 61 62 6c 65 64 20 73 65 70 72 61 s disabled sepra
3060: 74 65 6c 79 20 62 65 74 77 65 65 6e 20 74 77 6f tely between two
3070: 0a 20 20 20 20 20 6f 66 20 74 68 6f 73 65 20 69 . of those i
3080: 6e 2d 74 72 61 6e 73 69 74 20 72 65 71 75 65 73 n-transit reques
3090: 74 73 20 28 74 68 61 74 20 77 6f 75 6c 64 20 62 ts (that would b
30a0: 65 20 61 6e 20 75 6e 6c 69 6b 65 6c 79 2c 20 62 e an unlikely, b
30b0: 75 74 0a 20 20 20 20 20 70 6f 73 73 69 62 6c 65 ut. possible
30c0: 2c 20 63 6f 72 6e 65 72 20 63 61 73 65 29 2e 0a , corner case)..
30d0: 20 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 61 6a 61 */. const aja
30e0: 78 53 74 61 74 65 20 3d 20 7b 0a 20 20 20 20 63 xState = {. c
30f0: 6f 75 6e 74 3a 20 30 20 2f 2a 20 69 6e 2d 66 6c ount: 0 /* in-fl
3100: 69 67 68 74 20 46 2e 66 65 74 63 68 28 29 20 72 ight F.fetch() r
3110: 65 71 75 65 73 74 73 20 2a 2f 2c 0a 20 20 20 20 equests */,.
3120: 74 6f 44 69 73 61 62 6c 65 3a 20 75 6e 64 65 66 toDisable: undef
3130: 69 6e 65 64 20 2f 2a 20 65 6c 65 6d 65 6e 74 73 ined /* elements
3140: 20 74 6f 20 64 69 73 61 62 6c 65 20 64 75 72 69 to disable duri
3150: 6e 67 20 61 6a 61 78 20 61 63 74 69 76 69 74 79 ng ajax activity
3160: 20 2a 2f 0a 20 20 7d 3b 0a 20 20 46 2e 66 65 74 */. };. F.fet
3170: 63 68 2e 62 65 66 6f 72 65 73 65 6e 64 20 3d 20 ch.beforesend =
3180: 66 75 6e 63 74 69 6f 6e 20 66 28 29 7b 0a 20 20 function f(){.
3190: 20 20 69 66 28 21 61 6a 61 78 53 74 61 74 65 2e if(!ajaxState.
31a0: 74 6f 44 69 73 61 62 6c 65 29 7b 0a 20 20 20 20 toDisable){.
31b0: 20 20 61 6a 61 78 53 74 61 74 65 2e 74 6f 44 69 ajaxState.toDi
31c0: 73 61 62 6c 65 20 3d 20 64 6f 63 75 6d 65 6e 74 sable = document
31d0: 2e 71 75 65 72 79 53 65 6c 65 63 74 6f 72 41 6c .querySelectorAl
31e0: 6c 28 0a 20 20 20 20 20 20 20 20 5b 27 62 75 74 l(. ['but
31f0: 74 6f 6e 3a 6e 6f 74 28 5b 64 69 73 61 62 6c 65 ton:not([disable
3200: 64 5d 29 27 2c 0a 20 20 20 20 20 20 20 20 20 27 d])',. '
3210: 69 6e 70 75 74 3a 6e 6f 74 28 5b 64 69 73 61 62 input:not([disab
3220: 6c 65 64 5d 29 27 2c 0a 20 20 20 20 20 20 20 20 led])',.
3230: 20 27 73 65 6c 65 63 74 3a 6e 6f 74 28 5b 64 69 'select:not([di
3240: 73 61 62 6c 65 64 5d 29 27 2c 0a 20 20 20 20 20 sabled])',.
3250: 20 20 20 20 27 74 65 78 74 61 72 65 61 3a 6e 6f 'textarea:no
3260: 74 28 5b 64 69 73 61 62 6c 65 64 5d 29 27 0a 20 t([disabled])'.
3270: 20 20 20 20 20 20 20 5d 2e 6a 6f 69 6e 28 27 2c ].join(',
3280: 27 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 '). );.
3290: 7d 0a 20 20 20 20 69 66 28 31 3d 3d 3d 2b 2b 61 }. if(1===++a
32a0: 6a 61 78 53 74 61 74 65 2e 63 6f 75 6e 74 29 7b jaxState.count){
32b0: 0a 20 20 20 20 20 20 44 2e 61 64 64 43 6c 61 73 . D.addClas
32c0: 73 28 64 6f 63 75 6d 65 6e 74 2e 62 6f 64 79 2c s(document.body,
32d0: 20 27 77 61 69 74 69 6e 67 27 29 3b 0a 20 20 20 'waiting');.
32e0: 20 20 20 44 2e 64 69 73 61 62 6c 65 28 61 6a 61 D.disable(aja
32f0: 78 53 74 61 74 65 2e 74 6f 44 69 73 61 62 6c 65 xState.toDisable
3300: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 3b 0a 20 20 );. }. };.
3310: 46 2e 66 65 74 63 68 2e 61 66 74 65 72 73 65 6e F.fetch.aftersen
3320: 64 20 3d 20 66 75 6e 63 74 69 6f 6e 28 29 7b 0a d = function(){.
3330: 20 20 20 20 69 66 28 30 3d 3d 3d 2d 2d 61 6a 61 if(0===--aja
3340: 78 53 74 61 74 65 2e 63 6f 75 6e 74 29 7b 0a 20 xState.count){.
3350: 20 20 20 20 20 44 2e 72 65 6d 6f 76 65 43 6c 61 D.removeCla
3360: 73 73 28 64 6f 63 75 6d 65 6e 74 2e 62 6f 64 79 ss(document.body
3370: 2c 20 27 77 61 69 74 69 6e 67 27 29 3b 0a 20 20 , 'waiting');.
3380: 20 20 20 20 44 2e 65 6e 61 62 6c 65 28 61 6a 61 D.enable(aja
3390: 78 53 74 61 74 65 2e 74 6f 44 69 73 61 62 6c 65 xState.toDisable
33a0: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 3b 0a 0a 20 );. }. };..
33b0: 20 46 2e 6f 6e 50 61 67 65 4c 6f 61 64 28 66 75 F.onPageLoad(fu
33c0: 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 64 nction() {. d
33d0: 6f 63 75 6d 65 6e 74 2e 62 6f 64 79 2e 63 6c 61 ocument.body.cla
33e0: 73 73 4c 69 73 74 2e 61 64 64 28 27 77 69 6b 69 ssList.add('wiki
33f0: 65 64 69 74 27 29 3b 0a 20 20 20 20 50 2e 62 61 edit');. P.ba
3400: 73 65 20 3d 20 7b 74 61 67 3a 20 45 28 27 62 61 se = {tag: E('ba
3410: 73 65 27 29 2c 20 77 69 6b 69 55 72 6c 3a 20 46 se'), wikiUrl: F
3420: 2e 72 65 70 6f 55 72 6c 28 27 77 69 6b 69 27 29 .repoUrl('wiki')
3430: 7d 3b 0a 20 20 20 20 50 2e 62 61 73 65 2e 6f 72 };. P.base.or
3440: 69 67 69 6e 61 6c 48 72 65 66 20 3d 20 50 2e 62 iginalHref = P.b
3450: 61 73 65 2e 74 61 67 2e 68 72 65 66 3b 0a 20 20 ase.tag.href;.
3460: 20 20 50 2e 74 61 62 73 20 3d 20 6e 65 77 20 66 P.tabs = new f
3470: 6f 73 73 69 6c 2e 54 61 62 4d 61 6e 61 67 65 72 ossil.TabManager
3480: 28 27 23 77 69 6b 69 65 64 69 74 2d 74 61 62 73 ('#wikiedit-tabs
3490: 27 29 3b 0a 20 20 20 20 50 2e 65 20 3d 20 7b 20 ');. P.e = {
34a0: 2f 2a 20 76 61 72 69 6f 75 73 20 44 4f 4d 20 65 /* various DOM e
34b0: 6c 65 6d 65 6e 74 73 20 77 65 20 77 6f 72 6b 20 lements we work
34c0: 77 69 74 68 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 with... */.
34d0: 20 74 61 45 64 69 74 6f 72 3a 20 45 28 27 23 77 taEditor: E('#w
34e0: 69 6b 69 65 64 69 74 2d 63 6f 6e 74 65 6e 74 2d ikiedit-content-
34f0: 65 64 69 74 6f 72 27 29 2c 0a 2f 2f 20 20 20 20 editor'),.//
3500: 20 20 62 74 6e 43 6f 6d 6d 69 74 3a 20 45 28 22 btnCommit: E("
3510: 23 77 69 6b 69 65 64 69 74 2d 62 74 6e 2d 63 6f #wikiedit-btn-co
3520: 6d 6d 69 74 22 29 2c 0a 20 20 20 20 20 20 62 74 mmit"),. bt
3530: 6e 52 65 6c 6f 61 64 3a 20 45 28 22 23 77 69 6b nReload: E("#wik
3540: 69 65 64 69 74 2d 74 61 62 2d 63 6f 6e 74 65 6e iedit-tab-conten
3550: 74 20 62 75 74 74 6f 6e 2e 77 69 6b 69 65 64 69 t button.wikiedi
3560: 74 2d 63 6f 6e 74 65 6e 74 2d 72 65 6c 6f 61 64 t-content-reload
3570: 22 29 2c 0a 20 20 20 20 20 20 73 65 6c 65 63 74 "),. select
3580: 4d 69 6d 65 74 79 70 65 3a 20 45 28 27 73 65 6c Mimetype: E('sel
3590: 65 63 74 5b 6e 61 6d 65 3d 6d 69 6d 65 74 79 70 ect[name=mimetyp
35a0: 65 5d 27 29 2c 0a 20 20 20 20 20 20 73 65 6c 65 e]'),. sele
35b0: 63 74 46 6f 6e 74 53 69 7a 65 57 72 61 70 3a 20 ctFontSizeWrap:
35c0: 45 28 27 23 73 65 6c 65 63 74 2d 66 6f 6e 74 2d E('#select-font-
35d0: 73 69 7a 65 27 29 2c 0a 2f 2f 20 20 20 20 20 20 size'),.//
35e0: 73 65 6c 65 63 74 44 69 66 66 57 53 3a 20 20 45 selectDiffWS: E
35f0: 28 27 73 65 6c 65 63 74 5b 6e 61 6d 65 3d 64 69 ('select[name=di
3600: 66 66 5f 77 73 5d 27 29 2c 0a 20 20 20 20 20 20 ff_ws]'),.
3610: 63 62 41 75 74 6f 50 72 65 76 69 65 77 3a 20 45 cbAutoPreview: E
3620: 28 27 23 63 62 2d 70 72 65 76 69 65 77 2d 61 75 ('#cb-preview-au
3630: 74 6f 75 70 64 61 74 65 20 3e 20 69 6e 70 75 74 toupdate > input
3640: 5b 74 79 70 65 3d 63 68 65 63 6b 62 6f 78 5d 27 [type=checkbox]'
3650: 29 2c 0a 20 20 20 20 20 20 70 72 65 76 69 65 77 ),. preview
3660: 54 61 72 67 65 74 3a 20 45 28 27 23 77 69 6b 69 Target: E('#wiki
3670: 65 64 69 74 2d 74 61 62 2d 70 72 65 76 69 65 77 edit-tab-preview
3680: 2d 77 72 61 70 70 65 72 27 29 2c 0a 20 20 20 20 -wrapper'),.
3690: 20 20 64 69 66 66 54 61 72 67 65 74 3a 20 45 28 diffTarget: E(
36a0: 27 23 77 69 6b 69 65 64 69 74 2d 74 61 62 2d 64 '#wikiedit-tab-d
36b0: 69 66 66 2d 77 72 61 70 70 65 72 27 29 2c 0a 20 iff-wrapper'),.
36c0: 20 20 20 20 20 74 61 62 73 3a 7b 0a 20 20 20 20 tabs:{.
36d0: 20 20 20 20 70 61 67 65 4c 69 73 74 3a 20 45 28 pageList: E(
36e0: 27 23 77 69 6b 69 65 64 69 74 2d 74 61 62 2d 70 '#wikiedit-tab-p
36f0: 61 67 65 73 27 29 2c 0a 20 20 20 20 20 20 20 20 ages'),.
3700: 63 6f 6e 74 65 6e 74 3a 20 45 28 27 23 77 69 6b content: E('#wik
3710: 69 65 64 69 74 2d 74 61 62 2d 63 6f 6e 74 65 6e iedit-tab-conten
3720: 74 27 29 2c 0a 20 20 20 20 20 20 20 20 70 72 65 t'),. pre
3730: 76 69 65 77 3a 20 45 28 27 23 77 69 6b 69 65 64 view: E('#wikied
3740: 69 74 2d 74 61 62 2d 70 72 65 76 69 65 77 27 29 it-tab-preview')
3750: 2c 0a 20 20 20 20 20 20 20 20 64 69 66 66 3a 20 ,. diff:
3760: 45 28 27 23 77 69 6b 69 65 64 69 74 2d 74 61 62 E('#wikiedit-tab
3770: 2d 64 69 66 66 27 29 0a 20 20 20 20 20 20 20 20 -diff').
3780: 2f 2f 63 6f 6d 6d 69 74 3a 20 45 28 27 23 77 69 //commit: E('#wi
3790: 6b 69 65 64 69 74 2d 74 61 62 2d 63 6f 6d 6d 69 kiedit-tab-commi
37a0: 74 27 29 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 t'). }.
37b0: 7d 3b 0a 0a 20 20 20 20 50 2e 74 61 62 73 2e 65 };.. P.tabs.e
37c0: 2e 63 6f 6e 74 61 69 6e 65 72 2e 69 6e 73 65 72 .container.inser
37d0: 74 42 65 66 6f 72 65 28 0a 20 20 20 20 20 20 2f tBefore(. /
37e0: 2a 20 4d 6f 76 65 20 74 68 65 20 73 74 61 74 75 * Move the statu
37f0: 73 20 62 61 72 20 62 65 74 77 65 65 6e 20 74 68 s bar between th
3800: 65 20 74 61 62 20 62 75 74 74 6f 6e 73 20 61 6e e tab buttons an
3810: 64 0a 20 20 20 20 20 20 20 20 20 74 61 62 20 70 d. tab p
3820: 61 6e 65 6c 73 2e 20 53 65 65 6d 73 20 74 6f 20 anels. Seems to
3830: 62 65 20 74 68 65 20 62 65 73 74 20 66 69 74 20 be the best fit
3840: 69 6e 20 74 65 72 6d 73 20 6f 66 0a 20 20 20 20 in terms of.
3850: 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 61 6c 69 functionali
3860: 74 79 20 61 6e 64 20 76 69 73 69 62 69 6c 69 74 ty and visibilit
3870: 79 2e 20 2a 2f 0a 20 20 20 20 20 20 45 28 27 23 y. */. E('#
3880: 66 6f 73 73 69 6c 2d 73 74 61 74 75 73 2d 62 61 fossil-status-ba
3890: 72 27 29 2c 20 50 2e 74 61 62 73 2e 65 2e 74 61 r'), P.tabs.e.ta
38a0: 62 73 0a 20 20 20 20 29 3b 0a 0a 20 20 20 20 50 bs. );.. P
38b0: 2e 74 61 62 73 2e 61 64 64 45 76 65 6e 74 4c 69 .tabs.addEventLi
38c0: 73 74 65 6e 65 72 28 0a 20 20 20 20 20 20 2f 2a stener(. /*
38d0: 20 53 65 74 20 75 70 20 61 75 74 6f 2d 72 65 66 Set up auto-ref
38e0: 72 65 73 68 20 6f 66 20 74 68 65 20 70 72 65 76 resh of the prev
38f0: 69 65 77 20 74 61 62 2e 2e 2e 20 2a 2f 0a 20 20 iew tab... */.
3900: 20 20 20 20 27 62 65 66 6f 72 65 2d 73 77 69 74 'before-swit
3910: 63 68 2d 74 6f 27 2c 20 66 75 6e 63 74 69 6f 6e ch-to', function
3920: 28 65 76 29 7b 0a 20 20 20 20 20 20 20 20 69 66 (ev){. if
3930: 28 65 76 2e 64 65 74 61 69 6c 3d 3d 3d 50 2e 65 (ev.detail===P.e
3940: 2e 74 61 62 73 2e 70 72 65 76 69 65 77 29 7b 0a .tabs.preview){.
3950: 20 20 20 20 20 20 20 20 20 20 50 2e 62 61 73 65 P.base
3960: 48 72 65 66 46 6f 72 57 69 6b 69 28 29 3b 0a 20 HrefForWiki();.
3970: 20 20 20 20 20 20 20 20 20 69 66 28 50 2e 70 72 if(P.pr
3980: 65 76 69 65 77 4e 65 65 64 73 55 70 64 61 74 65 eviewNeedsUpdate
3990: 20 26 26 20 50 2e 65 2e 63 62 41 75 74 6f 50 72 && P.e.cbAutoPr
39a0: 65 76 69 65 77 2e 63 68 65 63 6b 65 64 29 20 50 eview.checked) P
39b0: 2e 70 72 65 76 69 65 77 28 29 3b 0a 20 20 20 20 .preview();.
39c0: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 65 76 2e }else if(ev.
39d0: 64 65 74 61 69 6c 3d 3d 3d 50 2e 65 2e 74 61 62 detail===P.e.tab
39e0: 73 2e 64 69 66 66 29 7b 0a 20 20 20 20 20 20 20 s.diff){.
39f0: 20 20 20 2f 2a 20 57 6f 72 6b 20 61 72 6f 75 6e /* Work aroun
3a00: 64 20 61 20 77 65 69 72 64 20 62 75 67 20 77 68 d a weird bug wh
3a10: 65 72 65 20 74 68 65 20 70 61 67 65 20 67 65 74 ere the page get
3a20: 73 20 77 69 64 65 72 20 74 68 61 6e 0a 20 20 20 s wider than.
3a30: 20 20 20 20 20 20 20 20 20 20 74 68 65 20 77 69 the wi
3a40: 6e 64 6f 77 20 77 68 65 6e 20 74 68 65 20 64 69 ndow when the di
3a50: 66 66 20 74 61 62 20 69 73 20 4e 4f 54 20 69 6e ff tab is NOT in
3a60: 20 76 69 65 77 20 61 6e 64 20 74 68 65 0a 20 20 view and the.
3a70: 20 20 20 20 20 20 20 20 20 20 20 63 75 72 72 65 curre
3a80: 6e 74 20 53 42 53 20 64 69 66 66 20 77 69 64 67 nt SBS diff widg
3a90: 65 74 20 69 73 20 77 69 64 65 72 20 74 68 61 6e et is wider than
3aa0: 20 74 68 65 20 77 69 6e 64 6f 77 2e 20 57 68 65 the window. Whe
3ab0: 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 74 n. t
3ac0: 68 65 20 64 69 66 66 20 49 53 20 69 6e 20 76 69 he diff IS in vi
3ad0: 65 77 20 74 68 65 6e 20 43 53 53 20 6f 76 65 72 ew then CSS over
3ae0: 66 6c 6f 77 20 6d 61 67 69 63 61 6c 6c 79 20 72 flow magically r
3af0: 65 64 75 63 65 73 0a 20 20 20 20 20 20 20 20 20 educes.
3b00: 20 20 20 20 74 68 65 20 70 61 67 65 20 73 69 7a the page siz
3b10: 65 20 61 67 61 69 6e 2e 20 57 65 69 72 64 2e 20 e again. Weird.
3b20: 4d 61 79 62 65 20 46 46 2d 73 70 65 63 69 66 69 Maybe FF-specifi
3b30: 63 2e 20 4e 6f 74 65 20 74 68 61 74 0a 20 20 20 c. Note that.
3b40: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20 77 this w
3b50: 65 69 72 64 6e 65 73 73 20 68 61 70 70 65 6e 73 eirdness happens
3b60: 20 65 76 65 6e 20 74 68 6f 75 67 68 20 50 2e 65 even though P.e
3b70: 2e 64 69 66 66 54 61 72 67 65 74 27 73 20 70 61 .diffTarget's pa
3b80: 72 65 6e 74 0a 20 20 20 20 20 20 20 20 20 20 20 rent.
3b90: 20 20 69 73 20 68 69 64 64 65 6e 20 28 61 6e 64 is hidden (and
3ba0: 20 74 68 65 72 65 66 6f 72 65 20 50 2e 65 2e 64 therefore P.e.d
3bb0: 69 66 66 54 61 72 67 65 74 20 69 73 20 61 6c 73 iffTarget is als
3bc0: 6f 20 68 69 64 64 65 6e 29 2e 0a 20 20 20 20 20 o hidden)..
3bd0: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 */.
3be0: 20 20 44 2e 72 65 6d 6f 76 65 43 6c 61 73 73 28 D.removeClass(
3bf0: 50 2e 65 2e 64 69 66 66 54 61 72 67 65 74 2c 20 P.e.diffTarget,
3c00: 27 68 69 64 64 65 6e 27 29 3b 0a 20 20 20 20 20 'hidden');.
3c10: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 }. }.
3c20: 20 29 3b 0a 20 20 20 20 50 2e 74 61 62 73 2e 61 );. P.tabs.a
3c30: 64 64 45 76 65 6e 74 4c 69 73 74 65 6e 65 72 28 ddEventListener(
3c40: 0a 20 20 20 20 20 20 2f 2a 20 53 65 74 20 75 70 . /* Set up
3c50: 20 61 75 74 6f 2d 72 65 66 72 65 73 68 20 6f 66 auto-refresh of
3c60: 20 74 68 65 20 70 72 65 76 69 65 77 20 74 61 62 the preview tab
3c70: 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 27 62 65 ... */. 'be
3c80: 66 6f 72 65 2d 73 77 69 74 63 68 2d 66 72 6f 6d fore-switch-from
3c90: 27 2c 20 66 75 6e 63 74 69 6f 6e 28 65 76 29 7b ', function(ev){
3ca0: 0a 20 20 20 20 20 20 20 20 69 66 28 65 76 2e 64 . if(ev.d
3cb0: 65 74 61 69 6c 3d 3d 3d 50 2e 65 2e 74 61 62 73 etail===P.e.tabs
3cc0: 2e 70 72 65 76 69 65 77 29 7b 0a 20 20 20 20 20 .preview){.
3cd0: 20 20 20 20 20 50 2e 62 61 73 65 48 72 65 66 52 P.baseHrefR
3ce0: 65 73 74 6f 72 65 28 29 3b 0a 20 20 20 20 20 20 estore();.
3cf0: 20 20 7d 65 6c 73 65 20 69 66 28 65 76 2e 64 65 }else if(ev.de
3d00: 74 61 69 6c 3d 3d 3d 50 2e 65 2e 74 61 62 73 2e tail===P.e.tabs.
3d10: 64 69 66 66 29 7b 0a 20 20 20 20 20 20 20 20 20 diff){.
3d20: 20 2f 2a 20 53 65 65 20 6e 6f 74 65 73 20 69 6e /* See notes in
3d30: 20 74 68 65 20 62 65 66 6f 72 65 2d 73 77 69 74 the before-swit
3d40: 63 68 2d 74 6f 20 68 61 6e 64 6c 65 72 2e 20 2a ch-to handler. *
3d50: 2f 0a 20 20 20 20 20 20 20 20 20 20 44 2e 61 64 /. D.ad
3d60: 64 43 6c 61 73 73 28 50 2e 65 2e 64 69 66 66 54 dClass(P.e.diffT
3d70: 61 72 67 65 74 2c 20 27 68 69 64 64 65 6e 27 29 arget, 'hidden')
3d80: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 ;. }.
3d90: 20 20 7d 0a 20 20 20 20 29 3b 0a 0a 20 20 20 20 }. );..
3da0: 46 2e 63 6f 6e 6e 65 63 74 50 61 67 65 50 72 65 F.connectPagePre
3db0: 76 69 65 77 65 72 73 28 0a 20 20 20 20 20 20 50 viewers(. P
3dc0: 2e 65 2e 74 61 62 73 2e 70 72 65 76 69 65 77 2e .e.tabs.preview.
3dd0: 71 75 65 72 79 53 65 6c 65 63 74 6f 72 28 0a 20 querySelector(.
3de0: 20 20 20 20 20 20 20 27 23 62 74 6e 2d 70 72 65 '#btn-pre
3df0: 76 69 65 77 2d 72 65 66 72 65 73 68 27 0a 20 20 view-refresh'.
3e00: 20 20 20 20 29 0a 20 20 20 20 29 3b 0a 0a 20 20 ). );..
3e10: 20 20 63 6f 6e 73 74 20 64 69 66 66 42 75 74 74 const diffButt
3e20: 6f 6e 73 20 3d 20 45 28 27 23 77 69 6b 69 65 64 ons = E('#wikied
3e30: 69 74 2d 74 61 62 2d 64 69 66 66 2d 62 75 74 74 it-tab-diff-butt
3e40: 6f 6e 73 27 29 3b 0a 20 20 20 20 64 69 66 66 42 ons');. diffB
3e50: 75 74 74 6f 6e 73 2e 71 75 65 72 79 53 65 6c 65 uttons.querySele
3e60: 63 74 6f 72 28 27 62 75 74 74 6f 6e 2e 73 62 73 ctor('button.sbs
3e70: 27 29 2e 61 64 64 45 76 65 6e 74 4c 69 73 74 65 ').addEventListe
3e80: 6e 65 72 28 0a 20 20 20 20 20 20 22 63 6c 69 63 ner(. "clic
3e90: 6b 22 2c 28 65 29 3d 3e 50 2e 64 69 66 66 28 74 k",(e)=>P.diff(t
3ea0: 72 75 65 29 2c 20 66 61 6c 73 65 0a 20 20 20 20 rue), false.
3eb0: 29 3b 0a 20 20 20 20 64 69 66 66 42 75 74 74 6f );. diffButto
3ec0: 6e 73 2e 71 75 65 72 79 53 65 6c 65 63 74 6f 72 ns.querySelector
3ed0: 28 27 62 75 74 74 6f 6e 2e 75 6e 69 66 69 65 64 ('button.unified
3ee0: 27 29 2e 61 64 64 45 76 65 6e 74 4c 69 73 74 65 ').addEventListe
3ef0: 6e 65 72 28 0a 20 20 20 20 20 20 22 63 6c 69 63 ner(. "clic
3f00: 6b 22 2c 28 65 29 3d 3e 50 2e 64 69 66 66 28 66 k",(e)=>P.diff(f
3f10: 61 6c 73 65 29 2c 20 66 61 6c 73 65 0a 20 20 20 alse), false.
3f20: 20 29 3b 0a 20 20 20 20 69 66 28 30 29 20 50 2e );. if(0) P.
3f30: 65 2e 62 74 6e 43 6f 6d 6d 69 74 2e 61 64 64 45 e.btnCommit.addE
3f40: 76 65 6e 74 4c 69 73 74 65 6e 65 72 28 0a 20 20 ventListener(.
3f50: 20 20 20 20 22 63 6c 69 63 6b 22 2c 28 65 29 3d "click",(e)=
3f60: 3e 50 2e 63 6f 6d 6d 69 74 28 29 2c 20 66 61 6c >P.commit(), fal
3f70: 73 65 0a 20 20 20 20 29 3b 0a 20 20 20 20 46 2e se. );. F.
3f80: 63 6f 6e 66 69 72 6d 65 72 28 50 2e 65 2e 62 74 confirmer(P.e.bt
3f90: 6e 52 65 6c 6f 61 64 2c 20 7b 0a 20 20 20 20 20 nReload, {.
3fa0: 20 63 6f 6e 66 69 72 6d 54 65 78 74 3a 20 22 52 confirmText: "R
3fb0: 65 61 6c 6c 79 20 72 65 6c 6f 61 64 2c 20 6c 6f eally reload, lo
3fc0: 73 69 6e 67 20 65 64 69 74 73 3f 22 2c 0a 20 20 sing edits?",.
3fd0: 20 20 20 20 6f 6e 63 6f 6e 66 69 72 6d 3a 20 66 onconfirm: f
3fe0: 75 6e 63 74 69 6f 6e 28 65 29 7b 0a 20 20 20 20 unction(e){.
3ff0: 20 20 20 20 63 6f 6e 73 74 20 77 20 3d 20 50 2e const w = P.
4000: 77 69 6e 66 6f 3b 0a 20 20 20 20 20 20 20 20 69 winfo;. i
4010: 66 28 21 77 29 7b 0a 20 20 20 20 20 20 20 20 20 f(!w){.
4020: 20 46 2e 65 72 72 6f 72 28 22 4e 6f 20 70 61 67 F.error("No pag
4030: 65 20 6c 6f 61 64 65 64 2e 22 29 3b 0a 20 20 20 e loaded.");.
4040: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 return;.
4050: 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 }else if(
4060: 21 77 2e 76 65 72 73 69 6f 6e 29 7b 0a 20 20 20 !w.version){.
4070: 20 20 20 20 20 20 20 46 2e 65 72 72 6f 72 28 22 F.error("
4080: 43 61 6e 6e 6f 74 20 72 65 6c 6f 61 64 20 61 20 Cannot reload a
4090: 6e 65 77 2f 75 6e 73 61 76 65 64 20 70 61 67 65 new/unsaved page
40a0: 2e 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72 .");. r
40b0: 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d eturn;. }
40c0: 0a 20 20 20 20 20 20 20 20 50 2e 75 6e 73 74 61 . P.unsta
40d0: 73 68 43 6f 6e 74 65 6e 74 28 29 2e 6c 6f 61 64 shContent().load
40e0: 50 61 67 65 28 29 3b 0a 20 20 20 20 20 20 7d 2c Page();. },
40f0: 0a 20 20 20 20 20 20 74 69 63 6b 73 3a 20 33 0a . ticks: 3.
4100: 20 20 20 20 7d 29 3b 0a 20 20 20 20 50 2e 65 2e });. P.e.
4110: 74 61 45 64 69 74 6f 72 2e 61 64 64 45 76 65 6e taEditor.addEven
4120: 74 4c 69 73 74 65 6e 65 72 28 0a 20 20 20 20 20 tListener(.
4130: 20 27 63 68 61 6e 67 65 27 2c 20 28 29 3d 3e 50 'change', ()=>P
4140: 2e 73 74 61 73 68 43 6f 6e 74 65 6e 74 43 68 61 .stashContentCha
4150: 6e 67 65 28 29 2c 20 66 61 6c 73 65 0a 20 20 20 nge(), false.
4160: 20 29 3b 0a 20 20 20 20 0a 20 20 20 20 50 2e 73 );. . P.s
4170: 65 6c 65 63 74 4d 69 6d 65 74 79 70 65 28 66 61 electMimetype(fa
4180: 6c 73 65 2c 20 74 72 75 65 29 3b 0a 20 20 20 20 lse, true);.
4190: 50 2e 65 2e 73 65 6c 65 63 74 4d 69 6d 65 74 79 P.e.selectMimety
41a0: 70 65 2e 61 64 64 45 76 65 6e 74 4c 69 73 74 65 pe.addEventListe
41b0: 6e 65 72 28 0a 20 20 20 20 20 20 27 63 68 61 6e ner(. 'chan
41c0: 67 65 27 2c 0a 20 20 20 20 20 20 66 75 6e 63 74 ge',. funct
41d0: 69 6f 6e 28 65 29 7b 0a 20 20 20 20 20 20 20 20 ion(e){.
41e0: 69 66 28 50 2e 77 69 6e 66 6f 29 7b 0a 20 20 20 if(P.winfo){.
41f0: 20 20 20 20 20 20 20 50 2e 77 69 6e 66 6f 2e 6d P.winfo.m
4200: 69 6d 65 74 79 70 65 20 3d 20 65 2e 74 61 72 67 imetype = e.targ
4210: 65 74 2e 76 61 6c 75 65 3b 0a 20 20 20 20 20 20 et.value;.
4220: 20 20 20 20 50 2e 73 74 61 73 68 43 6f 6e 74 65 P.stashConte
4230: 6e 74 43 68 61 6e 67 65 28 74 72 75 65 29 3b 0a ntChange(true);.
4240: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 }.
4250: 7d 2c 0a 20 20 20 20 20 20 66 61 6c 73 65 0a 20 },. false.
4260: 20 20 20 29 3b 0a 20 20 20 20 0a 20 20 20 20 63 );. . c
4270: 6f 6e 73 74 20 73 65 6c 65 63 74 46 6f 6e 74 53 onst selectFontS
4280: 69 7a 65 20 3d 20 45 28 27 73 65 6c 65 63 74 5b ize = E('select[
4290: 6e 61 6d 65 3d 65 64 69 74 6f 72 5f 66 6f 6e 74 name=editor_font
42a0: 5f 73 69 7a 65 5d 27 29 3b 0a 20 20 20 20 69 66 _size]');. if
42b0: 28 73 65 6c 65 63 74 46 6f 6e 74 53 69 7a 65 29 (selectFontSize)
42c0: 7b 0a 20 20 20 20 20 20 73 65 6c 65 63 74 46 6f {. selectFo
42d0: 6e 74 53 69 7a 65 2e 61 64 64 45 76 65 6e 74 4c ntSize.addEventL
42e0: 69 73 74 65 6e 65 72 28 0a 20 20 20 20 20 20 20 istener(.
42f0: 20 22 63 68 61 6e 67 65 22 2c 66 75 6e 63 74 69 "change",functi
4300: 6f 6e 28 65 29 7b 0a 20 20 20 20 20 20 20 20 20 on(e){.
4310: 20 63 6f 6e 73 74 20 65 64 20 3d 20 50 2e 65 2e const ed = P.e.
4320: 74 61 45 64 69 74 6f 72 3b 0a 20 20 20 20 20 20 taEditor;.
4330: 20 20 20 20 65 64 2e 63 6c 61 73 73 4e 61 6d 65 ed.className
4340: 20 3d 20 65 64 2e 63 6c 61 73 73 4e 61 6d 65 2e = ed.className.
4350: 72 65 70 6c 61 63 65 28 0a 20 20 20 20 20 20 20 replace(.
4360: 20 20 20 20 20 20 20 2f 5c 62 66 6f 6e 74 2d 73 /\bfont-s
4370: 69 7a 65 2d 5c 64 2b 2f 67 2c 20 27 27 20 29 3b ize-\d+/g, '' );
4380: 0a 20 20 20 20 20 20 20 20 20 20 65 64 2e 63 6c . ed.cl
4390: 61 73 73 4c 69 73 74 2e 61 64 64 28 27 66 6f 6e assList.add('fon
43a0: 74 2d 73 69 7a 65 2d 27 2b 65 2e 74 61 72 67 65 t-size-'+e.targe
43b0: 74 2e 76 61 6c 75 65 29 3b 0a 20 20 20 20 20 20 t.value);.
43c0: 20 20 7d 2c 20 66 61 6c 73 65 0a 20 20 20 20 20 }, false.
43d0: 20 29 3b 0a 20 20 20 20 20 20 73 65 6c 65 63 74 );. select
43e0: 46 6f 6e 74 53 69 7a 65 2e 64 69 73 70 61 74 63 FontSize.dispatc
43f0: 68 45 76 65 6e 74 28 0a 20 20 20 20 20 20 20 20 hEvent(.
4400: 2f 2f 20 46 6f 72 63 65 20 55 49 20 75 70 64 61 // Force UI upda
4410: 74 65 0a 20 20 20 20 20 20 20 20 6e 65 77 20 45 te. new E
4420: 76 65 6e 74 28 27 63 68 61 6e 67 65 27 2c 7b 74 vent('change',{t
4430: 61 72 67 65 74 3a 73 65 6c 65 63 74 46 6f 6e 74 arget:selectFont
4440: 53 69 7a 65 7d 29 0a 20 20 20 20 20 20 29 3b 0a Size}). );.
4450: 20 20 20 20 7d 0a 0a 20 20 20 20 50 2e 61 64 64 }.. P.add
4460: 45 76 65 6e 74 4c 69 73 74 65 6e 65 72 28 0a 20 EventListener(.
4470: 20 20 20 20 20 2f 2f 20 43 6c 65 61 72 20 63 65 // Clear ce
4480: 72 74 61 69 6e 20 76 69 65 77 73 20 77 68 65 6e rtain views when
4490: 20 6e 65 77 20 63 6f 6e 74 65 6e 74 20 69 73 20 new content is
44a0: 6c 6f 61 64 65 64 2f 73 65 74 0a 20 20 20 20 20 loaded/set.
44b0: 20 27 77 69 6b 69 2d 63 6f 6e 74 65 6e 74 2d 72 'wiki-content-r
44c0: 65 70 6c 61 63 65 64 27 2c 0a 20 20 20 20 20 20 eplaced',.
44d0: 28 29 3d 3e 7b 0a 20 20 20 20 20 20 20 20 50 2e ()=>{. P.
44e0: 70 72 65 76 69 65 77 4e 65 65 64 73 55 70 64 61 previewNeedsUpda
44f0: 74 65 20 3d 20 74 72 75 65 3b 0a 20 20 20 20 20 te = true;.
4500: 20 20 20 44 2e 63 6c 65 61 72 45 6c 65 6d 65 6e D.clearElemen
4510: 74 28 50 2e 65 2e 64 69 66 66 54 61 72 67 65 74 t(P.e.diffTarget
4520: 2c 20 50 2e 65 2e 70 72 65 76 69 65 77 54 61 72 , P.e.previewTar
4530: 67 65 74 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 get);. }.
4540: 20 20 29 3b 0a 20 20 20 20 50 2e 61 64 64 45 76 );. P.addEv
4550: 65 6e 74 4c 69 73 74 65 6e 65 72 28 0a 20 20 20 entListener(.
4560: 20 20 20 2f 2f 20 43 6c 65 61 72 20 63 65 72 74 // Clear cert
4570: 61 69 6e 20 76 69 65 77 73 20 61 66 74 65 72 20 ain views after
4580: 61 20 73 61 76 65 0a 20 20 20 20 20 20 27 77 69 a save. 'wi
4590: 6b 69 2d 73 61 76 65 64 27 2c 0a 20 20 20 20 20 ki-saved',.
45a0: 20 28 65 29 3d 3e 7b 0a 20 20 20 20 20 20 20 20 (e)=>{.
45b0: 44 2e 63 6c 65 61 72 45 6c 65 6d 65 6e 74 28 50 D.clearElement(P
45c0: 2e 65 2e 64 69 66 66 54 61 72 67 65 74 2c 20 50 .e.diffTarget, P
45d0: 2e 65 2e 70 72 65 76 69 65 77 54 61 72 67 65 74 .e.previewTarget
45e0: 29 3b 0a 20 20 20 20 20 20 20 20 2f 2f 20 54 4f );. // TO
45f0: 44 4f 3a 20 72 65 70 6c 61 63 65 20 70 72 65 76 DO: replace prev
4600: 69 65 77 20 77 69 74 68 20 6e 65 77 20 63 6f 6e iew with new con
4610: 74 65 6e 74 0a 20 20 20 20 20 20 7d 0a 20 20 20 tent. }.
4620: 20 29 3b 0a 20 20 20 20 57 69 6b 69 4c 69 73 74 );. WikiList
4630: 2e 69 6e 69 74 28 20 50 2e 65 2e 74 61 62 73 2e .init( P.e.tabs.
4640: 70 61 67 65 4c 69 73 74 2e 66 69 72 73 74 45 6c pageList.firstEl
4650: 65 6d 65 6e 74 43 68 69 6c 64 20 29 3b 0a 20 20 ementChild );.
4660: 20 20 50 2e 61 64 64 45 76 65 6e 74 4c 69 73 74 P.addEventList
4670: 65 6e 65 72 28 0a 20 20 20 20 20 20 2f 2f 20 55 ener(. // U
4680: 70 64 61 74 65 20 76 61 72 69 6f 75 73 20 73 74 pdate various st
4690: 61 74 65 20 6f 6e 20 77 69 6b 69 20 70 61 67 65 ate on wiki page
46a0: 20 6c 6f 61 64 0a 20 20 20 20 20 20 27 77 69 6b load. 'wik
46b0: 69 2d 70 61 67 65 2d 6c 6f 61 64 65 64 27 2c 0a i-page-loaded',.
46c0: 20 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 28 65 function(e
46d0: 76 29 7b 0a 20 20 20 20 20 20 20 20 64 65 6c 65 v){. dele
46e0: 74 65 20 50 2e 77 69 6e 66 6f 3b 0a 20 20 20 20 te P.winfo;.
46f0: 20 20 20 20 63 6f 6e 73 74 20 77 69 6e 66 6f 20 const winfo
4700: 3d 20 65 76 2e 64 65 74 61 69 6c 3b 0a 20 20 20 = ev.detail;.
4710: 20 20 20 20 20 50 2e 77 69 6e 66 6f 20 3d 20 77 P.winfo = w
4720: 69 6e 66 6f 3b 0a 20 20 20 20 20 20 20 20 50 2e info;. P.
4730: 70 72 65 76 69 65 77 4e 65 65 64 73 55 70 64 61 previewNeedsUpda
4740: 74 65 20 3d 20 74 72 75 65 3b 0a 20 20 20 20 20 te = true;.
4750: 20 20 20 50 2e 65 2e 73 65 6c 65 63 74 4d 69 6d P.e.selectMim
4760: 65 74 79 70 65 2e 76 61 6c 75 65 20 3d 20 77 69 etype.value = wi
4770: 6e 66 6f 2e 6d 69 6d 65 74 79 70 65 3b 0a 20 20 nfo.mimetype;.
4780: 20 20 20 20 20 20 50 2e 74 61 62 73 2e 73 77 69 P.tabs.swi
4790: 74 63 68 54 6f 54 61 62 28 50 2e 65 2e 74 61 62 tchToTab(P.e.tab
47a0: 73 2e 63 6f 6e 74 65 6e 74 29 3b 0a 20 20 20 20 s.content);.
47b0: 20 20 20 20 50 2e 77 69 6b 69 43 6f 6e 74 65 6e P.wikiConten
47c0: 74 28 77 69 6e 66 6f 2e 63 6f 6e 74 65 6e 74 20 t(winfo.content
47d0: 7c 7c 20 27 27 29 3b 0a 20 20 20 20 20 20 20 20 || '');.
47e0: 57 69 6b 69 4c 69 73 74 2e 65 2e 73 65 6c 65 63 WikiList.e.selec
47f0: 74 2e 76 61 6c 75 65 20 3d 20 77 69 6e 66 6f 2e t.value = winfo.
4800: 6e 61 6d 65 3b 0a 20 20 20 20 20 20 20 20 69 66 name;. if
4810: 28 21 77 69 6e 66 6f 2e 76 65 72 73 69 6f 6e 29 (!winfo.version)
4820: 7b 0a 20 20 20 20 20 20 20 20 20 20 46 2e 65 72 {. F.er
4830: 72 6f 72 28 27 59 6f 75 20 61 72 65 20 65 64 69 ror('You are edi
4840: 74 69 6e 67 20 61 20 6e 65 77 2c 20 75 6e 73 61 ting a new, unsa
4850: 76 65 64 20 70 61 67 65 3a 27 2c 77 69 6e 66 6f ved page:',winfo
4860: 2e 6e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 .name);.
4870: 7d 0a 20 20 20 20 20 20 20 20 50 2e 75 70 64 61 }. P.upda
4880: 74 65 50 61 67 65 54 69 74 6c 65 28 29 3b 0a 20 tePageTitle();.
4890: 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 66 61 },. fa
48a0: 6c 73 65 0a 20 20 20 20 29 3b 0a 20 20 7d 2f 2a lse. );. }/*
48b0: 46 2e 6f 6e 50 61 67 65 4c 6f 61 64 28 29 2a 2f F.onPageLoad()*/
48c0: 29 3b 0a 0a 20 20 2f 2a 2a 0a 20 20 20 20 20 52 );.. /**. R
48d0: 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 66 eturns true if f
48e0: 6f 73 73 69 6c 2e 70 61 67 65 2e 77 69 6e 66 6f ossil.page.winfo
48f0: 20 69 73 20 73 65 74 2c 20 69 6e 64 69 63 61 74 is set, indicat
4900: 69 6e 67 20 74 68 61 74 20 61 20 70 61 67 65 0a ing that a page.
4910: 20 20 20 20 20 68 61 73 20 62 65 65 6e 20 6c 6f has been lo
4920: 61 64 65 64 2c 20 65 6c 73 65 20 69 74 20 72 65 aded, else it re
4930: 70 6f 72 74 73 20 61 6e 20 65 72 72 6f 72 20 61 ports an error a
4940: 6e 64 20 72 65 74 75 72 6e 73 20 66 61 6c 73 65 nd returns false
4950: 2e 0a 0a 20 20 20 20 20 49 66 20 70 61 73 73 65 ... If passe
4960: 64 20 61 20 74 72 75 74 68 79 20 76 61 6c 75 65 d a truthy value
4970: 20 61 6e 79 20 65 72 72 6f 72 20 6d 65 73 73 61 any error messa
4980: 67 65 20 61 62 6f 75 74 20 6e 6f 74 20 68 61 76 ge about not hav
4990: 69 6e 67 0a 20 20 20 20 20 61 20 77 69 6b 69 20 ing. a wiki
49a0: 70 61 67 65 20 6c 6f 61 64 65 64 20 69 73 20 73 page loaded is s
49b0: 75 70 70 72 65 73 73 65 64 2e 0a 20 20 2a 2f 0a uppressed.. */.
49c0: 20 20 63 6f 6e 73 74 20 61 66 66 69 72 6d 50 61 const affirmPa
49d0: 67 65 4c 6f 61 64 65 64 20 3d 20 66 75 6e 63 74 geLoaded = funct
49e0: 69 6f 6e 28 71 75 69 65 74 29 7b 0a 20 20 20 20 ion(quiet){.
49f0: 69 66 28 21 50 2e 77 69 6e 66 6f 20 26 26 20 21 if(!P.winfo && !
4a00: 71 75 69 65 74 29 20 46 2e 65 72 72 6f 72 28 22 quiet) F.error("
4a10: 4e 6f 20 77 69 6b 69 20 70 61 67 65 20 69 73 20 No wiki page is
4a20: 6c 6f 61 64 65 64 2e 22 29 3b 0a 20 20 20 20 72 loaded.");. r
4a30: 65 74 75 72 6e 20 21 21 50 2e 77 69 6e 66 6f 3b eturn !!P.winfo;
4a40: 0a 20 20 7d 3b 0a 0a 20 20 2f 2a 2a 0a 20 20 20 . };.. /**.
4a50: 20 20 55 70 64 61 74 65 20 74 68 65 20 70 61 67 Update the pag
4a60: 65 20 74 69 74 6c 65 20 61 6e 64 20 68 65 61 64 e title and head
4a70: 65 72 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 er based on the
4a80: 73 74 61 74 65 0a 20 20 20 20 20 6f 66 20 74 68 state. of th
4a90: 69 73 2e 77 69 6e 66 6f 2e 20 41 20 6e 6f 2d 6f is.winfo. A no-o
4aa0: 70 20 69 66 20 74 68 69 73 2e 77 69 6e 66 6f 20 p if this.winfo
4ab0: 69 73 20 6e 6f 74 20 73 65 74 2e 0a 20 20 2a 2f is not set.. */
4ac0: 0a 20 20 50 2e 75 70 64 61 74 65 50 61 67 65 54 . P.updatePageT
4ad0: 69 74 6c 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 itle = function
4ae0: 66 28 29 7b 0a 20 20 20 20 69 66 28 21 61 66 66 f(){. if(!aff
4af0: 69 72 6d 50 61 67 65 4c 6f 61 64 65 64 28 74 72 irmPageLoaded(tr
4b00: 75 65 29 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 ue)) return;.
4b10: 20 69 66 28 21 66 2e 74 69 74 6c 65 45 6c 65 6d if(!f.titleElem
4b20: 65 6e 74 29 7b 0a 20 20 20 20 20 20 66 2e 74 69 ent){. f.ti
4b30: 74 6c 65 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 tleElement = doc
4b40: 75 6d 65 6e 74 2e 68 65 61 64 2e 71 75 65 72 79 ument.head.query
4b50: 53 65 6c 65 63 74 6f 72 28 27 74 69 74 6c 65 27 Selector('title'
4b60: 29 3b 0a 20 20 20 20 20 20 66 2e 70 61 67 65 54 );. f.pageT
4b70: 69 74 6c 65 48 65 61 64 65 72 20 3d 20 64 6f 63 itleHeader = doc
4b80: 75 6d 65 6e 74 2e 71 75 65 72 79 53 65 6c 65 63 ument.querySelec
4b90: 74 6f 72 28 27 64 69 76 2e 68 65 61 64 65 72 20 tor('div.header
4ba0: 2e 74 69 74 6c 65 27 29 3b 0a 20 20 20 20 7d 0a .title');. }.
4bb0: 20 20 20 20 76 61 72 20 74 69 74 6c 65 20 3d 20 var title =
4bc0: 5b 27 57 69 6b 69 20 45 64 69 74 6f 72 3a 27 5d ['Wiki Editor:']
4bd0: 3b 0a 20 20 20 20 69 66 28 21 50 2e 77 69 6e 66 ;. if(!P.winf
4be0: 6f 2e 76 65 72 73 69 6f 6e 29 20 74 69 74 6c 65 o.version) title
4bf0: 2e 70 75 73 68 28 27 5b 2b 5d 27 29 3b 0a 20 20 .push('[+]');.
4c00: 20 20 65 6c 73 65 20 69 66 28 24 73 74 61 73 68 else if($stash
4c10: 2e 67 65 74 57 69 6e 66 6f 28 50 2e 77 69 6e 66 .getWinfo(P.winf
4c20: 6f 29 29 20 74 69 74 6c 65 2e 70 75 73 68 28 27 o)) title.push('
4c30: 5b 2a 5d 27 29 0a 20 20 20 20 74 69 74 6c 65 2e [*]'). title.
4c40: 70 75 73 68 28 50 2e 77 69 6e 66 6f 2e 6e 61 6d push(P.winfo.nam
4c50: 65 29 3b 0a 20 20 20 20 74 69 74 6c 65 20 3d 20 e);. title =
4c60: 74 69 74 6c 65 2e 6a 6f 69 6e 28 27 20 27 29 3b title.join(' ');
4c70: 0a 20 20 20 20 66 2e 74 69 74 6c 65 45 6c 65 6d . f.titleElem
4c80: 65 6e 74 2e 69 6e 6e 65 72 54 65 78 74 20 3d 20 ent.innerText =
4c90: 74 69 74 6c 65 3b 0a 20 20 20 20 66 2e 70 61 67 title;. f.pag
4ca0: 65 54 69 74 6c 65 48 65 61 64 65 72 2e 69 6e 6e eTitleHeader.inn
4cb0: 65 72 54 65 78 74 20 3d 20 74 69 74 6c 65 3b 0a erText = title;.
4cc0: 20 20 7d 3b 0a 20 20 0a 20 20 2f 2a 2a 0a 20 20 };. . /**.
4cd0: 20 20 20 47 65 74 74 65 72 20 28 69 66 20 63 61 Getter (if ca
4ce0: 6c 6c 65 64 20 77 69 74 68 20 6e 6f 20 61 72 67 lled with no arg
4cf0: 73 29 20 6f 72 20 73 65 74 74 65 72 20 28 69 66 s) or setter (if
4d00: 20 70 61 73 73 65 64 20 61 6e 20 61 72 67 29 20 passed an arg)
4d10: 66 6f 72 0a 20 20 20 20 20 74 68 65 20 63 75 72 for. the cur
4d20: 72 65 6e 74 20 66 69 6c 65 20 63 6f 6e 74 65 6e rent file conten
4d30: 74 2e 0a 0a 20 20 20 20 20 54 68 65 20 73 65 74 t... The set
4d40: 74 65 72 20 66 6f 72 6d 20 73 65 74 73 20 74 68 ter form sets th
4d50: 65 20 63 6f 6e 74 65 6e 74 2c 20 64 69 73 70 61 e content, dispa
4d60: 74 63 68 65 73 20 61 0a 20 20 20 20 20 27 77 69 tches a. 'wi
4d70: 6b 69 2d 63 6f 6e 74 65 6e 74 2d 72 65 70 6c 61 ki-content-repla
4d80: 63 65 64 27 20 65 76 65 6e 74 2c 20 61 6e 64 20 ced' event, and
4d90: 72 65 74 75 72 6e 73 20 74 68 69 73 20 6f 62 6a returns this obj
4da0: 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 50 2e 77 69 ect.. */. P.wi
4db0: 6b 69 43 6f 6e 74 65 6e 74 20 3d 20 66 75 6e 63 kiContent = func
4dc0: 74 69 6f 6e 20 66 28 29 7b 0a 20 20 20 20 69 66 tion f(){. if
4dd0: 28 30 3d 3d 3d 61 72 67 75 6d 65 6e 74 73 2e 6c (0===arguments.l
4de0: 65 6e 67 74 68 29 7b 0a 20 20 20 20 20 20 72 65 ength){. re
4df0: 74 75 72 6e 20 66 2e 67 65 74 28 29 3b 0a 20 20 turn f.get();.
4e00: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 66 }else{. f
4e10: 2e 73 65 74 28 61 72 67 75 6d 65 6e 74 73 5b 30 .set(arguments[0
4e20: 5d 20 7c 7c 20 27 27 29 3b 0a 20 20 20 20 20 20 ] || '');.
4e30: 74 68 69 73 2e 64 69 73 70 61 74 63 68 45 76 65 this.dispatchEve
4e40: 6e 74 28 27 77 69 6b 69 2d 63 6f 6e 74 65 6e 74 nt('wiki-content
4e50: 2d 72 65 70 6c 61 63 65 64 27 2c 20 74 68 69 73 -replaced', this
4e60: 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 );. return
4e70: 74 68 69 73 3b 0a 20 20 20 20 7d 0a 20 20 7d 3b this;. }. };
4e80: 0a 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 67 65 . /* Default ge
4e90: 74 2f 73 65 74 20 69 6d 70 6c 73 20 66 6f 72 20 t/set impls for
4ea0: 66 69 6c 65 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a file content */.
4eb0: 20 20 50 2e 77 69 6b 69 43 6f 6e 74 65 6e 74 2e P.wikiContent.
4ec0: 67 65 74 20 3d 20 66 75 6e 63 74 69 6f 6e 28 29 get = function()
4ed0: 7b 72 65 74 75 72 6e 20 50 2e 65 2e 74 61 45 64 {return P.e.taEd
4ee0: 69 74 6f 72 2e 76 61 6c 75 65 7d 3b 0a 20 20 50 itor.value};. P
4ef0: 2e 77 69 6b 69 43 6f 6e 74 65 6e 74 2e 73 65 74 .wikiContent.set
4f00: 20 3d 20 66 75 6e 63 74 69 6f 6e 28 63 6f 6e 74 = function(cont
4f10: 65 6e 74 29 7b 50 2e 65 2e 74 61 45 64 69 74 6f ent){P.e.taEdito
4f20: 72 2e 76 61 6c 75 65 20 3d 20 63 6f 6e 74 65 6e r.value = conten
4f30: 74 7d 3b 0a 0a 20 20 2f 2a 2a 0a 20 20 20 20 20 t};.. /**.
4f40: 46 6f 72 20 75 73 65 20 77 68 65 6e 20 69 6e 73 For use when ins
4f50: 74 61 6c 6c 69 6e 67 20 61 20 63 75 73 74 6f 6d talling a custom
4f60: 20 65 64 69 74 6f 72 20 77 69 64 67 65 74 2e 20 editor widget.
4f70: 50 61 73 73 20 69 74 20 74 68 65 0a 20 20 20 20 Pass it the.
4f80: 20 67 65 74 74 65 72 20 61 6e 64 20 73 65 74 74 getter and sett
4f90: 65 72 20 63 61 6c 6c 62 61 63 6b 73 20 74 6f 20 er callbacks to
4fa0: 66 65 74 63 68 20 72 65 73 70 2e 20 73 65 74 20 fetch resp. set
4fb0: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 the content of t
4fc0: 68 65 0a 20 20 20 20 20 63 75 73 74 6f 6d 20 77 he. custom w
4fd0: 69 64 67 65 74 2e 20 54 68 65 79 20 77 69 6c 6c idget. They will
4fe0: 20 62 65 20 74 72 69 67 67 65 72 65 64 20 76 69 be triggered vi
4ff0: 61 0a 20 20 20 20 20 50 2e 77 69 6b 69 43 6f 6e a. P.wikiCon
5000: 74 65 6e 74 28 29 2e 20 52 65 74 75 72 6e 73 20 tent(). Returns
5010: 74 68 69 73 20 6f 62 6a 65 63 74 2e 0a 20 20 2a this object.. *
5020: 2f 0a 20 20 50 2e 73 65 74 43 6f 6e 74 65 6e 74 /. P.setContent
5030: 4d 65 74 68 6f 64 73 20 3d 20 66 75 6e 63 74 69 Methods = functi
5040: 6f 6e 28 67 65 74 74 65 72 2c 20 73 65 74 74 65 on(getter, sette
5050: 72 29 7b 0a 20 20 20 20 74 68 69 73 2e 77 69 6b r){. this.wik
5060: 69 43 6f 6e 74 65 6e 74 2e 67 65 74 20 3d 20 67 iContent.get = g
5070: 65 74 74 65 72 3b 0a 20 20 20 20 74 68 69 73 2e etter;. this.
5080: 77 69 6b 69 43 6f 6e 74 65 6e 74 2e 73 65 74 20 wikiContent.set
5090: 3d 20 73 65 74 74 65 72 3b 0a 20 20 20 20 72 65 = setter;. re
50a0: 74 75 72 6e 20 74 68 69 73 3b 0a 20 20 7d 3b 0a turn this;. };.
50b0: 0a 20 20 2f 2a 2a 0a 20 20 20 20 20 52 65 6d 6f . /**. Remo
50c0: 76 65 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 ves the default
50d0: 65 64 69 74 6f 72 20 77 69 64 67 65 74 20 28 61 editor widget (a
50e0: 6e 64 20 61 6e 79 20 64 65 70 65 6e 64 65 6e 74 nd any dependent
50f0: 20 65 6c 65 6d 65 6e 74 73 29 0a 20 20 20 20 20 elements).
5100: 66 72 6f 6d 20 74 68 65 20 44 4f 4d 2c 20 61 64 from the DOM, ad
5110: 64 73 20 74 68 65 20 67 69 76 65 6e 20 65 6c 65 ds the given ele
5120: 6d 65 6e 74 20 69 6e 20 69 74 73 20 70 6c 61 63 ment in its plac
5130: 65 2c 20 72 65 6d 6f 76 65 73 20 74 68 69 73 0a e, removes this.
5140: 20 20 20 20 20 6d 65 74 68 6f 64 20 66 72 6f 6d method from
5150: 20 74 68 69 73 20 6f 62 6a 65 63 74 2c 20 61 6e this object, an
5160: 64 20 72 65 74 75 72 6e 73 20 74 68 69 73 20 6f d returns this o
5170: 62 6a 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 50 2e bject.. */. P.
5180: 72 65 70 6c 61 63 65 45 64 69 74 6f 72 45 6c 65 replaceEditorEle
5190: 6d 65 6e 74 20 3d 20 66 75 6e 63 74 69 6f 6e 28 ment = function(
51a0: 6e 65 77 45 64 69 74 6f 72 29 7b 0a 20 20 20 20 newEditor){.
51b0: 50 2e 65 2e 74 61 45 64 69 74 6f 72 2e 70 61 72 P.e.taEditor.par
51c0: 65 6e 74 4e 6f 64 65 2e 69 6e 73 65 72 74 42 65 entNode.insertBe
51d0: 66 6f 72 65 28 6e 65 77 45 64 69 74 6f 72 2c 20 fore(newEditor,
51e0: 50 2e 65 2e 74 61 45 64 69 74 6f 72 29 3b 0a 20 P.e.taEditor);.
51f0: 20 20 20 50 2e 65 2e 74 61 45 64 69 74 6f 72 2e P.e.taEditor.
5200: 72 65 6d 6f 76 65 28 29 3b 0a 20 20 20 20 50 2e remove();. P.
5210: 65 2e 73 65 6c 65 63 74 46 6f 6e 74 53 69 7a 65 e.selectFontSize
5220: 57 72 61 70 2e 72 65 6d 6f 76 65 28 29 3b 0a 20 Wrap.remove();.
5230: 20 20 20 64 65 6c 65 74 65 20 74 68 69 73 2e 72 delete this.r
5240: 65 70 6c 61 63 65 45 64 69 74 6f 72 45 6c 65 6d eplaceEditorElem
5250: 65 6e 74 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 ent;. return
5260: 50 3b 0a 20 20 7d 3b 0a 0a 20 20 2f 2a 2a 0a 20 P;. };.. /**.
5270: 20 20 20 20 53 65 74 73 20 74 68 65 20 63 75 72 Sets the cur
5280: 72 65 6e 74 20 70 61 67 65 27 73 20 62 61 73 65 rent page's base
5290: 2e 68 72 65 66 20 74 6f 20 7b 67 2e 7a 54 6f 70 .href to {g.zTop
52a0: 7d 2f 77 69 6b 69 2e 0a 20 20 2a 2f 0a 20 20 50 }/wiki.. */. P
52b0: 2e 62 61 73 65 48 72 65 66 46 6f 72 57 69 6b 69 .baseHrefForWiki
52c0: 20 3d 20 66 75 6e 63 74 69 6f 6e 20 66 28 29 7b = function f(){
52d0: 0a 20 20 20 20 74 68 69 73 2e 62 61 73 65 2e 74 . this.base.t
52e0: 61 67 2e 68 72 65 66 20 3d 20 74 68 69 73 2e 62 ag.href = this.b
52f0: 61 73 65 2e 77 69 6b 69 55 72 6c 3b 0a 20 20 20 ase.wikiUrl;.
5300: 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 20 20 return this;.
5310: 7d 3b 0a 0a 20 20 2f 2a 2a 0a 20 20 20 20 20 53 };.. /**. S
5320: 65 74 73 20 74 68 65 20 64 6f 63 75 6d 65 6e 74 ets the document
5330: 27 73 20 62 61 73 65 2e 68 72 65 66 20 76 61 6c 's base.href val
5340: 75 65 20 74 6f 20 69 74 73 20 70 61 67 65 2d 6c ue to its page-l
5350: 6f 61 64 2d 74 69 6d 65 0a 20 20 20 20 20 73 65 oad-time. se
5360: 74 74 69 6e 67 2e 0a 20 20 2a 2f 0a 20 20 50 2e tting.. */. P.
5370: 62 61 73 65 48 72 65 66 52 65 73 74 6f 72 65 20 baseHrefRestore
5380: 3d 20 66 75 6e 63 74 69 6f 6e 28 29 7b 0a 20 20 = function(){.
5390: 20 20 74 68 69 73 2e 62 61 73 65 2e 74 61 67 2e this.base.tag.
53a0: 68 72 65 66 20 3d 20 74 68 69 73 2e 62 61 73 65 href = this.base
53b0: 2e 6f 72 69 67 69 6e 61 6c 48 72 65 66 3b 0a 20 .originalHref;.
53c0: 20 7d 3b 0a 20 20 0a 0a 20 20 2f 2a 2a 0a 20 20 };. .. /**.
53d0: 20 20 20 6c 6f 61 64 50 61 67 65 28 29 20 6c 6f loadPage() lo
53e0: 61 64 73 20 74 68 65 20 67 69 76 65 6e 20 77 69 ads the given wi
53f0: 6b 69 20 70 61 67 65 20 61 6e 64 20 75 70 64 61 ki page and upda
5400: 74 65 73 20 74 68 65 20 72 65 6c 65 76 61 6e 74 tes the relevant
5410: 0a 20 20 20 20 20 55 49 20 65 6c 65 6d 65 6e 74 . UI element
5420: 73 20 74 6f 20 72 65 66 6c 65 63 74 20 74 68 65 s to reflect the
5430: 20 6c 6f 61 64 65 64 20 73 74 61 74 65 2e 20 49 loaded state. I
5440: 66 20 70 61 73 73 65 64 20 6e 6f 20 61 72 67 75 f passed no argu
5450: 6d 65 6e 74 73 0a 20 20 20 20 20 74 68 65 6e 20 ments. then
5460: 69 74 20 72 65 2d 75 73 65 73 20 74 68 65 20 76 it re-uses the v
5470: 61 6c 75 65 73 20 66 72 6f 6d 20 74 68 65 20 63 alues from the c
5480: 75 72 72 65 6e 74 6c 79 2d 6c 6f 61 64 65 64 20 urrently-loaded
5490: 70 61 67 65 2c 20 72 65 6c 6f 61 64 69 6e 67 0a page, reloading.
54a0: 20 20 20 20 20 69 74 20 28 65 6d 69 74 74 69 6e it (emittin
54b0: 67 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 g an error messa
54c0: 67 65 20 69 66 20 6e 6f 20 66 69 6c 65 20 69 73 ge if no file is
54d0: 20 6c 6f 61 64 65 64 29 2e 0a 0a 20 20 20 20 20 loaded)...
54e0: 52 65 74 75 72 6e 73 20 74 68 69 73 20 6f 62 6a Returns this obj
54f0: 65 63 74 2c 20 6e 6f 74 69 6e 67 20 74 68 61 74 ect, noting that
5500: 20 74 68 65 20 6c 6f 61 64 20 69 73 20 61 73 79 the load is asy
5510: 6e 63 2e 20 41 66 74 65 72 20 6c 6f 61 64 69 6e nc. After loadin
5520: 67 0a 20 20 20 20 20 69 74 20 74 72 69 67 67 65 g. it trigge
5530: 72 73 20 61 20 27 77 69 6b 69 2d 70 61 67 65 2d rs a 'wiki-page-
5540: 6c 6f 61 64 65 64 27 20 65 76 65 6e 74 2c 20 70 loaded' event, p
5550: 61 73 73 69 6e 67 20 69 74 20 74 68 69 73 2e 77 assing it this.w
5560: 69 6e 66 6f 2e 0a 0a 20 20 20 20 20 49 66 20 61 info... If a
5570: 20 6c 6f 63 61 6c 6c 79 2d 65 64 69 74 65 64 20 locally-edited
5580: 63 6f 70 79 20 6f 66 20 74 68 65 20 67 69 76 65 copy of the give
5590: 6e 20 66 69 6c 65 2f 72 65 76 20 69 73 20 66 6f n file/rev is fo
55a0: 75 6e 64 2c 20 74 68 61 74 0a 20 20 20 20 20 63 und, that. c
55b0: 6f 70 79 20 69 73 20 75 73 65 64 20 69 6e 73 74 opy is used inst
55c0: 65 61 64 20 6f 66 20 6f 6e 65 20 66 65 74 63 68 ead of one fetch
55d0: 65 64 20 66 72 6f 6d 20 74 68 65 20 73 65 72 76 ed from the serv
55e0: 65 72 2c 20 62 75 74 20 69 74 20 69 73 0a 20 20 er, but it is.
55f0: 20 20 20 73 74 69 6c 6c 20 74 72 65 61 74 65 64 still treated
5600: 20 61 73 20 61 20 6c 6f 61 64 20 65 76 65 6e 74 as a load event
5610: 2e 0a 0a 20 20 20 20 20 41 6c 74 65 72 6e 61 74 ... Alternat
5620: 65 20 63 61 6c 6c 20 66 6f 72 6d 73 3a 0a 0a 20 e call forms:..
5630: 20 20 20 20 2d 20 6e 6f 20 61 72 67 75 6d 65 6e - no argumen
5640: 74 73 3a 20 72 65 2d 6c 6f 61 64 73 20 66 72 6f ts: re-loads fro
5650: 6d 20 74 68 69 73 2e 77 69 6e 66 6f 2e 0a 0a 20 m this.winfo...
5660: 20 20 20 20 2d 20 31 20 6e 6f 6e 2d 73 74 72 69 - 1 non-stri
5670: 6e 67 20 61 72 67 75 6d 65 6e 74 3a 20 61 73 73 ng argument: ass
5680: 75 6d 65 64 20 74 6f 20 62 65 20 61 6e 20 77 69 umed to be an wi
5690: 6e 66 6f 2d 73 74 79 6c 65 0a 20 20 20 20 20 6f nfo-style. o
56a0: 62 6a 65 63 74 2e 20 4d 75 73 74 20 68 61 76 65 bject. Must have
56b0: 20 61 74 20 6c 65 61 73 74 20 74 68 65 20 7b 6e at least the {n
56c0: 61 6d 65 7d 20 70 72 6f 70 65 72 74 79 2c 20 62 ame} property, b
56d0: 75 74 20 6e 65 65 64 20 6e 6f 74 20 68 61 76 65 ut need not have
56e0: 0a 20 20 20 20 20 6f 74 68 65 72 20 77 69 6e 66 . other winf
56f0: 6f 20 73 74 61 74 65 2e 0a 20 20 2a 2f 0a 20 20 o state.. */.
5700: 50 2e 6c 6f 61 64 50 61 67 65 20 3d 20 66 75 6e P.loadPage = fun
5710: 63 74 69 6f 6e 28 6e 61 6d 65 29 7b 0a 20 20 20 ction(name){.
5720: 20 69 66 28 30 3d 3d 3d 61 72 67 75 6d 65 6e 74 if(0===argument
5730: 73 2e 6c 65 6e 67 74 68 29 7b 0a 20 20 20 20 20 s.length){.
5740: 20 2f 2a 20 52 65 6c 6f 61 64 20 66 72 6f 6d 20 /* Reload from
5750: 74 68 69 73 2e 77 69 6e 66 6f 20 2a 2f 0a 20 20 this.winfo */.
5760: 20 20 20 20 69 66 28 21 61 66 66 69 72 6d 50 61 if(!affirmPa
5770: 67 65 4c 6f 61 64 65 64 28 29 29 20 72 65 74 75 geLoaded()) retu
5780: 72 6e 20 74 68 69 73 3b 0a 20 20 20 20 20 20 6e rn this;. n
5790: 61 6d 65 20 3d 20 74 68 69 73 2e 77 69 6e 66 6f ame = this.winfo
57a0: 2e 6e 61 6d 65 3b 0a 20 20 20 20 7d 65 6c 73 65 .name;. }else
57b0: 20 69 66 28 31 3d 3d 3d 61 72 67 75 6d 65 6e 74 if(1===argument
57c0: 73 2e 6c 65 6e 67 74 68 20 26 26 20 27 73 74 72 s.length && 'str
57d0: 69 6e 67 27 20 21 3d 3d 20 74 79 70 65 6f 66 20 ing' !== typeof
57e0: 6e 61 6d 65 29 7b 0a 20 20 20 20 20 20 2f 2a 20 name){. /*
57f0: 41 73 73 75 6d 65 20 77 69 6e 66 6f 2d 6c 69 6b Assume winfo-lik
5800: 65 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 20 20 e object */.
5810: 20 20 63 6f 6e 73 74 20 61 72 67 20 3d 20 61 72 const arg = ar
5820: 67 75 6d 65 6e 74 73 5b 30 5d 3b 0a 20 20 20 20 guments[0];.
5830: 20 20 6e 61 6d 65 20 3d 20 61 72 67 2e 6e 61 6d name = arg.nam
5840: 65 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 6f 6e e;. }. con
5850: 73 74 20 6f 6e 6c 6f 61 64 20 3d 20 28 72 29 3d st onload = (r)=
5860: 3e 74 68 69 73 2e 64 69 73 70 61 74 63 68 45 76 >this.dispatchEv
5870: 65 6e 74 28 27 77 69 6b 69 2d 70 61 67 65 2d 6c ent('wiki-page-l
5880: 6f 61 64 65 64 27 2c 20 72 29 3b 0a 20 20 20 20 oaded', r);.
5890: 63 6f 6e 73 74 20 73 74 61 73 68 57 69 6e 66 6f const stashWinfo
58a0: 20 3d 20 74 68 69 73 2e 67 65 74 53 74 61 73 68 = this.getStash
58b0: 65 64 57 69 6e 66 6f 28 7b 6e 61 6d 65 3a 20 6e edWinfo({name: n
58c0: 61 6d 65 7d 29 3b 0a 20 20 20 20 69 66 28 73 74 ame});. if(st
58d0: 61 73 68 57 69 6e 66 6f 29 7b 20 2f 2f 20 66 61 ashWinfo){ // fa
58e0: 6b 65 20 61 20 72 65 73 70 6f 6e 73 65 20 66 72 ke a response fr
58f0: 6f 6d 20 74 68 65 20 73 74 61 73 68 2e 2e 2e 0a om the stash....
5900: 20 20 20 20 20 20 6f 6e 6c 6f 61 64 28 7b 0a 20 onload({.
5910: 20 20 20 20 20 20 20 6e 61 6d 65 3a 20 73 74 61 name: sta
5920: 73 68 57 69 6e 66 6f 2e 6e 61 6d 65 2c 0a 20 20 shWinfo.name,.
5930: 20 20 20 20 20 20 6d 69 6d 65 74 79 70 65 3a 20 mimetype:
5940: 73 74 61 73 68 57 69 6e 66 6f 2e 6d 69 6d 65 74 stashWinfo.mimet
5950: 79 70 65 2c 0a 20 20 20 20 20 20 20 20 74 79 70 ype,. typ
5960: 65 3a 20 73 74 61 73 68 57 69 6e 66 6f 2e 74 79 e: stashWinfo.ty
5970: 70 65 2c 0a 20 20 20 20 20 20 20 20 76 65 72 73 pe,. vers
5980: 69 6f 6e 3a 20 73 74 61 73 68 57 69 6e 66 6f 2e ion: stashWinfo.
5990: 76 65 72 73 69 6f 6e 2c 0a 20 20 20 20 20 20 20 version,.
59a0: 20 70 61 72 65 6e 74 3a 20 73 74 61 73 68 57 69 parent: stashWi
59b0: 6e 66 6f 2e 70 61 72 65 6e 74 2c 0a 20 20 20 20 nfo.parent,.
59c0: 20 20 20 20 63 6f 6e 74 65 6e 74 3a 20 24 73 74 content: $st
59d0: 61 73 68 2e 73 74 61 73 68 65 64 43 6f 6e 74 65 ash.stashedConte
59e0: 6e 74 28 73 74 61 73 68 57 69 6e 66 6f 29 0a 20 nt(stashWinfo).
59f0: 20 20 20 20 20 7d 29 3b 0a 20 20 20 20 20 20 46 });. F
5a00: 2e 6d 65 73 73 61 67 65 28 22 46 65 74 63 68 65 .message("Fetche
5a10: 64 20 66 72 6f 6d 20 74 68 65 20 6c 6f 63 61 6c d from the local
5a20: 2d 65 64 69 74 20 73 74 6f 72 61 67 65 3a 22 2c -edit storage:",
5a30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
5a40: 20 73 74 61 73 68 57 69 6e 66 6f 2e 6e 61 6d 65 stashWinfo.name
5a50: 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 );. return
5a60: 74 68 69 73 3b 0a 20 20 20 20 7d 0a 20 20 20 20 this;. }.
5a70: 46 2e 6d 65 73 73 61 67 65 28 0a 20 20 20 20 20 F.message(.
5a80: 20 22 4c 6f 61 64 69 6e 67 20 63 6f 6e 74 65 6e "Loading conten
5a90: 74 2e 2e 2e 22 0a 20 20 20 20 29 2e 66 65 74 63 t...". ).fetc
5aa0: 68 28 27 77 69 6b 69 61 6a 61 78 2f 66 65 74 63 h('wikiajax/fetc
5ab0: 68 27 2c 7b 0a 20 20 20 20 20 20 75 72 6c 50 61 h',{. urlPa
5ac0: 72 61 6d 73 3a 20 7b 0a 20 20 20 20 20 20 20 20 rams: {.
5ad0: 70 61 67 65 3a 20 6e 61 6d 65 0a 20 20 20 20 20 page: name.
5ae0: 20 7d 2c 0a 20 20 20 20 20 20 72 65 73 70 6f 6e },. respon
5af0: 73 65 54 79 70 65 3a 20 27 6a 73 6f 6e 27 2c 0a seType: 'json',.
5b00: 20 20 20 20 20 20 6f 6e 6c 6f 61 64 3a 28 72 29 onload:(r)
5b10: 3d 3e 7b 0a 20 20 20 20 20 20 20 20 6f 6e 6c 6f =>{. onlo
5b20: 61 64 28 72 29 3b 0a 20 20 20 20 20 20 20 20 46 ad(r);. F
5b30: 2e 6d 65 73 73 61 67 65 28 27 4c 6f 61 64 65 64 .message('Loaded
5b40: 20 70 61 67 65 20 5b 27 2b 72 2e 6e 61 6d 65 2b page ['+r.name+
5b50: 27 5d 2e 27 29 3b 0a 20 20 20 20 20 20 7d 0a 20 '].');. }.
5b60: 20 20 20 7d 29 3b 0a 20 20 20 20 72 65 74 75 72 });. retur
5b70: 6e 20 74 68 69 73 3b 0a 20 20 7d 3b 0a 20 20 0a n this;. };. .
5b80: 20 20 2f 2a 2a 0a 20 20 20 20 20 46 65 74 63 68 /**. Fetch
5b90: 65 73 20 74 68 65 20 70 61 67 65 20 70 72 65 76 es the page prev
5ba0: 69 65 77 20 62 61 73 65 64 20 6f 6e 20 74 68 65 iew based on the
5bb0: 20 63 6f 6e 74 65 6e 74 73 20 61 6e 64 20 73 65 contents and se
5bc0: 74 74 69 6e 67 73 20 6f 66 0a 20 20 20 20 20 74 ttings of. t
5bd0: 68 69 73 20 70 61 67 65 27 73 20 69 6e 70 75 74 his page's input
5be0: 20 66 69 65 6c 64 73 2c 20 61 6e 64 20 75 70 64 fields, and upd
5bf0: 61 74 65 73 20 74 68 65 20 55 49 20 77 69 74 68 ates the UI with
5c00: 20 77 69 74 68 20 74 68 65 0a 20 20 20 20 20 70 with the. p
5c10: 72 65 76 69 65 77 2e 0a 0a 20 20 20 20 20 52 65 review... Re
5c20: 74 75 72 6e 73 20 74 68 69 73 20 6f 62 6a 65 63 turns this objec
5c30: 74 2c 20 6e 6f 74 69 6e 67 20 74 68 61 74 20 74 t, noting that t
5c40: 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 he operation is
5c50: 61 73 79 6e 63 2e 0a 20 20 2a 2f 0a 20 20 50 2e async.. */. P.
5c60: 70 72 65 76 69 65 77 20 3d 20 66 75 6e 63 74 69 preview = functi
5c70: 6f 6e 20 66 28 73 77 69 74 63 68 54 6f 54 61 62 on f(switchToTab
5c80: 29 7b 0a 20 20 20 20 69 66 28 21 61 66 66 69 72 ){. if(!affir
5c90: 6d 50 61 67 65 4c 6f 61 64 65 64 28 29 29 20 72 mPageLoaded()) r
5ca0: 65 74 75 72 6e 20 74 68 69 73 3b 0a 20 20 20 20 eturn this;.
5cb0: 63 6f 6e 73 74 20 74 61 72 67 65 74 20 3d 20 74 const target = t
5cc0: 68 69 73 2e 65 2e 70 72 65 76 69 65 77 54 61 72 his.e.previewTar
5cd0: 67 65 74 2c 0a 20 20 20 20 20 20 20 20 20 20 73 get,. s
5ce0: 65 6c 66 20 3d 20 74 68 69 73 3b 0a 20 20 20 20 elf = this;.
5cf0: 63 6f 6e 73 74 20 75 70 64 61 74 65 56 69 65 77 const updateView
5d00: 20 3d 20 66 75 6e 63 74 69 6f 6e 28 63 29 7b 0a = function(c){.
5d10: 20 20 20 20 20 20 44 2e 63 6c 65 61 72 45 6c 65 D.clearEle
5d20: 6d 65 6e 74 28 74 61 72 67 65 74 29 3b 0a 20 20 ment(target);.
5d30: 20 20 20 20 69 66 28 27 73 74 72 69 6e 67 27 3d if('string'=
5d40: 3d 3d 74 79 70 65 6f 66 20 63 29 20 74 61 72 67 ==typeof c) targ
5d50: 65 74 2e 69 6e 6e 65 72 48 54 4d 4c 20 3d 20 63 et.innerHTML = c
5d60: 3b 0a 20 20 20 20 20 20 69 66 28 73 77 69 74 63 ;. if(switc
5d70: 68 54 6f 54 61 62 29 20 73 65 6c 66 2e 74 61 62 hToTab) self.tab
5d80: 73 2e 73 77 69 74 63 68 54 6f 54 61 62 28 73 65 s.switchToTab(se
5d90: 6c 66 2e 65 2e 74 61 62 73 2e 70 72 65 76 69 65 lf.e.tabs.previe
5da0: 77 29 3b 0a 20 20 20 20 7d 3b 0a 20 20 20 20 72 w);. };. r
5db0: 65 74 75 72 6e 20 74 68 69 73 2e 5f 70 6f 73 74 eturn this._post
5dc0: 50 72 65 76 69 65 77 28 74 68 69 73 2e 77 69 6b Preview(this.wik
5dd0: 69 43 6f 6e 74 65 6e 74 28 29 2c 20 75 70 64 61 iContent(), upda
5de0: 74 65 56 69 65 77 29 3b 0a 20 20 7d 3b 0a 0a 20 teView);. };..
5df0: 20 2f 2a 2a 0a 20 20 20 20 20 43 61 6c 6c 62 61 /**. Callba
5e00: 63 6b 20 66 6f 72 20 75 73 65 20 77 69 74 68 20 ck for use with
5e10: 46 2e 63 6f 6e 6e 65 63 74 50 61 67 65 50 72 65 F.connectPagePre
5e20: 76 69 65 77 65 72 73 28 29 0a 20 20 2a 2f 0a 20 viewers(). */.
5e30: 20 50 2e 5f 70 6f 73 74 50 72 65 76 69 65 77 20 P._postPreview
5e40: 3d 20 66 75 6e 63 74 69 6f 6e 28 63 6f 6e 74 65 = function(conte
5e50: 6e 74 2c 63 61 6c 6c 62 61 63 6b 29 7b 0a 20 20 nt,callback){.
5e60: 20 20 69 66 28 21 61 66 66 69 72 6d 50 61 67 65 if(!affirmPage
5e70: 4c 6f 61 64 65 64 28 29 29 20 72 65 74 75 72 6e Loaded()) return
5e80: 20 74 68 69 73 3b 0a 20 20 20 20 69 66 28 21 63 this;. if(!c
5e90: 6f 6e 74 65 6e 74 29 7b 0a 20 20 20 20 20 20 63 ontent){. c
5ea0: 61 6c 6c 62 61 63 6b 28 63 6f 6e 74 65 6e 74 29 allback(content)
5eb0: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 ;. return t
5ec0: 68 69 73 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 his;. }. c
5ed0: 6f 6e 73 74 20 66 64 20 3d 20 6e 65 77 20 46 6f onst fd = new Fo
5ee0: 72 6d 44 61 74 61 28 29 3b 0a 20 20 20 20 63 6f rmData();. co
5ef0: 6e 73 74 20 6d 69 6d 65 74 79 70 65 20 3d 20 74 nst mimetype = t
5f00: 68 69 73 2e 65 2e 73 65 6c 65 63 74 4d 69 6d 65 his.e.selectMime
5f10: 74 79 70 65 2e 76 61 6c 75 65 3b 0a 20 20 20 20 type.value;.
5f20: 66 64 2e 61 70 70 65 6e 64 28 27 70 61 67 65 27 fd.append('page'
5f30: 2c 20 74 68 69 73 2e 77 69 6e 66 6f 2e 6e 61 6d , this.winfo.nam
5f40: 65 29 3b 0a 20 20 20 20 66 64 2e 61 70 70 65 6e e);. fd.appen
5f50: 64 28 27 6d 69 6d 65 74 79 70 65 27 2c 6d 69 6d d('mimetype',mim
5f60: 65 74 79 70 65 29 3b 0a 20 20 20 20 66 64 2e 61 etype);. fd.a
5f70: 70 70 65 6e 64 28 27 63 6f 6e 74 65 6e 74 27 2c ppend('content',
5f80: 63 6f 6e 74 65 6e 74 20 7c 7c 20 27 27 29 3b 0a content || '');.
5f90: 20 20 20 20 46 2e 6d 65 73 73 61 67 65 28 0a 20 F.message(.
5fa0: 20 20 20 20 20 22 46 65 74 63 68 69 6e 67 20 70 "Fetching p
5fb0: 72 65 76 69 65 77 2e 2e 2e 22 0a 20 20 20 20 29 review...". )
5fc0: 2e 66 65 74 63 68 28 27 77 69 6b 69 61 6a 61 78 .fetch('wikiajax
5fd0: 2f 70 72 65 76 69 65 77 27 2c 7b 0a 20 20 20 20 /preview',{.
5fe0: 20 20 70 61 79 6c 6f 61 64 3a 20 66 64 2c 0a 20 payload: fd,.
5ff0: 20 20 20 20 20 6f 6e 6c 6f 61 64 3a 20 28 72 2c onload: (r,
6000: 68 65 61 64 65 72 29 3d 3e 7b 0a 20 20 20 20 20 header)=>{.
6010: 20 20 20 63 61 6c 6c 62 61 63 6b 28 72 29 3b 0a callback(r);.
6020: 20 20 20 20 20 20 20 20 46 2e 6d 65 73 73 61 67 F.messag
6030: 65 28 27 55 70 64 61 74 65 64 20 70 72 65 76 69 e('Updated previ
6040: 65 77 2e 27 29 3b 0a 20 20 20 20 20 20 20 20 50 ew.');. P
6050: 2e 70 72 65 76 69 65 77 4e 65 65 64 73 55 70 64 .previewNeedsUpd
6060: 61 74 65 20 3d 20 66 61 6c 73 65 3b 0a 20 20 20 ate = false;.
6070: 20 20 20 20 20 50 2e 64 69 73 70 61 74 63 68 45 P.dispatchE
6080: 76 65 6e 74 28 27 77 69 6b 69 2d 70 72 65 76 69 vent('wiki-previ
6090: 65 77 2d 75 70 64 61 74 65 64 27 2c 7b 0a 20 20 ew-updated',{.
60a0: 20 20 20 20 20 20 20 20 6d 69 6d 65 74 79 70 65 mimetype
60b0: 3a 20 6d 69 6d 65 74 79 70 65 2c 0a 20 20 20 20 : mimetype,.
60c0: 20 20 20 20 20 20 65 6c 65 6d 65 6e 74 3a 20 50 element: P
60d0: 2e 65 2e 70 72 65 76 69 65 77 54 61 72 67 65 74 .e.previewTarget
60e0: 0a 20 20 20 20 20 20 20 20 7d 29 3b 0a 20 20 20 . });.
60f0: 20 20 20 7d 2c 0a 20 20 20 20 20 20 6f 6e 65 72 },. oner
6100: 72 6f 72 3a 20 28 65 29 3d 3e 7b 0a 20 20 20 20 ror: (e)=>{.
6110: 20 20 20 20 66 6f 73 73 69 6c 2e 66 65 74 63 68 fossil.fetch
6120: 2e 6f 6e 65 72 72 6f 72 28 65 29 3b 0a 20 20 20 .onerror(e);.
6130: 20 20 20 20 20 63 61 6c 6c 62 61 63 6b 28 22 45 callback("E
6140: 72 72 6f 72 20 66 65 74 63 68 69 6e 67 20 70 72 rror fetching pr
6150: 65 76 69 65 77 3a 20 22 2b 65 29 3b 0a 20 20 20 eview: "+e);.
6160: 20 20 20 7d 0a 20 20 20 20 7d 29 3b 0a 20 20 20 }. });.
6170: 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 20 20 return this;.
6180: 7d 3b 0a 0a 20 20 2f 2a 2a 0a 20 20 20 20 20 55 };.. /**. U
6190: 6e 64 6f 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 ndo some of the
61a0: 53 42 53 20 64 69 66 66 2d 72 65 6e 64 65 72 69 SBS diff-renderi
61b0: 6e 67 20 62 69 74 73 20 77 68 69 63 68 20 68 75 ng bits which hu
61c0: 72 74 20 75 73 20 6d 6f 72 65 20 74 68 61 6e 0a rt us more than.
61d0: 20 20 20 20 20 74 68 65 79 20 68 65 6c 70 2e 2e they help..
61e0: 2e 0a 20 20 2a 2f 0a 20 20 50 2e 74 77 65 61 6b .. */. P.tweak
61f0: 53 62 73 44 69 66 66 73 32 20 3d 20 66 75 6e 63 SbsDiffs2 = func
6200: 74 69 6f 6e 28 29 7b 0a 20 20 20 20 69 66 28 31 tion(){. if(1
6210: 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 64 ){. const d
6220: 74 20 3d 20 74 68 69 73 2e 65 2e 64 69 66 66 54 t = this.e.diffT
6230: 61 72 67 65 74 3b 0a 20 20 20 20 20 20 64 74 2e arget;. dt.
6240: 71 75 65 72 79 53 65 6c 65 63 74 6f 72 41 6c 6c querySelectorAll
6250: 28 27 2e 73 62 73 64 69 66 66 63 6f 6c 73 20 2e ('.sbsdiffcols .
6260: 64 69 66 66 74 78 74 63 6f 6c 27 29 2e 66 6f 72 difftxtcol').for
6270: 45 61 63 68 28 0a 20 20 20 20 20 20 20 20 28 64 Each(. (d
6280: 74 63 29 3d 3e 7b 0a 20 20 20 20 20 20 20 20 20 tc)=>{.
6290: 20 63 6f 6e 73 74 20 70 72 65 20 3d 20 64 74 63 const pre = dtc
62a0: 2e 71 75 65 72 79 53 65 6c 65 63 74 6f 72 28 27 .querySelector('
62b0: 70 72 65 27 29 3b 0a 20 20 20 20 20 20 20 20 20 pre');.
62c0: 20 70 72 65 2e 73 74 79 6c 65 2e 77 69 64 74 68 pre.style.width
62d0: 20 3d 20 27 69 6e 69 74 69 61 6c 27 3b 0a 20 20 = 'initial';.
62e0: 20 20 20 20 20 20 20 20 2f 2f 70 72 65 2e 72 65 //pre.re
62f0: 6d 6f 76 65 41 74 74 72 69 62 75 74 65 28 27 73 moveAttribute('s
6300: 74 79 6c 65 27 29 3b 0a 20 20 20 20 20 20 20 20 tyle');.
6310: 20 20 2f 2f 63 6f 6e 73 6f 6c 65 2e 64 65 62 75 //console.debu
6320: 67 28 22 70 72 65 20 77 69 64 74 68 20 3d 22 2c g("pre width =",
6330: 70 72 65 2e 73 74 79 6c 65 2e 77 69 64 74 68 29 pre.style.width)
6340: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 ;. }.
6350: 20 20 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 74 );. }. t
6360: 68 69 73 2e 74 77 65 61 6b 53 62 73 44 69 66 66 his.tweakSbsDiff
6370: 73 28 29 3b 0a 20 20 7d 3b 0a 0a 20 20 2f 2a 2a s();. };.. /**
6380: 0a 20 20 20 20 20 46 65 74 63 68 65 73 20 74 68 . Fetches th
6390: 65 20 63 6f 6e 74 65 6e 74 20 64 69 66 66 20 62 e content diff b
63a0: 61 73 65 64 20 6f 6e 20 74 68 65 20 63 6f 6e 74 ased on the cont
63b0: 65 6e 74 73 20 61 6e 64 20 73 65 74 74 69 6e 67 ents and setting
63c0: 73 20 6f 66 0a 20 20 20 20 20 74 68 69 73 20 70 s of. this p
63d0: 61 67 65 27 73 20 69 6e 70 75 74 20 66 69 65 6c age's input fiel
63e0: 64 73 2c 20 61 6e 64 20 75 70 64 61 74 65 73 20 ds, and updates
63f0: 74 68 65 20 55 49 20 77 69 74 68 20 74 68 65 20 the UI with the
6400: 64 69 66 66 20 76 69 65 77 2e 0a 0a 20 20 20 20 diff view...
6410: 20 52 65 74 75 72 6e 73 20 74 68 69 73 20 6f 62 Returns this ob
6420: 6a 65 63 74 2c 20 6e 6f 74 69 6e 67 20 74 68 61 ject, noting tha
6430: 74 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 t the operation
6440: 69 73 20 61 73 79 6e 63 2e 0a 20 20 2a 2f 0a 20 is async.. */.
6450: 20 50 2e 64 69 66 66 20 3d 20 66 75 6e 63 74 69 P.diff = functi
6460: 6f 6e 20 66 28 73 62 73 29 7b 0a 20 20 20 20 69 on f(sbs){. i
6470: 66 28 21 61 66 66 69 72 6d 50 61 67 65 4c 6f 61 f(!affirmPageLoa
6480: 64 65 64 28 29 29 20 72 65 74 75 72 6e 20 74 68 ded()) return th
6490: 69 73 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 6f is;. const co
64a0: 6e 74 65 6e 74 20 3d 20 74 68 69 73 2e 77 69 6b ntent = this.wik
64b0: 69 43 6f 6e 74 65 6e 74 28 29 2c 0a 20 20 20 20 iContent(),.
64c0: 20 20 20 20 20 20 73 65 6c 66 20 3d 20 74 68 69 self = thi
64d0: 73 2c 0a 20 20 20 20 20 20 20 20 20 20 74 61 72 s,. tar
64e0: 67 65 74 20 3d 20 74 68 69 73 2e 65 2e 64 69 66 get = this.e.dif
64f0: 66 54 61 72 67 65 74 3b 0a 20 20 20 20 63 6f 6e fTarget;. con
6500: 73 74 20 66 64 20 3d 20 6e 65 77 20 46 6f 72 6d st fd = new Form
6510: 44 61 74 61 28 29 3b 0a 20 20 20 20 66 64 2e 61 Data();. fd.a
6520: 70 70 65 6e 64 28 27 70 61 67 65 27 2c 74 68 69 ppend('page',thi
6530: 73 2e 77 69 6e 66 6f 2e 6e 61 6d 65 29 3b 0a 20 s.winfo.name);.
6540: 20 20 20 66 64 2e 61 70 70 65 6e 64 28 27 73 62 fd.append('sb
6550: 73 27 2c 20 73 62 73 20 3f 20 31 20 3a 20 30 29 s', sbs ? 1 : 0)
6560: 3b 0a 20 20 20 20 66 64 2e 61 70 70 65 6e 64 28 ;. fd.append(
6570: 27 63 6f 6e 74 65 6e 74 27 2c 63 6f 6e 74 65 6e 'content',conten
6580: 74 29 3b 0a 20 20 20 20 69 66 28 74 68 69 73 2e t);. if(this.
6590: 65 2e 73 65 6c 65 63 74 44 69 66 66 57 53 29 20 e.selectDiffWS)
65a0: 66 64 2e 61 70 70 65 6e 64 28 27 77 73 27 2c 74 fd.append('ws',t
65b0: 68 69 73 2e 65 2e 73 65 6c 65 63 74 44 69 66 66 his.e.selectDiff
65c0: 57 53 2e 76 61 6c 75 65 29 3b 0a 20 20 20 20 46 WS.value);. F
65d0: 2e 6d 65 73 73 61 67 65 28 0a 20 20 20 20 20 20 .message(.
65e0: 22 46 65 74 63 68 69 6e 67 20 64 69 66 66 2e 2e "Fetching diff..
65f0: 2e 22 0a 20 20 20 20 29 2e 66 65 74 63 68 28 27 .". ).fetch('
6600: 77 69 6b 69 61 6a 61 78 2f 64 69 66 66 27 2c 7b wikiajax/diff',{
6610: 0a 20 20 20 20 20 20 70 61 79 6c 6f 61 64 3a 20 . payload:
6620: 66 64 2c 0a 20 20 20 20 20 20 6f 6e 6c 6f 61 64 fd,. onload
6630: 3a 20 66 75 6e 63 74 69 6f 6e 28 63 29 7b 0a 20 : function(c){.
6640: 20 20 20 20 20 20 20 74 61 72 67 65 74 2e 69 6e target.in
6650: 6e 65 72 48 54 4d 4c 20 3d 20 5b 0a 20 20 20 20 nerHTML = [.
6660: 20 20 20 20 20 20 22 3c 64 69 76 3e 44 69 66 66 "<div>Diff
6670: 20 3c 63 6f 64 65 3e 5b 22 2c 0a 20 20 20 20 20 <code>[",.
6680: 20 20 20 20 20 73 65 6c 66 2e 77 69 6e 66 6f 2e self.winfo.
6690: 6e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20 name,.
66a0: 22 5d 3c 2f 63 6f 64 65 3e 20 26 72 61 72 72 3b "]</code> →
66b0: 20 4c 6f 63 61 6c 20 45 64 69 74 73 3c 2f 64 69 Local Edits</di
66c0: 76 3e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 63 v>",. c
66d0: 7c 7c 27 4e 6f 20 63 68 61 6e 67 65 73 2e 27 0a ||'No changes.'.
66e0: 20 20 20 20 20 20 20 20 5d 2e 6a 6f 69 6e 28 27 ].join('
66f0: 27 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 73 ');. if(s
6700: 62 73 29 20 50 2e 74 77 65 61 6b 53 62 73 44 69 bs) P.tweakSbsDi
6710: 66 66 73 32 28 29 3b 0a 20 20 20 20 20 20 20 20 ffs2();.
6720: 46 2e 6d 65 73 73 61 67 65 28 27 55 70 64 61 74 F.message('Updat
6730: 65 64 20 64 69 66 66 2e 27 29 3b 0a 20 20 20 20 ed diff.');.
6740: 20 20 20 20 73 65 6c 66 2e 74 61 62 73 2e 73 77 self.tabs.sw
6750: 69 74 63 68 54 6f 54 61 62 28 73 65 6c 66 2e 65 itchToTab(self.e
6760: 2e 74 61 62 73 2e 64 69 66 66 29 3b 0a 20 20 20 .tabs.diff);.
6770: 20 20 20 7d 0a 20 20 20 20 7d 29 3b 0a 20 20 20 }. });.
6780: 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 20 20 return this;.
6790: 7d 3b 0a 0a 20 20 2f 2a 2a 0a 20 20 20 20 20 55 };.. /**. U
67a0: 70 64 61 74 65 73 20 50 2e 77 69 6e 66 6f 20 66 pdates P.winfo f
67b0: 6f 72 20 63 65 72 74 61 69 6e 20 73 74 61 74 65 or certain state
67c0: 20 61 6e 64 20 73 74 61 73 68 65 73 20 50 2e 77 and stashes P.w
67d0: 69 6e 66 6f 2c 20 77 69 74 68 20 74 68 65 0a 20 info, with the.
67e0: 20 20 20 20 63 75 72 72 65 6e 74 20 63 6f 6e 74 current cont
67f0: 65 6e 74 20 66 65 74 63 68 65 64 20 76 69 61 20 ent fetched via
6800: 50 2e 77 69 6b 69 43 6f 6e 74 65 6e 74 28 29 2e P.wikiContent().
6810: 0a 0a 20 20 20 20 20 49 66 20 70 61 73 73 65 64 .. If passed
6820: 20 74 72 75 74 68 79 20 41 4e 44 20 74 68 65 20 truthy AND the
6830: 73 74 61 73 68 20 61 6c 72 65 61 64 79 20 68 61 stash already ha
6840: 73 20 73 74 61 73 68 65 64 20 63 6f 6e 74 65 6e s stashed conten
6850: 74 20 66 6f 72 0a 20 20 20 20 20 74 68 65 20 63 t for. the c
6860: 75 72 72 65 6e 74 20 70 61 67 65 2c 20 6f 6e 6c urrent page, onl
6870: 79 20 74 68 65 20 73 74 61 73 68 65 64 20 77 69 y the stashed wi
6880: 6e 66 6f 20 72 65 63 6f 72 64 20 69 73 20 75 70 nfo record is up
6890: 64 61 74 65 64 2c 20 65 6c 73 65 0a 20 20 20 20 dated, else.
68a0: 20 62 6f 74 68 20 74 68 65 20 77 69 6e 66 6f 20 both the winfo
68b0: 61 6e 64 20 63 6f 6e 74 65 6e 74 20 61 72 65 20 and content are
68c0: 75 70 64 61 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 updated.. */.
68d0: 50 2e 73 74 61 73 68 43 6f 6e 74 65 6e 74 43 68 P.stashContentCh
68e0: 61 6e 67 65 20 3d 20 66 75 6e 63 74 69 6f 6e 28 ange = function(
68f0: 6f 6e 6c 79 57 69 6e 66 6f 29 7b 0a 20 20 20 20 onlyWinfo){.
6900: 69 66 28 61 66 66 69 72 6d 50 61 67 65 4c 6f 61 if(affirmPageLoa
6910: 64 65 64 28 74 72 75 65 29 29 7b 0a 20 20 20 20 ded(true)){.
6920: 20 20 63 6f 6e 73 74 20 77 69 20 3d 20 74 68 69 const wi = thi
6930: 73 2e 77 69 6e 66 6f 3b 0a 20 20 20 20 20 20 77 s.winfo;. w
6940: 69 2e 6d 69 6d 65 74 79 70 65 20 3d 20 50 2e 65 i.mimetype = P.e
6950: 2e 73 65 6c 65 63 74 4d 69 6d 65 74 79 70 65 2e .selectMimetype.
6960: 76 61 6c 75 65 3b 0a 20 20 20 20 20 20 69 66 28 value;. if(
6970: 6f 6e 6c 79 57 69 6e 66 6f 20 26 26 20 24 73 74 onlyWinfo && $st
6980: 61 73 68 2e 68 61 73 53 74 61 73 68 65 64 43 6f ash.hasStashedCo
6990: 6e 74 65 6e 74 28 77 69 29 29 7b 0a 20 20 20 20 ntent(wi)){.
69a0: 20 20 20 20 24 73 74 61 73 68 2e 75 70 64 61 74 $stash.updat
69b0: 65 57 69 6e 66 6f 28 77 69 29 3b 0a 20 20 20 20 eWinfo(wi);.
69c0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 }else{.
69d0: 20 24 73 74 61 73 68 2e 75 70 64 61 74 65 57 69 $stash.updateWi
69e0: 6e 66 6f 28 77 69 2c 20 50 2e 77 69 6b 69 43 6f nfo(wi, P.wikiCo
69f0: 6e 74 65 6e 74 28 29 29 3b 0a 20 20 20 20 20 20 ntent());.
6a00: 7d 0a 20 20 20 20 20 20 46 2e 6d 65 73 73 61 67 }. F.messag
6a10: 65 28 22 53 74 61 73 68 65 64 20 63 68 61 6e 67 e("Stashed chang
6a20: 65 28 73 29 20 74 6f 20 70 61 67 65 20 5b 22 2b e(s) to page ["+
6a30: 77 69 2e 6e 61 6d 65 2b 22 5d 2e 22 29 3b 0a 20 wi.name+"].");.
6a40: 20 20 20 20 20 50 2e 75 70 64 61 74 65 50 61 67 P.updatePag
6a50: 65 54 69 74 6c 65 28 29 3b 0a 20 20 20 20 20 20 eTitle();.
6a60: 24 73 74 61 73 68 2e 70 72 75 6e 65 28 29 3b 0a $stash.prune();.
6a70: 20 20 20 20 20 20 74 68 69 73 2e 70 72 65 76 69 this.previ
6a80: 65 77 4e 65 65 64 73 55 70 64 61 74 65 20 3d 20 ewNeedsUpdate =
6a90: 74 72 75 65 3b 0a 20 20 20 20 7d 0a 20 20 20 20 true;. }.
6aa0: 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 20 20 7d return this;. }
6ab0: 3b 0a 0a 20 20 2f 2a 2a 0a 20 20 20 20 20 52 65 ;.. /**. Re
6ac0: 6d 6f 76 65 73 20 61 6e 79 20 73 74 61 73 68 65 moves any stashe
6ad0: 64 20 73 74 61 74 65 20 66 6f 72 20 74 68 65 20 d state for the
6ae0: 63 75 72 72 65 6e 74 20 50 2e 77 69 6e 66 6f 20 current P.winfo
6af0: 28 69 66 20 73 65 74 29 20 66 72 6f 6d 0a 20 20 (if set) from.
6b00: 20 20 20 46 2e 73 74 6f 72 61 67 65 2e 20 52 65 F.storage. Re
6b10: 74 75 72 6e 73 20 74 68 69 73 2e 0a 20 20 2a 2f turns this.. */
6b20: 0a 20 20 50 2e 75 6e 73 74 61 73 68 43 6f 6e 74 . P.unstashCont
6b30: 65 6e 74 20 3d 20 66 75 6e 63 74 69 6f 6e 28 29 ent = function()
6b40: 7b 0a 20 20 20 20 63 6f 6e 73 74 20 77 69 6e 66 {. const winf
6b50: 6f 20 3d 20 61 72 67 75 6d 65 6e 74 73 5b 30 5d o = arguments[0]
6b60: 20 7c 7c 20 74 68 69 73 2e 77 69 6e 66 6f 3b 0a || this.winfo;.
6b70: 20 20 20 20 69 66 28 77 69 6e 66 6f 29 7b 0a 20 if(winfo){.
6b80: 20 20 20 20 20 74 68 69 73 2e 70 72 65 76 69 65 this.previe
6b90: 77 4e 65 65 64 73 55 70 64 61 74 65 20 3d 20 74 wNeedsUpdate = t
6ba0: 72 75 65 3b 0a 20 20 20 20 20 20 24 73 74 61 73 rue;. $stas
6bb0: 68 2e 75 6e 73 74 61 73 68 28 77 69 6e 66 6f 29 h.unstash(winfo)
6bc0: 3b 0a 20 20 20 20 20 20 2f 2f 63 6f 6e 73 6f 6c ;. //consol
6bd0: 65 2e 64 65 62 75 67 28 22 55 6e 73 74 61 73 68 e.debug("Unstash
6be0: 65 64 22 2c 77 69 6e 66 6f 29 3b 0a 20 20 20 20 ed",winfo);.
6bf0: 20 20 46 2e 6d 65 73 73 61 67 65 28 22 55 6e 73 F.message("Uns
6c00: 74 61 73 68 65 64 20 70 61 67 65 20 5b 22 2b 77 tashed page ["+w
6c10: 69 6e 66 6f 2e 6e 61 6d 65 2b 22 5d 2e 22 29 3b info.name+"].");
6c20: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 . }. retur
6c30: 6e 20 74 68 69 73 3b 0a 20 20 7d 3b 0a 0a 20 20 n this;. };..
6c40: 2f 2a 2a 0a 20 20 20 20 20 43 6c 65 61 72 73 20 /**. Clears
6c50: 61 6c 6c 20 73 74 61 73 68 65 64 20 66 69 6c 65 all stashed file
6c60: 20 73 74 61 74 65 20 66 72 6f 6d 20 46 2e 73 74 state from F.st
6c70: 6f 72 61 67 65 2e 20 52 65 74 75 72 6e 73 20 74 orage. Returns t
6c80: 68 69 73 2e 0a 20 20 2a 2f 0a 20 20 50 2e 63 6c his.. */. P.cl
6c90: 65 61 72 53 74 61 73 68 20 3d 20 66 75 6e 63 74 earStash = funct
6ca0: 69 6f 6e 28 29 7b 0a 20 20 20 20 24 73 74 61 73 ion(){. $stas
6cb0: 68 2e 63 6c 65 61 72 28 29 3b 0a 20 20 20 20 72 h.clear();. r
6cc0: 65 74 75 72 6e 20 74 68 69 73 3b 0a 20 20 7d 3b eturn this;. };
6cd0: 0a 0a 20 20 2f 2a 2a 0a 20 20 20 20 20 49 66 20 .. /**. If
6ce0: 73 74 61 73 68 65 64 20 63 6f 6e 74 65 6e 74 20 stashed content
6cf0: 66 6f 72 20 50 2e 77 69 6e 66 6f 20 65 78 69 73 for P.winfo exis
6d00: 74 73 2c 20 69 74 20 69 73 20 72 65 74 75 72 6e ts, it is return
6d10: 65 64 2c 20 65 6c 73 65 0a 20 20 20 20 20 75 6e ed, else. un
6d20: 64 65 66 69 6e 65 64 20 69 73 20 72 65 74 75 72 defined is retur
6d30: 6e 65 64 2e 0a 20 20 2a 2f 0a 20 20 50 2e 63 6f ned.. */. P.co
6d40: 6e 74 65 6e 74 46 72 6f 6d 53 74 61 73 68 20 3d ntentFromStash =
6d50: 20 66 75 6e 63 74 69 6f 6e 28 29 7b 0a 20 20 20 function(){.
6d60: 20 72 65 74 75 72 6e 20 61 66 66 69 72 6d 50 61 return affirmPa
6d70: 67 65 4c 6f 61 64 65 64 28 74 72 75 65 29 20 3f geLoaded(true) ?
6d80: 20 24 73 74 61 73 68 2e 73 74 61 73 68 65 64 43 $stash.stashedC
6d90: 6f 6e 74 65 6e 74 28 74 68 69 73 2e 77 69 6e 66 ontent(this.winf
6da0: 6f 29 20 3a 20 75 6e 64 65 66 69 6e 65 64 3b 0a o) : undefined;.
6db0: 20 20 7d 3b 0a 0a 20 20 2f 2a 2a 0a 20 20 20 20 };.. /**.
6dc0: 20 49 66 20 61 20 73 74 61 73 68 65 64 20 76 65 If a stashed ve
6dd0: 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 67 69 76 rsion of the giv
6de0: 65 6e 20 77 69 6e 66 6f 20 6f 62 6a 65 63 74 20 en winfo object
6df0: 65 78 69 73 74 73 20 28 73 61 6d 65 0a 20 20 20 exists (same.
6e00: 20 20 66 69 6c 65 6e 61 6d 65 2f 63 68 65 63 6b filename/check
6e10: 69 6e 20 76 61 6c 75 65 73 29 2c 20 72 65 74 75 in values), retu
6e20: 72 6e 20 69 74 2c 20 65 6c 73 65 20 72 65 74 75 rn it, else retu
6e30: 72 6e 20 75 6e 64 65 66 69 6e 65 64 2e 0a 20 20 rn undefined..
6e40: 2a 2f 0a 20 20 50 2e 67 65 74 53 74 61 73 68 65 */. P.getStashe
6e50: 64 57 69 6e 66 6f 20 3d 20 66 75 6e 63 74 69 6f dWinfo = functio
6e60: 6e 28 77 69 6e 66 6f 29 7b 0a 20 20 20 20 72 65 n(winfo){. re
6e70: 74 75 72 6e 20 24 73 74 61 73 68 2e 67 65 74 57 turn $stash.getW
6e80: 69 6e 66 6f 28 77 69 6e 66 6f 29 3b 0a 20 20 7d info(winfo);. }
6e90: 3b 0a 20 20 0a 7d 29 28 77 69 6e 64 6f 77 2e 66 ;. .})(window.f
6ea0: 6f 73 73 69 6c 29 3b 0a ossil);.