विकिबुक्स mrwikibooks https://mr.wikibooks.org/wiki/%E0%A4%AE%E0%A5%81%E0%A4%96%E0%A4%AA%E0%A5%83%E0%A4%B7%E0%A5%8D%E0%A4%A0 MediaWiki 1.47.0-wmf.13 first-letter मिडिया विशेष चर्चा सदस्य सदस्य चर्चा विकिबुक्स विकिबुक्स चर्चा चित्र चित्र चर्चा मिडियाविकी मिडियाविकी चर्चा साचा साचा चर्चा सहाय्य सहाय्य चर्चा वर्ग वर्ग चर्चा TimedText TimedText talk विभाग विभाग चर्चा Event Event talk सदस्य:Revi C. 2 2793 15099 13670 2026-08-01T23:39:48Z Pathoschild 103 global user pages ([[m:Synchbot|requested by Revi C.]]) 15099 wikitext text/x-wiki __NOINDEX__<div class="mw-content-ltr" lang="en" dir="ltr">{{#babel:ko|en-3|mr-0}} [[File:Revi wikimedia image.jpg|thumb|center|middle|If you are here to talk about CommonsDelinker removing a deleted image, please [[:c:User talk:Revi C.|go here]].]] Hello! I am [[:m:User:Revi C.|revi]]. I edit to [[m:SWMT|revert vandals]], do Wikidata stuff<!--(I am a Wikidata Admin! <small>([{{fullurl:wikidata:Special:ListUsers/Revi C.|limit=1}} Verify])</small>)-->, or do [[:c:COM:FR|Commons Filemoving stuff]] (I am Commons Admin too! <small>([{{fullurl:c:Special:ListUsers/Revi C.|limit=1}} Verify])</small>). Come to [[:m:User:Revi C.|my Meta userpage]] or [[:c:User:Revi C.|my Commons userpage]] for more information. Thank you.</div> mwqk6z8nb61qhmwfl2t69xsuim34q6l सदस्य चर्चा:Revi C. 3 2794 15098 13669 2026-08-01T23:04:38Z Pathoschild 103 global user pages ([[m:Synchbot|requested by Revi C.]]) 15098 wikitext text/x-wiki __NOINDEX__<div class="mw-content-ltr" lang="en" dir="ltr">[[File:Revi logo (pink).png|thumb|center|<span style="color:red">PLEASE DO NOT LEAVE MESSAGE HERE!</span>]] ''' <span style="color:red"> BEFORE YOU BLOCK MY ACCOUNT: IF MY EDIT SUMMARY INCLUDE PREFIX </span>''(Script)''<span style="color:red">, DON'T BLOCK ME, JUST TELL ME TO SLOW DOWN AT COMMONS' TALK PAGE. IT IS AN AUTOMATED SCRIPT BEING USED ON COMMONS TO MOVE FILES.</span> Instead, please leave your message following site: <br /> [[File:Wikidata-logo-en.svg|45px|link=d:User talk:Revi C.]] [[d:User talk:Revi C.]] for Wikidata (Interwiki links) stuff <!--(I am {{int:Group-sysop}} there)--> <br /> [[File:Commons-logo.svg|45px|link=commons:User talk:Revi C.]] [[commons:User talk:Revi C.]] for renaming stuff or [[User:CommonsDelinker|CommonsDelinker]] action (I am {{int:Group-sysop}} there) <br /> [[File:Wikimedia Community Logo optimized.svg|45px|link=m:User talk:Revi C.]] [[meta:User talk:Revi C.]] for other stuff (User right notification, revert message, etc...) Messages left on this page may be reverted or moved without any response.</div> esxe13mcstpjlux1bt2hqwxr2v8t8mn सदस्य:Hym411 2 2876 15100 13673 2026-08-02T00:17:29Z Pathoschild 103 global user pages ([[m:Synchbot|requested by Hym411]]) 15100 wikitext text/x-wiki #REDIRECT [[User:Revi C.]] 88g0cv17whfgb1wkeh281mptujwtlut सदस्य चर्चा:Hym411 3 2877 15101 13674 2026-08-02T00:57:20Z Pathoschild 103 global user pages ([[m:Synchbot|requested by Hym411]]) 15101 wikitext text/x-wiki #REDIRECT [[User talk:Revi C.]] o9z79lcc9a9pfmqmrod5w3eyk4q9i0o मिडियाविकी:Gadgets-definition 8 3199 14348 2007-12-18T15:32:31Z Whiteknight 3636 adding first gadget, a simplified per-book script 14348 wikitext text/x-wiki *Per-Book|Perbook.js flzy3fq90a40bi8yo1fymcvynz44jcz 14349 14348 2007-12-18T15:33:05Z Whiteknight 3636 14349 wikitext text/x-wiki *Perbook|Perbook.js ayvrjbch963zlxyasot6py15b2ieni3 14350 14349 2007-12-18T15:46:56Z Whiteknight 3636 14350 wikitext text/x-wiki *Perbook|Perbook.js *Personalper|Personalper.js 1kky73x21envxtx87upb4mb8dl7ivcu 14351 14350 2007-12-18T16:16:02Z Darklama 2894 +gadget to allow external links to be opened in a new tab or window 14351 wikitext text/x-wiki *Perbook|Perbook.js *Personalper|Personalper.js *Extlinks|Extlinks.js 8auoje8pihd5zghctupj816jehifg1r 14352 14351 2007-12-18T16:17:15Z Darklama 2894 fix, case sensative 14352 wikitext text/x-wiki *Perbook|Perbook.js *Personalper|Personalper.js *extlinks|extlinks.js fgnpj9lzdrtk1pyo7f4ksd7god9be2f 14353 14352 2007-12-18T16:36:32Z Darklama 2894 +BookSearch Gadget 14353 wikitext text/x-wiki *Perbook|Perbook.js *Personalper|Personalper.js *extlinks|extlinks.js *BookSearch|BookSearch.js c748us0e1l5nf7wasmxgsf9fy3izxzx 14354 14353 2007-12-18T18:07:14Z Mike.lifeguard 117 +purge? 14354 wikitext text/x-wiki *Perbook|Perbook.js *Personalper|Personalper.js *extlinks|extlinks.js *BookSearch|BookSearch.js *purge|purge.js r42ytl5egk3c3vvakhel7qxxhn8hx8x 14355 14354 2007-12-18T18:10:23Z Mike.lifeguard 117 +edittop 14355 wikitext text/x-wiki *Perbook|Perbook.js *Personalper|Personalper.js *extlinks|extlinks.js *BookSearch|BookSearch.js *purge|purge.js *edittop|edittop.js 7maqjifkg9cqvhecw36vd0frvdysa1n 14356 14355 2007-12-18T18:11:50Z Mike.lifeguard 117 +bottomtabs 14356 wikitext text/x-wiki *Perbook|Perbook.js *Personalper|Personalper.js *extlinks|extlinks.js *BookSearch|BookSearch.js *purge|purge.js *edittop|edittop.js *bottomtabs|bottomtabs.js mdoutjmrpmbrs5sp8f3nbwkq27o0cde 14357 14356 2007-12-18T18:14:08Z Mike.lifeguard 117 +sixtabs 14357 wikitext text/x-wiki *Perbook|Perbook.js *Personalper|Personalper.js *extlinks|extlinks.js *BookSearch|BookSearch.js *purge|purge.js *edittop|edittop.js *bottomtabs|bottomtabs.js *sixtabs|sixtabs.js gp2n82mdh9rvtms9cb7ol0h45cmo4yc 14358 14357 2007-12-18T18:17:53Z Mike.lifeguard 117 +autodel (Admins only) 14358 wikitext text/x-wiki *Perbook|Perbook.js *Personalper|Personalper.js *extlinks|extlinks.js *BookSearch|BookSearch.js *purge|purge.js *edittop|edittop.js *bottomtabs|bottomtabs.js *sixtabs|sixtabs.js *autodel|autodel.js a19h99ynngak5o48nya5inzdgrzch0c 14359 14358 2007-12-18T18:24:21Z Mike.lifeguard 117 +Twinklerevert 14359 wikitext text/x-wiki *Perbook|Perbook.js *Personalper|Personalper.js *extlinks|extlinks.js *BookSearch|BookSearch.js *purge|purge.js *edittop|edittop.js *bottomtabs|bottomtabs.js *sixtabs|sixtabs.js *autodel|autodel.js *Twinklerevert|morebits.js|twinklefluff.js 0j5xaerymm10q21ht7pc9feyvr7r8i9 14360 14359 2007-12-18T18:26:24Z Mike.lifeguard 117 +twinkledelimges 14360 wikitext text/x-wiki *Perbook|Perbook.js *Personalper|Personalper.js *extlinks|extlinks.js *BookSearch|BookSearch.js *purge|purge.js *edittop|edittop.js *bottomtabs|bottomtabs.js *sixtabs|sixtabs.js *autodel|autodel.js *Twinklerevert|morebits.js|twinklefluff.js *twinkledelimages|morebits.js|twinkledelimages.js ck3rw8j8fe07bo17zj4gz0c2it7uyrr 14361 14360 2007-12-18T18:50:48Z Mike.lifeguard 117 14361 wikitext text/x-wiki *Perbook|Perbook.js *Personalper|Personalper.js *extlinks|extlinks.js *BookSearch|BookSearch.js *purge|purge.js *edittop|edittop.js *bottomtabs|bottomtabs.js *sixtabs|sixtabs.js *Twinklerevert|morebits.js|twinklefluff.js ==Admin gadgets== *autodel|autodel.js *twinkledelimages|morebits.js|twinkledelimages.js hk8dldo2o3us1huyaaeumbz2cdr4j8a 14362 14361 2007-12-18T18:52:12Z Mike.lifeguard 117 fix? 14362 wikitext text/x-wiki *Perbook|Perbook.js *Personalper|Personalper.js *extlinks|extlinks.js *BookSearch|BookSearch.js *purge|purge.js *edittop|edittop.js *bottomtabs|bottomtabs.js *sixtabs|sixtabs.js *Twinklerevert|morebits.js|twinklefluff.js ==Admin Gadgets== *autodel|autodel.js *twinkledelimages|morebits.js|twinkledelimages.js jneuvqojm6exjykdzkkkuz2s0gxu519 14363 14362 2007-12-18T18:53:22Z Mike.lifeguard 117 fix? 14363 wikitext text/x-wiki *Perbook|Perbook.js *Personalper|Personalper.js *extlinks|extlinks.js *BookSearch|BookSearch.js *purge|purge.js *edittop|edittop.js *bottomtabs|bottomtabs.js *sixtabs|sixtabs.js *Twinklerevert|morebits.js|twinklefluff.js ==admingadgets== *autodel|autodel.js *twinkledelimages|morebits.js|twinkledelimages.js sdxeltv6xvea8zcoxzigy8zqh7c9y79 14364 14363 2007-12-18T18:56:49Z Mike.lifeguard 117 fix? 14364 wikitext text/x-wiki *Perbook|Perbook.js *Personalper|Personalper.js *extlinks|extlinks.js *BookSearch|BookSearch.js *purge|purge.js *edittop|edittop.js *bottomtabs|bottomtabs.js *sixtabs|sixtabs.js *Twinklerevert|morebits.js|twinklefluff.js == admingadgets == *autodel|autodel.js *twinkledelimages|morebits.js|twinkledelimages.js ro0c66wca1c4dwaqrpmdjqd5tdem938 14365 14364 2007-12-18T21:57:40Z Whiteknight 3636 14365 wikitext text/x-wiki == interface == *Perbook|Perbook.js *Personalper|Personalper.js *extlinks|extlinks.js *Twinklerevert|morebits.js|twinklefluff.js == tabgadgets == *purge|purge.js *edittop|edittop.js *bottomtabs|bottomtabs.js *sixtabs|sixtabs.js == othergadgets == *BookSearch|BookSearch.js == admingadgets == *autodel|autodel.js *twinkledelimages|morebits.js|twinkledelimages.js ja302xnr7zfepw576z28m76hzkb1eby 14366 14365 2007-12-18T22:23:38Z Whiteknight 3636 14366 wikitext text/x-wiki == interface == *Perbook|Perbook.js *Personalper|Personalper.js *extlinks|extlinks.js *Twinklerevert|morebits.js|twinklefluff.js == tabgadgets == *purge|purge.js *edittop|edittop.js *bottomtabs|bottomtabs.js *sixtabs|sixtabs.js == othergadgets == *BookSearch|BookSearch.js *wkPrintVersion|wknightcore.js|wkprintversion.js == admingadgets == *autodel|autodel.js *twinkledelimages|morebits.js|twinkledelimages.js 040i2yy0vsxexm1sueaeut0svpwdpwg 14367 14366 2007-12-19T03:29:19Z Whiteknight 3636 adding semi-automatic welcoming script 14367 wikitext text/x-wiki == interface == *Perbook|Perbook.js *Personalper|Personalper.js *extlinks|extlinks.js *Twinklerevert|morebits.js|twinklefluff.js == tabgadgets == *purge|purge.js *edittop|edittop.js *bottomtabs|bottomtabs.js *sixtabs|sixtabs.js == othergadgets == *BookSearch|BookSearch.js *wkPrintVersion|wknightcore.js|wkprintversion.js *Welcome|wknightcore.js|Welcome.js == admingadgets == *autodel|autodel.js *twinkledelimages|morebits.js|twinkledelimages.js gdo2trqkhl2o7pq310eq96ajhtv49u2 14368 14367 2007-12-19T16:29:19Z Mike.lifeguard 117 /* tabgadgets */ ExtraTools.js 14368 wikitext text/x-wiki == interface == *Perbook|Perbook.js *Personalper|Personalper.js *extlinks|extlinks.js *Twinklerevert|morebits.js|twinklefluff.js == tabgadgets == *purge|purge.js *edittop|edittop.js *bottomtabs|bottomtabs.js *sixtabs|sixtabs.js *ExtraTools|ExtraTools.js == othergadgets == *BookSearch|BookSearch.js *wkPrintVersion|wknightcore.js|wkprintversion.js *Welcome|wknightcore.js|Welcome.js == admingadgets == *autodel|autodel.js *twinkledelimages|morebits.js|twinkledelimages.js lj7hnc6rg5laipbhvcrjtha09i64688 14369 14368 2007-12-19T18:36:04Z Darklama 2894 +RemoveImageTools 14369 wikitext text/x-wiki == interface == *Perbook|Perbook.js *Personalper|Personalper.js *extlinks|extlinks.js *Twinklerevert|morebits.js|twinklefluff.js == tabgadgets == *purge|purge.js *edittop|edittop.js *bottomtabs|bottomtabs.js *sixtabs|sixtabs.js *RemoveImageTools|RemoveImageTools.js == othergadgets == *BookSearch|BookSearch.js *wkPrintVersion|wknightcore.js|wkprintversion.js *Welcome|wknightcore.js|Welcome.js == admingadgets == *autodel|autodel.js *twinkledelimages|morebits.js|twinkledelimages.js sahfvo09odxd4casec57kur6xtydyh5 14370 14369 2007-12-20T01:02:12Z Darklama 2894 +EnhancedUndelete script 14370 wikitext text/x-wiki == interface == *Perbook|Perbook.js *Personalper|Personalper.js *extlinks|extlinks.js *Twinklerevert|morebits.js|twinklefluff.js == tab gadgets == *purge|purge.js *edittop|edittop.js *bottomtabs|bottomtabs.js *sixtabs|sixtabs.js *RemoveImageTools|RemoveImageTools.js == other gadgets == *BookSearch|BookSearch.js *wkPrintVersion|wknightcore.js|wkprintversion.js *Welcome|wknightcore.js|Welcome.js == admingadgets == *autodel|autodel.js *twinkledelimages|morebits.js|twinkledelimages.js *EnhancedUndelete|EnhancedUndelete.js 65n0rbdeu8nm4ovyn2zaw58mrh3o85y 14371 14370 2007-12-20T01:02:52Z Darklama 2894 minor tweak 14371 wikitext text/x-wiki == interface == *Perbook|Perbook.js *Personalper|Personalper.js *extlinks|extlinks.js *Twinklerevert|morebits.js|twinklefluff.js == tab gadgets == *purge|purge.js *edittop|edittop.js *bottomtabs|bottomtabs.js *sixtabs|sixtabs.js *RemoveImageTools|RemoveImageTools.js == other gadgets == *BookSearch|BookSearch.js *wkPrintVersion|wknightcore.js|wkprintversion.js *Welcome|wknightcore.js|Welcome.js == admin gadgets == *autodel|autodel.js *twinkledelimages|morebits.js|twinkledelimages.js *EnhancedUndelete|EnhancedUndelete.js qx9djtwb4rzcrhld3el5sykgku6z3ti 14372 14371 2007-12-20T01:13:58Z Darklama 2894 fix headings 14372 wikitext text/x-wiki == interface == *Perbook|Perbook.js *Personalper|Personalper.js *extlinks|extlinks.js *Twinklerevert|morebits.js|twinklefluff.js == tab-gadgets == *purge|purge.js *edittop|edittop.js *bottomtabs|bottomtabs.js *sixtabs|sixtabs.js *RemoveImageTools|RemoveImageTools.js == other-gadgets == *BookSearch|BookSearch.js *wkPrintVersion|wknightcore.js|wkprintversion.js *Welcome|wknightcore.js|Welcome.js == admin-gadgets == *autodel|autodel.js *twinkledelimages|morebits.js|twinkledelimages.js *EnhancedUndelete|EnhancedUndelete.js 0cghf6m62vnl2i1aneb3gk4j2igxggz 14373 14372 2007-12-20T01:36:44Z Darklama 2894 see if removing extra space makes it work 14373 wikitext text/x-wiki == interface == *Perbook|Perbook.js *Personalper|Personalper.js *extlinks|extlinks.js *Twinklerevert|morebits.js|twinklefluff.js == tab-gadgets == *purge|purge.js *edittop|edittop.js *bottomtabs|bottomtabs.js *sixtabs|sixtabs.js *RemoveImageTools|RemoveImageTools.js == other-gadgets == *BookSearch|BookSearch.js *wkPrintVersion|wknightcore.js|wkprintversion.js *Welcome|wknightcore.js|Welcome.js == admin-gadgets == *autodel|autodel.js *twinkledelimages|morebits.js|twinkledelimages.js *EnhancedUndelete|EnhancedUndelete.js ire5zxzcw3mdda1s3wggf9n4h0ouogs 14374 14373 2007-12-20T01:43:32Z Darklama 2894 +space between * and description page 14374 wikitext text/x-wiki == interface == * Perbook|Perbook.js * Personalper|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * bottomtabs|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * BookSearch|BookSearch.js * wkPrintVersion|wknightcore.js|wkprintversion.js * Welcome|wknightcore.js|Welcome.js == admin-gadgets == * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js 2hfgqr1rhhxfwpi2hqzvoav3z2814ba 14375 14374 2007-12-20T02:19:54Z Whiteknight 3636 14375 wikitext text/x-wiki == tab-gadgets == * purge|purge.js * edittop|edittop.js * bottomtabs|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == interface == * Perbook|Perbook.js * Personalper|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js == other-gadgets == * BookSearch|BookSearch.js * wkPrintVersion|wknightcore.js|wkprintversion.js * Welcome|wknightcore.js|Welcome.js == admin-gadgets == * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js cayaudtav0ebm829n0wa0mm1zjkuax7 14376 14375 2007-12-20T02:20:42Z Whiteknight 3636 14376 wikitext text/x-wiki == interface == * Perbook|Perbook.js * Personalper|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * bottomtabs|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * BookSearch|BookSearch.js * wkPrintVersion|wknightcore.js|wkprintversion.js * Welcome|wknightcore.js|Welcome.js == admin-gadgets == * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js 2hfgqr1rhhxfwpi2hqzvoav3z2814ba 14377 14376 2008-01-02T18:31:24Z Whiteknight 3636 /* other-gadgets */ adding a whole suite of my gadgets 14377 wikitext text/x-wiki == interface == * Perbook|Perbook.js * Personalper|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * bottomtabs|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * BookSearch|BookSearch.js * wkPrintVersion|wknightcore.js|wkprintversion.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkprintversion.js|wkdesigner.js| * Welcome|wknightcore.js|Welcome.js == admin-gadgets == * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js roay9aeodtkh1w2onekwn02r7xjejcg 14378 14377 2008-01-08T22:31:13Z Whiteknight 3636 /* interface */ 14378 wikitext text/x-wiki == interface == * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * bottomtabs|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * BookSearch|BookSearch.js * wkPrintVersion|wknightcore.js|wkprintversion.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkprintversion.js|wkdesigner.js| * Welcome|wknightcore.js|Welcome.js == admin-gadgets == * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js 9wb5vb8bnsvbwc031gxmxa24qe4qq1n 14379 14378 2008-01-11T03:06:58Z Mike.lifeguard 117 +unlink using TW 14379 wikitext text/x-wiki == interface == * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js * Twinkleunlink|morebits.js|twinkleunlink.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * bottomtabs|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * BookSearch|BookSearch.js * wkPrintVersion|wknightcore.js|wkprintversion.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkprintversion.js|wkdesigner.js| * Welcome|wknightcore.js|Welcome.js == admin-gadgets == * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js ij3muliqqrbrqo0rkyv994kijuj4x2d 14380 14379 2008-01-11T06:48:04Z Mike.lifeguard 117 +VoA scripts 14380 wikitext text/x-wiki == interface == * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js * Twinkleunlink|morebits.js|twinkleunlink.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * bottomtabs|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * BookSearch|BookSearch.js * wkPrintVersion|wknightcore.js|wkprintversion.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkprintversion.js|wkdesigner.js| * Welcome|wknightcore.js|Welcome.js == admin-gadgets == * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * VoAScripts|addtabs.js|specialadmin.js|history.js|sleeper.js 9mbzd2r71tf25sbrizn4idvox4qevmb 14381 14380 2008-01-11T19:50:08Z Mike.lifeguard 117 comment out pending fix 14381 wikitext text/x-wiki == interface == * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js * Twinkleunlink|morebits.js|twinkleunlink.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * bottomtabs|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * BookSearch|BookSearch.js * wkPrintVersion|wknightcore.js|wkprintversion.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkprintversion.js|wkdesigner.js| * Welcome|wknightcore.js|Welcome.js == admin-gadgets == * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js <!--* VoAScripts|addtabs.js|specialadmin.js|history.js|sleeper.js--> 8do6hj8yqsdvpqs9af71nxrxw5g1ruq 14382 14381 2008-01-12T07:18:20Z Mike.lifeguard 117 /* interface */ +rightsfilter.js 14382 wikitext text/x-wiki == interface == * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js * Twinkleunlink|morebits.js|twinkleunlink.js * rightsfilter|rightsfilter.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * bottomtabs|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * BookSearch|BookSearch.js * wkPrintVersion|wknightcore.js|wkprintversion.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkprintversion.js|wkdesigner.js| * Welcome|wknightcore.js|Welcome.js == admin-gadgets == * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js <!--* VoAScripts|addtabs.js|specialadmin.js|history.js|sleeper.js--> nxd3gsc0c90d9xz3qxjnx7r5n336lxz 14383 14382 2008-01-14T04:17:29Z Mike.lifeguard 117 /* interface */ +twinklyspeedy.js 14383 wikitext text/x-wiki == interface == * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js * Twinkleunlink|morebits.js|twinkleunlink.js * Twinklespeedy|morebits.js|twinklespeedy.js * rightsfilter|rightsfilter.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * bottomtabs|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * BookSearch|BookSearch.js * wkPrintVersion|wknightcore.js|wkprintversion.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkprintversion.js|wkdesigner.js| * Welcome|wknightcore.js|Welcome.js == admin-gadgets == * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js <!--* VoAScripts|addtabs.js|specialadmin.js|history.js|sleeper.js--> hjvehdubl0yi4cj994tjbgveppme2rj 14384 14383 2008-01-14T04:30:06Z Mike.lifeguard 117 /* admin-gadgets */ +modrollback.js 14384 wikitext text/x-wiki == interface == * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js * Twinkleunlink|morebits.js|twinkleunlink.js * Twinklespeedy|morebits.js|twinklespeedy.js * rightsfilter|rightsfilter.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * bottomtabs|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * BookSearch|BookSearch.js * wkPrintVersion|wknightcore.js|wkprintversion.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkprintversion.js|wkdesigner.js| * Welcome|wknightcore.js|Welcome.js == admin-gadgets == * modrollback|modrollback.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js <!--* VoAScripts|addtabs.js|specialadmin.js|history.js|sleeper.js--> 003qb7ccatueheur8qd5o3ijs04bruh 14385 14384 2008-01-14T05:24:00Z Mike.lifeguard 117 comment out until less buggy 14385 wikitext text/x-wiki == interface == * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js * Twinkleunlink|morebits.js|twinkleunlink.js <!--* Twinklespeedy|morebits.js|twinklespeedy.js--> * rightsfilter|rightsfilter.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * bottomtabs|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * BookSearch|BookSearch.js * wkPrintVersion|wknightcore.js|wkprintversion.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkprintversion.js|wkdesigner.js| * Welcome|wknightcore.js|Welcome.js == admin-gadgets == * modrollback|modrollback.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js <!--* VoAScripts|addtabs.js|specialadmin.js|history.js|sleeper.js--> 8ngp6t9qi4qmul4bafahmoplk6qz2px 14386 14385 2008-01-14T05:24:44Z Mike.lifeguard 117 commenting out doesn't actually work :S 14386 wikitext text/x-wiki == interface == * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js * Twinkleunlink|morebits.js|twinkleunlink.js * rightsfilter|rightsfilter.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * bottomtabs|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * BookSearch|BookSearch.js * wkPrintVersion|wknightcore.js|wkprintversion.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkprintversion.js|wkdesigner.js| * Welcome|wknightcore.js|Welcome.js == admin-gadgets == * modrollback|modrollback.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js 427f58ln6pp73u1axxo0d8djfkcvpkl 14387 14386 2008-01-18T03:12:58Z Mike.lifeguard 117 +better bottom tabs 14387 wikitext text/x-wiki == interface == * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js * Twinkleunlink|morebits.js|twinkleunlink.js * rightsfilter|rightsfilter.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * betterbottomtabs|btabs.css|btabs.js * bottomtabs|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * BookSearch|BookSearch.js * wkPrintVersion|wknightcore.js|wkprintversion.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkprintversion.js|wkdesigner.js| * Welcome|wknightcore.js|Welcome.js == admin-gadgets == * modrollback|modrollback.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js 3b8eeouwwxcl1gat7upfubu55xd51zd 14388 14387 2008-01-20T02:22:31Z Mike.lifeguard 117 /* admin-gadgets */ autodeletelinks is non-functional for an unknown reason :( 14388 wikitext text/x-wiki == interface == * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js * Twinkleunlink|morebits.js|twinkleunlink.js * rightsfilter|rightsfilter.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * betterbottomtabs|btabs.css|btabs.js * bottomtabs|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * BookSearch|BookSearch.js * wkPrintVersion|wknightcore.js|wkprintversion.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkprintversion.js|wkdesigner.js| * Welcome|wknightcore.js|Welcome.js == admin-gadgets == * modrollback|modrollback.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js nwmso9uxs78xwwwxptrdmub2he6p2uo 14389 14388 2008-01-20T05:58:39Z Mike.lifeguard 117 is working again (replaced) 14389 wikitext text/x-wiki == interface == * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js * Twinkleunlink|morebits.js|twinkleunlink.js * rightsfilter|rightsfilter.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * betterbottomtabs|btabs.css|btabs.js * bottomtabs|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * BookSearch|BookSearch.js * wkPrintVersion|wknightcore.js|wkprintversion.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkprintversion.js|wkdesigner.js| * Welcome|wknightcore.js|Welcome.js == admin-gadgets == * modrollback|modrollback.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js 3b8eeouwwxcl1gat7upfubu55xd51zd 14390 14389 2008-02-28T13:32:36Z Webaware 3637 /* interface */ +sortlistinhtml.js 14390 wikitext text/x-wiki == interface == * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js * Twinkleunlink|morebits.js|twinkleunlink.js * rightsfilter|rightsfilter.js * sortlistinhtml|sortlistinhtml.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * betterbottomtabs|btabs.css|btabs.js * bottomtabs|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * BookSearch|BookSearch.js * wkPrintVersion|wknightcore.js|wkprintversion.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkprintversion.js|wkdesigner.js| * Welcome|wknightcore.js|Welcome.js == admin-gadgets == * modrollback|modrollback.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js 1are9cn2gctyo8v420lcihz1kqek45x 14391 14390 2008-03-06T12:26:17Z Mike.lifeguard 117 /* interface */ +1 14391 wikitext text/x-wiki == interface == * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js * Twinkleunlink|morebits.js|twinkleunlink.js * rightsfilter|rightsfilter.js * sortlistinhtml|sortlistinhtml.js * rangecontribs|rangecontribs.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * betterbottomtabs|btabs.css|btabs.js * bottomtabs|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * BookSearch|BookSearch.js * wkPrintVersion|wknightcore.js|wkprintversion.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkprintversion.js|wkdesigner.js| * Welcome|wknightcore.js|Welcome.js == admin-gadgets == * modrollback|modrollback.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js 33yjq9o1w1eec51stvclpfkhd51ui9p 14392 14391 2008-03-25T17:23:15Z Darklama 2894 +SpecialSearch 14392 wikitext text/x-wiki == interface == * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js * Twinkleunlink|morebits.js|twinkleunlink.js * rightsfilter|rightsfilter.js * sortlistinhtml|sortlistinhtml.js * rangecontribs|rangecontribs.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * betterbottomtabs|btabs.css|btabs.js * bottomtabs|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * BookSearch|BookSearch.js * SpecialSearch|SpecialSearch.js * wkPrintVersion|wknightcore.js|wkprintversion.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkprintversion.js|wkdesigner.js| * Welcome|wknightcore.js|Welcome.js == admin-gadgets == * modrollback|modrollback.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js fdmihqlt0pxy73s58v4zjzs8wjn06zi 14393 14392 2008-04-11T02:16:16Z Mike.lifeguard 117 /* admin-gadgets */ +[[MediaWiki:Gadget-CleanDeleteReasons.js]] 14393 wikitext text/x-wiki == interface == * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js * Twinkleunlink|morebits.js|twinkleunlink.js * rightsfilter|rightsfilter.js * sortlistinhtml|sortlistinhtml.js * rangecontribs|rangecontribs.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * betterbottomtabs|btabs.css|btabs.js * bottomtabs|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * BookSearch|BookSearch.js * SpecialSearch|SpecialSearch.js * wkPrintVersion|wknightcore.js|wkprintversion.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkprintversion.js|wkdesigner.js| * Welcome|wknightcore.js|Welcome.js == admin-gadgets == * modrollback|modrollback.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * CleanDeleteReasons|CleanDeleteReasons.js hhoab32oipqgog4op0y2ys0kt3l0ete 14394 14393 2008-05-24T19:49:34Z Mike.lifeguard 117 /* admin-gadgets */ +[[User:Mike.lifeguard/Twinkle Speedy documentation|Twinkle Speedy]] 14394 wikitext text/x-wiki == interface == * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js * Twinkleunlink|morebits.js|twinkleunlink.js * rightsfilter|rightsfilter.js * sortlistinhtml|sortlistinhtml.js * rangecontribs|rangecontribs.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * betterbottomtabs|btabs.css|btabs.js * bottomtabs|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * BookSearch|BookSearch.js * SpecialSearch|SpecialSearch.js * wkPrintVersion|wknightcore.js|wkprintversion.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkprintversion.js|wkdesigner.js| * Welcome|wknightcore.js|Welcome.js == admin-gadgets == * modrollback|modrollback.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * CleanDeleteReasons|CleanDeleteReasons.js * twinklespeedy|morebits.js|twinklespeedy.js d3ywe5b3qd9f79ptd4og9udtnj33e18 14395 14394 2008-05-24T19:54:25Z Mike.lifeguard 117 /* other-gadgets */ 14395 wikitext text/x-wiki == interface == * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js * Twinkleunlink|morebits.js|twinkleunlink.js * rightsfilter|rightsfilter.js * sortlistinhtml|sortlistinhtml.js * rangecontribs|rangecontribs.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * betterbottomtabs|btabs.css|btabs.js * bottomtabs|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * BookSearch|BookSearch.js * SpecialSearch|SpecialSearch.js * wkPrintVersion|wknightcore.js|wkprintversion.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkprintversion.js|wkdesigner.js| * Welcome|wknightcore.js|Welcome.js * JSL|JSL.js == admin-gadgets == * modrollback|modrollback.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * CleanDeleteReasons|CleanDeleteReasons.js * twinklespeedy|morebits.js|twinklespeedy.js higxt9kvbplmncm6z53zmqnstuk1eo1 14396 14395 2008-06-05T21:36:00Z Mike.lifeguard 117 /* interface */ +popups 14396 wikitext text/x-wiki == interface == * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js * Twinkleunlink|morebits.js|twinkleunlink.js * rightsfilter|rightsfilter.js * sortlistinhtml|sortlistinhtml.js * rangecontribs|rangecontribs.js * navpop|navpop.js|navpop.css == tab-gadgets == * purge|purge.js * edittop|edittop.js * betterbottomtabs|btabs.css|btabs.js * bottomtabs|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * BookSearch|BookSearch.js * SpecialSearch|SpecialSearch.js * wkPrintVersion|wknightcore.js|wkprintversion.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkprintversion.js|wkdesigner.js| * Welcome|wknightcore.js|Welcome.js * JSL|JSL.js == admin-gadgets == * modrollback|modrollback.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * CleanDeleteReasons|CleanDeleteReasons.js * twinklespeedy|morebits.js|twinklespeedy.js k3n82edfjm3tdz3k93ickpz9lisnr92 14397 14396 2008-07-04T20:47:44Z Mike.lifeguard 117 /* admin-gadgets */ +getmoredata 14397 wikitext text/x-wiki == interface == * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js * Twinkleunlink|morebits.js|twinkleunlink.js * rightsfilter|rightsfilter.js * sortlistinhtml|sortlistinhtml.js * rangecontribs|rangecontribs.js * navpop|navpop.js|navpop.css == tab-gadgets == * purge|purge.js * edittop|edittop.js * betterbottomtabs|btabs.css|btabs.js * bottomtabs|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * BookSearch|BookSearch.js * SpecialSearch|SpecialSearch.js * wkPrintVersion|wknightcore.js|wkprintversion.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkprintversion.js|wkdesigner.js| * Welcome|wknightcore.js|Welcome.js * JSL|JSL.js == admin-gadgets == * modrollback|modrollback.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * CleanDeleteReasons|CleanDeleteReasons.js * twinklespeedy|morebits.js|twinklespeedy.js * getmoredata|getmoredata.js idrob3ox5040e48pcrd7qlhwrwpj6o0 14398 14397 2008-08-16T19:35:20Z Mike.lifeguard 117 /* admin-gadgets */ +blocking stuff 14398 wikitext text/x-wiki == interface == * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js * Twinkleunlink|morebits.js|twinkleunlink.js * rightsfilter|rightsfilter.js * sortlistinhtml|sortlistinhtml.js * rangecontribs|rangecontribs.js * navpop|navpop.js|navpop.css == tab-gadgets == * purge|purge.js * edittop|edittop.js * betterbottomtabs|btabs.css|btabs.js * bottomtabs|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * BookSearch|BookSearch.js * SpecialSearch|SpecialSearch.js * wkPrintVersion|wknightcore.js|wkprintversion.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkprintversion.js|wkdesigner.js| * Welcome|wknightcore.js|Welcome.js * JSL|JSL.js == admin-gadgets == * modrollback|modrollback.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * CleanDeleteReasons|CleanDeleteReasons.js * twinklespeedy|morebits.js|twinklespeedy.js * getmoredata|getmoredata.js * massblock|massblock.js|blockoptions.js oqffacj6v3m92gqvzzhc6yk58eb9nug 14399 14398 2008-10-01T03:20:50Z Mike.lifeguard 117 /* admin-gadgets */ +[[MediaWiki:Gadget-patroller.js]] 14399 wikitext text/x-wiki == interface == * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js * Twinkleunlink|morebits.js|twinkleunlink.js * rightsfilter|rightsfilter.js * sortlistinhtml|sortlistinhtml.js * rangecontribs|rangecontribs.js * navpop|navpop.js|navpop.css == tab-gadgets == * purge|purge.js * edittop|edittop.js * betterbottomtabs|btabs.css|btabs.js * bottomtabs|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * BookSearch|BookSearch.js * SpecialSearch|SpecialSearch.js * wkPrintVersion|wknightcore.js|wkprintversion.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkprintversion.js|wkdesigner.js| * Welcome|wknightcore.js|Welcome.js * JSL|JSL.js == admin-gadgets == * modrollback|modrollback.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * CleanDeleteReasons|CleanDeleteReasons.js * twinklespeedy|morebits.js|twinklespeedy.js * patroller|patroller.js * getmoredata|getmoredata.js * massblock|massblock.js|blockoptions.js he4ssnxvmbvwty3f6ctrei1v615l2nw 14400 14399 2008-10-07T01:12:06Z Mike.lifeguard 117 rm booksearch 14400 wikitext text/x-wiki == interface == * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js * Twinkleunlink|morebits.js|twinkleunlink.js * rightsfilter|rightsfilter.js * sortlistinhtml|sortlistinhtml.js * rangecontribs|rangecontribs.js * navpop|navpop.js|navpop.css == tab-gadgets == * purge|purge.js * edittop|edittop.js * betterbottomtabs|btabs.css|btabs.js * bottomtabs|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * SpecialSearch|SpecialSearch.js * wkPrintVersion|wknightcore.js|wkprintversion.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkprintversion.js|wkdesigner.js| * Welcome|wknightcore.js|Welcome.js * JSL|JSL.js == admin-gadgets == * modrollback|modrollback.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * CleanDeleteReasons|CleanDeleteReasons.js * twinklespeedy|morebits.js|twinklespeedy.js * patroller|patroller.js * getmoredata|getmoredata.js * massblock|massblock.js|blockoptions.js e7hvnpow9ujdjmodeq2dod3nbirjx02 14401 14400 2008-10-10T00:04:30Z Whiteknight 3636 /* interface */ 14401 wikitext text/x-wiki == interface == * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js * Twinkleunlink|morebits.js|twinkleunlink.js * rightsfilter|rightsfilter.js * sortlistinhtml|sortlistinhtml.js * rangecontribs|rangecontribs.js * navpop|navpop.js|navpop.css * wiked|wiked.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * betterbottomtabs|btabs.css|btabs.js * bottomtabs|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * SpecialSearch|SpecialSearch.js * wkPrintVersion|wknightcore.js|wkprintversion.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkprintversion.js|wkdesigner.js| * Welcome|wknightcore.js|Welcome.js * JSL|JSL.js == admin-gadgets == * modrollback|modrollback.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * CleanDeleteReasons|CleanDeleteReasons.js * twinklespeedy|morebits.js|twinklespeedy.js * patroller|patroller.js * getmoredata|getmoredata.js * massblock|massblock.js|blockoptions.js cdxdry6ubtk5slg8rt1i6h3n2plhieg 14402 14401 2008-11-03T02:40:05Z Mike.lifeguard 117 gone 14402 wikitext text/x-wiki == interface == * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js * Twinkleunlink|morebits.js|twinkleunlink.js * rightsfilter|rightsfilter.js * sortlistinhtml|sortlistinhtml.js * rangecontribs|rangecontribs.js * navpop|navpop.js|navpop.css * wiked|wiked.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * betterbottomtabs|btabs.css|btabs.js * bottomtabs|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * SpecialSearch|SpecialSearch.js * wkPrintVersion|wknightcore.js|wkprintversion.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkprintversion.js|wkdesigner.js| * Welcome|wknightcore.js|Welcome.js * JSL|JSL.js == admin-gadgets == * modrollback|modrollback.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * CleanDeleteReasons|CleanDeleteReasons.js * twinklespeedy|morebits.js|twinklespeedy.js * patroller|patroller.js * massblock|massblock.js|blockoptions.js 17tuiviuhmsp2n4ubuleu445xs21i3p 14403 14402 2008-11-03T02:41:10Z Mike.lifeguard 117 Undo revision 1323477 by [[Special:Contributions/Mike.lifeguard|Mike.lifeguard]] ([[User talk:Mike.lifeguard|Talk]]) 14403 wikitext text/x-wiki == interface == * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js * Twinkleunlink|morebits.js|twinkleunlink.js * rightsfilter|rightsfilter.js * sortlistinhtml|sortlistinhtml.js * rangecontribs|rangecontribs.js * navpop|navpop.js|navpop.css * wiked|wiked.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * betterbottomtabs|btabs.css|btabs.js * bottomtabs|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * SpecialSearch|SpecialSearch.js * wkPrintVersion|wknightcore.js|wkprintversion.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkprintversion.js|wkdesigner.js| * Welcome|wknightcore.js|Welcome.js * JSL|JSL.js == admin-gadgets == * modrollback|modrollback.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * CleanDeleteReasons|CleanDeleteReasons.js * twinklespeedy|morebits.js|twinklespeedy.js * patroller|patroller.js * getmoredata|getmoredata.js * massblock|massblock.js|blockoptions.js cdxdry6ubtk5slg8rt1i6h3n2plhieg 14404 14403 2008-11-11T02:23:13Z Mike.lifeguard 117 /* interface */ +hide banner 14404 wikitext text/x-wiki == interface == * HideFundraisingNotice|HideFundraisingNotice.css * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js * Twinkleunlink|morebits.js|twinkleunlink.js * rightsfilter|rightsfilter.js * sortlistinhtml|sortlistinhtml.js * rangecontribs|rangecontribs.js * navpop|navpop.js|navpop.css * wiked|wiked.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * betterbottomtabs|btabs.css|btabs.js * bottomtabs|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * SpecialSearch|SpecialSearch.js * wkPrintVersion|wknightcore.js|wkprintversion.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkprintversion.js|wkdesigner.js| * Welcome|wknightcore.js|Welcome.js * JSL|JSL.js == admin-gadgets == * modrollback|modrollback.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * CleanDeleteReasons|CleanDeleteReasons.js * twinklespeedy|morebits.js|twinklespeedy.js * patroller|patroller.js * getmoredata|getmoredata.js * massblock|massblock.js|blockoptions.js fhsprtaz2su2ezch96wzrmbru9dr3na 14405 14404 2008-11-17T19:16:13Z Mike.lifeguard 117 14405 wikitext text/x-wiki == interface == * HideFundraisingNotice|HideFundraisingNotice.css * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js * Twinkleunlink|morebits.js|twinkleunlink.js * rightsfilter|rightsfilter.js * sortlistinhtml|sortlistinhtml.js * rangecontribs|rangecontribs.js * navpop|navpop.js|navpop.css * wiked|wiked.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * betterbottomtabs|btabs.css|btabs.js * bottomtabs|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * SpecialSearch|SpecialSearch.js * wkPrintVersion|wknightcore.js|wkprintversion.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkprintversion.js|wkdesigner.js| * Welcome|wknightcore.js|Welcome.js * JSL|JSL.js == admin-gadgets == * modrollback|modrollback.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * CleanDeleteReasons|CleanDeleteReasons.js * twinklespeedy|morebits.js|twinklespeedy.js * getmoredata|getmoredata.js * massblock|massblock.js|blockoptions.js sxuupaowjnya5yveosv33iuzgi8qi5e 14406 14405 2008-11-20T01:08:00Z Mike.lifeguard 117 update 14406 wikitext text/x-wiki == interface == * HideFundraisingNotice|HideFundraisingNotice.css * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js * Twinkleunlink|morebits.js|twinkleunlink.js * rightsfilter|rightsfilter.js * sortlistinhtml|sortlistinhtml.js * contribsrange|contribsrange.js * navpop|navpop.js|navpop.css * wiked|wiked.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * betterbottomtabs|btabs.css|btabs.js * bottomtabs|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * SpecialSearch|SpecialSearch.js * wkPrintVersion|wknightcore.js|wkprintversion.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkprintversion.js|wkdesigner.js| * Welcome|wknightcore.js|Welcome.js * JSL|JSL.js == admin-gadgets == * modrollback|modrollback.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * CleanDeleteReasons|CleanDeleteReasons.js * twinklespeedy|morebits.js|twinklespeedy.js * getmoredata|getmoredata.js * massblock|massblock.js|blockoptions.js r0w243i4e2ob06wuls7wm5k1ypwmoty 14407 14406 2008-12-08T17:11:52Z Whiteknight 3636 /* other-gadgets */ 14407 wikitext text/x-wiki == interface == * HideFundraisingNotice|HideFundraisingNotice.css * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js * Twinkleunlink|morebits.js|twinkleunlink.js * rightsfilter|rightsfilter.js * sortlistinhtml|sortlistinhtml.js * contribsrange|contribsrange.js * navpop|navpop.js|navpop.css * wiked|wiked.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * betterbottomtabs|btabs.css|btabs.js * bottomtabs|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * SpecialSearch|SpecialSearch.js * wkPrintVersion|wknightcore.js|wkprintversion.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkprintversion.js|wkdesigner.js| * Welcome|wknightcore.js|Welcome.js * JSL|JSL.js * GetCollection|collectionparser.js == admin-gadgets == * modrollback|modrollback.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * CleanDeleteReasons|CleanDeleteReasons.js * twinklespeedy|morebits.js|twinklespeedy.js * getmoredata|getmoredata.js * massblock|massblock.js|blockoptions.js kasi5zeowbhr550nz8obcuvdtpns6ed 14408 14407 2008-12-13T21:04:22Z Whiteknight 3636 /* other-gadgets */ 14408 wikitext text/x-wiki == interface == * HideFundraisingNotice|HideFundraisingNotice.css * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js * Twinkleunlink|morebits.js|twinkleunlink.js * rightsfilter|rightsfilter.js * sortlistinhtml|sortlistinhtml.js * contribsrange|contribsrange.js * navpop|navpop.js|navpop.css * wiked|wiked.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * betterbottomtabs|btabs.css|btabs.js * bottomtabs|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * SpecialSearch|SpecialSearch.js * wkPrintVersion|wknightcore.js|wkprintversion.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * Welcome|wknightcore.js|Welcome.js * JSL|JSL.js * GetCollection|collectionparser.js == admin-gadgets == * modrollback|modrollback.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * CleanDeleteReasons|CleanDeleteReasons.js * twinklespeedy|morebits.js|twinklespeedy.js * getmoredata|getmoredata.js * massblock|massblock.js|blockoptions.js pxq0w3d6ym8hbxvkh9b4xvsmtk07dcw 14409 14408 2008-12-13T21:12:43Z Whiteknight 3636 /* other-gadgets */ 14409 wikitext text/x-wiki == interface == * HideFundraisingNotice|HideFundraisingNotice.css * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js * Twinkleunlink|morebits.js|twinkleunlink.js * rightsfilter|rightsfilter.js * sortlistinhtml|sortlistinhtml.js * contribsrange|contribsrange.js * navpop|navpop.js|navpop.css * wiked|wiked.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * betterbottomtabs|btabs.css|btabs.js * bottomtabs|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * SpecialSearch|SpecialSearch.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * Welcome|wknightcore.js|Welcome.js * JSL|JSL.js * GetCollection|collectionparser.js == admin-gadgets == * modrollback|modrollback.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * CleanDeleteReasons|CleanDeleteReasons.js * twinklespeedy|morebits.js|twinklespeedy.js * getmoredata|getmoredata.js * massblock|massblock.js|blockoptions.js 2i6qdt7bgqh8x9vi12wteemrcrzxqb5 14410 14409 2009-01-10T04:35:30Z Mike.lifeguard 117 -fundraiser 14410 wikitext text/x-wiki == interface == * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js * Twinkleunlink|morebits.js|twinkleunlink.js * rightsfilter|rightsfilter.js * sortlistinhtml|sortlistinhtml.js * contribsrange|contribsrange.js * navpop|navpop.js|navpop.css * wiked|wiked.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * betterbottomtabs|btabs.css|btabs.js * bottomtabs|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * SpecialSearch|SpecialSearch.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * Welcome|wknightcore.js|Welcome.js * JSL|JSL.js * GetCollection|collectionparser.js == admin-gadgets == * modrollback|modrollback.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * CleanDeleteReasons|CleanDeleteReasons.js * twinklespeedy|morebits.js|twinklespeedy.js * getmoredata|getmoredata.js * massblock|massblock.js|blockoptions.js fmffaeusl23t7qgm5p3pctth31s7uq4 14411 14410 2009-01-13T17:24:11Z Mike.lifeguard 117 rm * EnhancedUndelete|EnhancedUndelete.js - core software 14411 wikitext text/x-wiki == interface == * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js * Twinkleunlink|morebits.js|twinkleunlink.js * rightsfilter|rightsfilter.js * sortlistinhtml|sortlistinhtml.js * contribsrange|contribsrange.js * navpop|navpop.js|navpop.css * wiked|wiked.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * betterbottomtabs|btabs.css|btabs.js * bottomtabs|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * SpecialSearch|SpecialSearch.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * Welcome|wknightcore.js|Welcome.js * JSL|JSL.js * GetCollection|collectionparser.js == admin-gadgets == * modrollback|modrollback.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * CleanDeleteReasons|CleanDeleteReasons.js * twinklespeedy|morebits.js|twinklespeedy.js * getmoredata|getmoredata.js * massblock|massblock.js|blockoptions.js 7oew2fneeukm1edxyq5oahoflhntphe 14412 14411 2009-01-13T17:51:57Z Mike.lifeguard 117 Undo revision 1378171 by [[Special:Contributions/Mike.lifeguard|Mike.lifeguard]] ([[User talk:Mike.lifeguard|Talk]]) 14412 wikitext text/x-wiki == interface == * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js * Twinkleunlink|morebits.js|twinkleunlink.js * rightsfilter|rightsfilter.js * sortlistinhtml|sortlistinhtml.js * contribsrange|contribsrange.js * navpop|navpop.js|navpop.css * wiked|wiked.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * betterbottomtabs|btabs.css|btabs.js * bottomtabs|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * SpecialSearch|SpecialSearch.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * Welcome|wknightcore.js|Welcome.js * JSL|JSL.js * GetCollection|collectionparser.js == admin-gadgets == * modrollback|modrollback.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * CleanDeleteReasons|CleanDeleteReasons.js * twinklespeedy|morebits.js|twinklespeedy.js * getmoredata|getmoredata.js * massblock|massblock.js|blockoptions.js fmffaeusl23t7qgm5p3pctth31s7uq4 14413 14412 2009-05-10T23:04:31Z Darklama 2894 +1 14413 wikitext text/x-wiki == interface == * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js * Twinkleunlink|morebits.js|twinkleunlink.js * rightsfilter|rightsfilter.js * sortlistinhtml|sortlistinhtml.js * contribsrange|contribsrange.js * navpop|navpop.js|navpop.css * wiked|wiked.js * colorcats|category-colorcode.css == tab-gadgets == * purge|purge.js * edittop|edittop.js * betterbottomtabs|btabs.css|btabs.js * bottomtabs|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * SpecialSearch|SpecialSearch.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * Welcome|wknightcore.js|Welcome.js * JSL|JSL.js * GetCollection|collectionparser.js == admin-gadgets == * modrollback|modrollback.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * CleanDeleteReasons|CleanDeleteReasons.js * twinklespeedy|morebits.js|twinklespeedy.js * getmoredata|getmoredata.js * massblock|massblock.js|blockoptions.js 7uymohft2q5pl9wg7qrpxp5m1lynroy 14414 14413 2009-05-21T18:51:16Z Darklama 2894 +missing style 14414 wikitext text/x-wiki == interface == * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js * Twinkleunlink|morebits.js|twinkleunlink.js * rightsfilter|rightsfilter.js * sortlistinhtml|sortlistinhtml.js * contribsrange|contribsrange.js * navpop|navpop.js|navpop.css * wiked|wiked.js * colorcats|category-colorcode.css == tab-gadgets == * purge|purge.js * edittop|edittop.js * betterbottomtabs|btabs.css|btabs.js * bottomtabs|btabs.css|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * SpecialSearch|SpecialSearch.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * Welcome|wknightcore.js|Welcome.js * JSL|JSL.js * GetCollection|collectionparser.js == admin-gadgets == * modrollback|modrollback.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * CleanDeleteReasons|CleanDeleteReasons.js * twinklespeedy|morebits.js|twinklespeedy.js * getmoredata|getmoredata.js * massblock|massblock.js|blockoptions.js 11olnd9lfouqznwhsmtr3a2xt5204sx 14415 14414 2009-05-21T19:51:02Z Darklama 2894 rm btabs, bottomtabs should work in IE now... 14415 wikitext text/x-wiki == interface == * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js * Twinkleunlink|morebits.js|twinkleunlink.js * rightsfilter|rightsfilter.js * sortlistinhtml|sortlistinhtml.js * contribsrange|contribsrange.js * navpop|navpop.js|navpop.css * wiked|wiked.js * colorcats|category-colorcode.css == tab-gadgets == * purge|purge.js * edittop|edittop.js * bottomtabs|btabs.css|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * SpecialSearch|SpecialSearch.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * Welcome|wknightcore.js|Welcome.js * JSL|JSL.js * GetCollection|collectionparser.js == admin-gadgets == * modrollback|modrollback.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * CleanDeleteReasons|CleanDeleteReasons.js * twinklespeedy|morebits.js|twinklespeedy.js * getmoredata|getmoredata.js * massblock|massblock.js|blockoptions.js 0vfpdalqi8rj5ud344v45z7vrc808o4 14416 14415 2009-12-16T17:04:48Z Adrignola 502 hide fundraising notice option 14416 wikitext text/x-wiki == interface == * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js * Twinkleunlink|morebits.js|twinkleunlink.js * rightsfilter|rightsfilter.js * sortlistinhtml|sortlistinhtml.js * contribsrange|contribsrange.js * navpop|navpop.js|navpop.css * wiked|wiked.js * colorcats|category-colorcode.css * HideFundraisingNotice|HideFundraisingNotice.css == tab-gadgets == * purge|purge.js * edittop|edittop.js * bottomtabs|btabs.css|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * SpecialSearch|SpecialSearch.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * Welcome|wknightcore.js|Welcome.js * JSL|JSL.js * GetCollection|collectionparser.js == admin-gadgets == * modrollback|modrollback.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * CleanDeleteReasons|CleanDeleteReasons.js * twinklespeedy|morebits.js|twinklespeedy.js * getmoredata|getmoredata.js * massblock|massblock.js|blockoptions.js 9nygeyfh309gyzifb4al7www4k0qmae 14417 14416 2010-01-11T16:07:55Z Adrignola 502 /* interface */ fundraising notice done 14417 wikitext text/x-wiki == interface == * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js * Twinkleunlink|morebits.js|twinkleunlink.js * rightsfilter|rightsfilter.js * sortlistinhtml|sortlistinhtml.js * contribsrange|contribsrange.js * navpop|navpop.js|navpop.css * wiked|wiked.js * colorcats|category-colorcode.css == tab-gadgets == * purge|purge.js * edittop|edittop.js * bottomtabs|btabs.css|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * SpecialSearch|SpecialSearch.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * Welcome|wknightcore.js|Welcome.js * JSL|JSL.js * GetCollection|collectionparser.js == admin-gadgets == * modrollback|modrollback.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * CleanDeleteReasons|CleanDeleteReasons.js * twinklespeedy|morebits.js|twinklespeedy.js * getmoredata|getmoredata.js * massblock|massblock.js|blockoptions.js 0vfpdalqi8rj5ud344v45z7vrc808o4 14418 14417 2010-01-26T15:29:59Z Adrignola 502 /* interface */ comments in local time gadget 14418 wikitext text/x-wiki == interface == * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * extlinks|extlinks.js * Twinklerevert|morebits.js|twinklefluff.js * Twinkleunlink|morebits.js|twinkleunlink.js * rightsfilter|rightsfilter.js * sortlistinhtml|sortlistinhtml.js * contribsrange|contribsrange.js * navpop|navpop.js|navpop.css * wiked|wiked.js * colorcats|category-colorcode.css * CommentsInLocalTime|CommentsInLocalTime.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * bottomtabs|btabs.css|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == other-gadgets == * SpecialSearch|SpecialSearch.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * Welcome|wknightcore.js|Welcome.js * JSL|JSL.js * GetCollection|collectionparser.js == admin-gadgets == * modrollback|modrollback.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * CleanDeleteReasons|CleanDeleteReasons.js * twinklespeedy|morebits.js|twinklespeedy.js * getmoredata|getmoredata.js * massblock|massblock.js|blockoptions.js 1fhlzmw4j5ivjvcggt5nxpt09fsjmq5 14419 14418 2010-01-26T16:34:39Z Adrignola 502 revising sections 14419 wikitext text/x-wiki == interface == === browse-gadgets === * SpecialSearch|SpecialSearch.js * rightsfilter|rightsfilter.js * sortlistinhtml|sortlistinhtml.js * contribsrange|contribsrange.js * colorcats|category-colorcode.css * CommentsInLocalTime|CommentsInLocalTime.js * JSL|JSL.js === edit-gadgets === * wiked|wiked.js * Welcome|wknightcore.js|Welcome.js * Twinklerevert|morebits.js|twinklefluff.js === book-gadgets=== * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js === tab-gadgets === * purge|purge.js * edittop|edittop.js * bottomtabs|btabs.css|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js === link-gadgets === * extlinks|extlinks.js * navpop|navpop.js|navpop.css * Twinkleunlink|morebits.js|twinkleunlink.js == admin-gadgets == * modrollback|modrollback.js * getmoredata|getmoredata.js * massblock|massblock.js|blockoptions.js === delete-gadgets === * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * CleanDeleteReasons|CleanDeleteReasons.js * twinklespeedy|morebits.js|twinklespeedy.js f8t6whm15oog3euuvxfsbj16aa3ktqa 14420 14419 2010-01-26T16:36:21Z Adrignola 502 fixed headings 14420 wikitext text/x-wiki == browse-gadgets == * SpecialSearch|SpecialSearch.js * rightsfilter|rightsfilter.js * sortlistinhtml|sortlistinhtml.js * contribsrange|contribsrange.js * colorcats|category-colorcode.css * CommentsInLocalTime|CommentsInLocalTime.js * JSL|JSL.js == edit-gadgets == * wiked|wiked.js * Welcome|wknightcore.js|Welcome.js * Twinklerevert|morebits.js|twinklefluff.js == book-gadgets== * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * bottomtabs|btabs.css|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == link-gadgets == * extlinks|extlinks.js * navpop|navpop.js|navpop.css * Twinkleunlink|morebits.js|twinkleunlink.js == admin-gadgets == * modrollback|modrollback.js * getmoredata|getmoredata.js * massblock|massblock.js|blockoptions.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * CleanDeleteReasons|CleanDeleteReasons.js * twinklespeedy|morebits.js|twinklespeedy.js jw4mnibin0wf1pot5tprlza59u0bsqx 14421 14420 2010-04-09T22:48:36Z Darklama 2894 rm gadget, dpl now supports sorting alphabetically natively 14421 wikitext text/x-wiki == browse-gadgets == * SpecialSearch|SpecialSearch.js * rightsfilter|rightsfilter.js * contribsrange|contribsrange.js * colorcats|category-colorcode.css * CommentsInLocalTime|CommentsInLocalTime.js * JSL|JSL.js == edit-gadgets == * wiked|wiked.js * Welcome|wknightcore.js|Welcome.js * Twinklerevert|morebits.js|twinklefluff.js == book-gadgets== * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * bottomtabs|btabs.css|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == link-gadgets == * extlinks|extlinks.js * navpop|navpop.js|navpop.css * Twinkleunlink|morebits.js|twinkleunlink.js == admin-gadgets == * modrollback|modrollback.js * getmoredata|getmoredata.js * massblock|massblock.js|blockoptions.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * CleanDeleteReasons|CleanDeleteReasons.js * twinklespeedy|morebits.js|twinklespeedy.js r27dywz6ta54nwszat26nd9vdas7bmr 14422 14421 2010-05-12T01:37:58Z Mike.lifeguard 117 /* browse-gadgets */ +1 14422 wikitext text/x-wiki == browse-gadgets == * SpecialSearch|SpecialSearch.js * rightsfilter|rightsfilter.js * contribsrange|contribsrange.js * colorcats|category-colorcode.css * CommentsInLocalTime|CommentsInLocalTime.js * JSL|JSL.js *background-awesomeness.css|background-awesomeness == edit-gadgets == * wiked|wiked.js * Welcome|wknightcore.js|Welcome.js * Twinklerevert|morebits.js|twinklefluff.js == book-gadgets== * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * bottomtabs|btabs.css|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == link-gadgets == * extlinks|extlinks.js * navpop|navpop.js|navpop.css * Twinkleunlink|morebits.js|twinkleunlink.js == admin-gadgets == * modrollback|modrollback.js * getmoredata|getmoredata.js * massblock|massblock.js|blockoptions.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * CleanDeleteReasons|CleanDeleteReasons.js * twinklespeedy|morebits.js|twinklespeedy.js qt2e0ah5tm7vsa3mrz59lyfaayk5ccu 14423 14422 2010-05-12T01:39:26Z Mike.lifeguard 117 oops 14423 wikitext text/x-wiki == browse-gadgets == * SpecialSearch|SpecialSearch.js * rightsfilter|rightsfilter.js * contribsrange|contribsrange.js * colorcats|category-colorcode.css * CommentsInLocalTime|CommentsInLocalTime.js * JSL|JSL.js * background-awesomeness|background-awesomeness.css == edit-gadgets == * wiked|wiked.js * Welcome|wknightcore.js|Welcome.js * Twinklerevert|morebits.js|twinklefluff.js == book-gadgets== * Perbook|predef.js|Perbook.js * Personalper|predef.js|Personalper.js * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * bottomtabs|btabs.css|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == link-gadgets == * extlinks|extlinks.js * navpop|navpop.js|navpop.css * Twinkleunlink|morebits.js|twinkleunlink.js == admin-gadgets == * modrollback|modrollback.js * getmoredata|getmoredata.js * massblock|massblock.js|blockoptions.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * CleanDeleteReasons|CleanDeleteReasons.js * twinklespeedy|morebits.js|twinklespeedy.js 6id6vrwu0r57kfh7tj3gap9869sr1ze 14424 14423 2010-06-23T14:01:53Z Adrignola 502 /* book-gadgets */ removed gadgets now in [[MediaWiki:Common.js/Perbook.js]] 14424 wikitext text/x-wiki == browse-gadgets == * SpecialSearch|SpecialSearch.js * rightsfilter|rightsfilter.js * contribsrange|contribsrange.js * colorcats|category-colorcode.css * CommentsInLocalTime|CommentsInLocalTime.js * JSL|JSL.js * background-awesomeness|background-awesomeness.css == edit-gadgets == * wiked|wiked.js * Welcome|wknightcore.js|Welcome.js * Twinklerevert|morebits.js|twinklefluff.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * bottomtabs|btabs.css|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == link-gadgets == * extlinks|extlinks.js * navpop|navpop.js|navpop.css * Twinkleunlink|morebits.js|twinkleunlink.js == admin-gadgets == * modrollback|modrollback.js * getmoredata|getmoredata.js * massblock|massblock.js|blockoptions.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * CleanDeleteReasons|CleanDeleteReasons.js * twinklespeedy|morebits.js|twinklespeedy.js mojgem64raj6765q7oyz733rdoe9vvg 14425 14424 2010-06-23T14:28:13Z Adrignola 502 reordered 14425 wikitext text/x-wiki == browse-gadgets == * SpecialSearch|SpecialSearch.js * rightsfilter|rightsfilter.js * contribsrange|contribsrange.js * colorcats|category-colorcode.css * CommentsInLocalTime|CommentsInLocalTime.js * JSL|JSL.js * background-awesomeness|background-awesomeness.css == edit-gadgets == * wiked|wiked.js * Welcome|wknightcore.js|Welcome.js * Twinklerevert|morebits.js|twinklefluff.js * twinklespeedy|morebits.js|twinklespeedy.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * bottomtabs|btabs.css|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == link-gadgets == * extlinks|extlinks.js * navpop|navpop.js|navpop.css * Twinkleunlink|morebits.js|twinkleunlink.js == admin-gadgets == * modrollback|modrollback.js * getmoredata|getmoredata.js * massblock|massblock.js|blockoptions.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * CleanDeleteReasons|CleanDeleteReasons.js hsd283kegz52y8g4i6bbeiqe001u8fr 14426 14425 2010-06-29T18:53:31Z Adrignola 502 /* edit-gadgets */ Twinkle warning gadget 14426 wikitext text/x-wiki == browse-gadgets == * SpecialSearch|SpecialSearch.js * rightsfilter|rightsfilter.js * contribsrange|contribsrange.js * colorcats|category-colorcode.css * CommentsInLocalTime|CommentsInLocalTime.js * JSL|JSL.js * background-awesomeness|background-awesomeness.css == edit-gadgets == * wiked|wiked.js * Welcome|wknightcore.js|Welcome.js * Twinklerevert|morebits.js|twinklefluff.js * twinklespeedy|morebits.js|twinklespeedy.js * twinklewarn|morebits.js|twinklewarn.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * bottomtabs|btabs.css|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == link-gadgets == * extlinks|extlinks.js * navpop|navpop.js|navpop.css * Twinkleunlink|morebits.js|twinkleunlink.js == admin-gadgets == * modrollback|modrollback.js * getmoredata|getmoredata.js * massblock|massblock.js|blockoptions.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * CleanDeleteReasons|CleanDeleteReasons.js hmtvl1m40v4sdd6cqu4mlajatp7mp88 14427 14426 2010-07-29T02:57:56Z Adrignola 502 /* tab-gadgets */ show all Vector tabs gadget 14427 wikitext text/x-wiki == browse-gadgets == * SpecialSearch|SpecialSearch.js * rightsfilter|rightsfilter.js * contribsrange|contribsrange.js * colorcats|category-colorcode.css * CommentsInLocalTime|CommentsInLocalTime.js * JSL|JSL.js * background-awesomeness|background-awesomeness.css == edit-gadgets == * wiked|wiked.js * Welcome|wknightcore.js|Welcome.js * Twinklerevert|morebits.js|twinklefluff.js * twinklespeedy|morebits.js|twinklespeedy.js * twinklewarn|morebits.js|twinklewarn.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * vectorTabs|vectorTabs.js * bottomtabs|btabs.css|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == link-gadgets == * extlinks|extlinks.js * navpop|navpop.js|navpop.css * Twinkleunlink|morebits.js|twinkleunlink.js == admin-gadgets == * modrollback|modrollback.js * getmoredata|getmoredata.js * massblock|massblock.js|blockoptions.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * CleanDeleteReasons|CleanDeleteReasons.js bjor6l1c0iwqiu9q7diga7np6ncxlb9 14428 14427 2010-07-29T03:18:26Z Adrignola 502 remove last addition; doesn't work with Twinkle 14428 wikitext text/x-wiki == browse-gadgets == * SpecialSearch|SpecialSearch.js * rightsfilter|rightsfilter.js * contribsrange|contribsrange.js * colorcats|category-colorcode.css * CommentsInLocalTime|CommentsInLocalTime.js * JSL|JSL.js * background-awesomeness|background-awesomeness.css == edit-gadgets == * wiked|wiked.js * Welcome|wknightcore.js|Welcome.js * Twinklerevert|morebits.js|twinklefluff.js * twinklespeedy|morebits.js|twinklespeedy.js * twinklewarn|morebits.js|twinklewarn.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * bottomtabs|btabs.css|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == link-gadgets == * extlinks|extlinks.js * navpop|navpop.js|navpop.css * Twinkleunlink|morebits.js|twinkleunlink.js == admin-gadgets == * modrollback|modrollback.js * getmoredata|getmoredata.js * massblock|massblock.js|blockoptions.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * CleanDeleteReasons|CleanDeleteReasons.js hmtvl1m40v4sdd6cqu4mlajatp7mp88 14429 14428 2010-08-19T12:13:45Z Adrignola 502 additional for sidebar interwiki translation 14429 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime|CommentsInLocalTime.js * sidebartranslate|sidebartranslate.js * SpecialSearch|SpecialSearch.js * rightsfilter|rightsfilter.js * contribsrange|contribsrange.js * colorcats|category-colorcode.css * JSL|JSL.js * background-awesomeness|background-awesomeness.css == edit-gadgets == * wiked|wiked.js * Welcome|wknightcore.js|Welcome.js * Twinklerevert|morebits.js|twinklefluff.js * twinklespeedy|morebits.js|twinklespeedy.js * twinklewarn|morebits.js|twinklewarn.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * bottomtabs|btabs.css|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == link-gadgets == * extlinks|extlinks.js * navpop|navpop.js|navpop.css * Twinkleunlink|morebits.js|twinkleunlink.js == admin-gadgets == * modrollback|modrollback.js * getmoredata|getmoredata.js * massblock|massblock.js|blockoptions.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * CleanDeleteReasons|CleanDeleteReasons.js 6vynmrl02ptfzimn5e1003olhzm7btj 14430 14429 2010-11-11T17:11:29Z Adrignola 502 -ajax sysop 14430 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime|CommentsInLocalTime.js * sidebartranslate|sidebartranslate.js * SpecialSearch|SpecialSearch.js * rightsfilter|rightsfilter.js * contribsrange|contribsrange.js * colorcats|category-colorcode.css * JSL|JSL.js * background-awesomeness|background-awesomeness.css == edit-gadgets == * wiked|wiked.js * Welcome|wknightcore.js|Welcome.js * Twinklerevert|morebits.js|twinklefluff.js * twinklespeedy|morebits.js|twinklespeedy.js * twinklewarn|morebits.js|twinklewarn.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * bottomtabs|btabs.css|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == link-gadgets == * extlinks|extlinks.js * navpop|navpop.js|navpop.css * Twinkleunlink|morebits.js|twinkleunlink.js == admin-gadgets == * modrollback|modrollback.js * massblock|massblock.js|blockoptions.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * CleanDeleteReasons|CleanDeleteReasons.js qb4wwdqc77gjvfm9r2pdlt5shwp2ns4 14431 14430 2010-11-13T13:28:06Z Adrignola 502 subpages.js 14431 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime|CommentsInLocalTime.js * sidebartranslate|sidebartranslate.js * SpecialSearch|SpecialSearch.js * rightsfilter|rightsfilter.js * contribsrange|contribsrange.js * colorcats|category-colorcode.css * JSL|JSL.js * background-awesomeness|background-awesomeness.css == edit-gadgets == * wiked|wiked.js * Welcome|wknightcore.js|Welcome.js * Twinklerevert|morebits.js|twinklefluff.js * twinklespeedy|morebits.js|twinklespeedy.js * twinklewarn|morebits.js|twinklewarn.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * bottomtabs|btabs.css|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == link-gadgets == * extlinks|extlinks.js * navpop|navpop.js|navpop.css * Twinkleunlink|morebits.js|twinkleunlink.js == admin-gadgets == * modrollback|modrollback.js * subpages|subpages.js * massblock|massblock.js|blockoptions.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * CleanDeleteReasons|CleanDeleteReasons.js 0glmzgon22jl3m3mtiqdz45uje24m73 14432 14431 2010-11-23T23:15:13Z Darklama 2894 /* browse-gadgets */ +1 14432 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime|CommentsInLocalTime.js * sidebartranslate|sidebartranslate.js * SpecialSearch|SpecialSearch.js * rightsfilter|rightsfilter.js * contribsrange|contribsrange.js * colorcats|category-colorcode.css * JSL|JSL.js * background-awesomeness|background-awesomeness.css * subject-pages|subjects.css|subjects.js == edit-gadgets == * wiked|wiked.js * Welcome|wknightcore.js|Welcome.js * Twinklerevert|morebits.js|twinklefluff.js * twinklespeedy|morebits.js|twinklespeedy.js * twinklewarn|morebits.js|twinklewarn.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * bottomtabs|btabs.css|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == link-gadgets == * extlinks|extlinks.js * navpop|navpop.js|navpop.css * Twinkleunlink|morebits.js|twinkleunlink.js == admin-gadgets == * modrollback|modrollback.js * subpages|subpages.js * massblock|massblock.js|blockoptions.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * CleanDeleteReasons|CleanDeleteReasons.js 80qtnwazr902lb3di1hn3oz3x5zlyu5 14433 14432 2010-12-02T17:25:48Z Adrignola 502 /* browse-gadgets */ hide fundraising notice gadget 14433 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime|CommentsInLocalTime.js * sidebartranslate|sidebartranslate.js * SpecialSearch|SpecialSearch.js * rightsfilter|rightsfilter.js * contribsrange|contribsrange.js * colorcats|category-colorcode.css * JSL|JSL.js * background-awesomeness|background-awesomeness.css * subject-pages|subjects.css|subjects.js * HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css == edit-gadgets == * wiked|wiked.js * Welcome|wknightcore.js|Welcome.js * Twinklerevert|morebits.js|twinklefluff.js * twinklespeedy|morebits.js|twinklespeedy.js * twinklewarn|morebits.js|twinklewarn.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * bottomtabs|btabs.css|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == link-gadgets == * extlinks|extlinks.js * navpop|navpop.js|navpop.css * Twinkleunlink|morebits.js|twinkleunlink.js == admin-gadgets == * modrollback|modrollback.js * subpages|subpages.js * massblock|massblock.js|blockoptions.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * CleanDeleteReasons|CleanDeleteReasons.js 82zaagwbe2aso8izdi6ccrxg094xzvv 14434 14433 2011-01-08T01:48:23Z Adrignola 502 comment out fundraising notice hider 14434 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime|CommentsInLocalTime.js * sidebartranslate|sidebartranslate.js * SpecialSearch|SpecialSearch.js * rightsfilter|rightsfilter.js * contribsrange|contribsrange.js * colorcats|category-colorcode.css * JSL|JSL.js * background-awesomeness|background-awesomeness.css * subject-pages|subjects.css|subjects.js <!--* HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css--> == edit-gadgets == * wiked|wiked.js * Welcome|wknightcore.js|Welcome.js * Twinklerevert|morebits.js|twinklefluff.js * twinklespeedy|morebits.js|twinklespeedy.js * twinklewarn|morebits.js|twinklewarn.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * bottomtabs|btabs.css|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == link-gadgets == * extlinks|extlinks.js * navpop|navpop.js|navpop.css * Twinkleunlink|morebits.js|twinkleunlink.js == admin-gadgets == * modrollback|modrollback.js * subpages|subpages.js * massblock|massblock.js|blockoptions.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * CleanDeleteReasons|CleanDeleteReasons.js 1ncbsx9hmrxfn3uqiahxlmy2wtstaoi 14435 14434 2011-02-27T13:59:50Z Darklama 2894 /* tab-gadgets */ reflect rename 14435 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime|CommentsInLocalTime.js * sidebartranslate|sidebartranslate.js * SpecialSearch|SpecialSearch.js * rightsfilter|rightsfilter.js * contribsrange|contribsrange.js * colorcats|category-colorcode.css * JSL|JSL.js * background-awesomeness|background-awesomeness.css * subject-pages|subjects.css|subjects.js <!--* HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css--> == edit-gadgets == * wiked|wiked.js * Welcome|wknightcore.js|Welcome.js * Twinklerevert|morebits.js|twinklefluff.js * twinklespeedy|morebits.js|twinklespeedy.js * twinklewarn|morebits.js|twinklewarn.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * bottomtabs|bottomtabs.css|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == link-gadgets == * extlinks|extlinks.js * navpop|navpop.js|navpop.css * Twinkleunlink|morebits.js|twinkleunlink.js == admin-gadgets == * modrollback|modrollback.js * subpages|subpages.js * massblock|massblock.js|blockoptions.js * autodel|autodel.js * twinkledelimages|morebits.js|twinkledelimages.js * EnhancedUndelete|EnhancedUndelete.js * CleanDeleteReasons|CleanDeleteReasons.js lauyydq6e3mh04iak5s9l4za1g33nlh 14436 14435 2011-06-23T15:08:21Z Adrignola 502 /* admin-gadgets */ hide gadgets for those without the rights 14436 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime|CommentsInLocalTime.js * sidebartranslate|sidebartranslate.js * SpecialSearch|SpecialSearch.js * rightsfilter|rightsfilter.js * contribsrange|contribsrange.js * colorcats|category-colorcode.css * JSL|JSL.js * background-awesomeness|background-awesomeness.css * subject-pages|subjects.css|subjects.js <!--* HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css--> == edit-gadgets == * wiked|wiked.js * Welcome|wknightcore.js|Welcome.js * Twinklerevert|morebits.js|twinklefluff.js * twinklespeedy|morebits.js|twinklespeedy.js * twinklewarn|morebits.js|twinklewarn.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * bottomtabs|bottomtabs.css|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == link-gadgets == * extlinks|extlinks.js * navpop|navpop.js|navpop.css * Twinkleunlink|morebits.js|twinkleunlink.js == admin-gadgets == * modrollback[rights=rollback]|modrollback.js * subpages[rights=delete]|subpages.js * massblock[rights=block]|massblock.js|blockoptions.js * autodel[rights=delete]|autodel.js * twinkledelimages[rights=delete]|morebits.js|twinkledelimages.js * EnhancedUndelete[rights=delete]|EnhancedUndelete.js * CleanDeleteReasons[rights=delete]|CleanDeleteReasons.js 75ls0isld0f6bov7lx3gl4449bdb3l3 14437 14436 2011-08-17T00:02:26Z Darklama 2894 /* link-gadgets */ +1 14437 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime|CommentsInLocalTime.js * sidebartranslate|sidebartranslate.js * SpecialSearch|SpecialSearch.js * rightsfilter|rightsfilter.js * contribsrange|contribsrange.js * colorcats|category-colorcode.css * JSL|JSL.js * background-awesomeness|background-awesomeness.css * subject-pages|subjects.css|subjects.js <!--* HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css--> == edit-gadgets == * wiked|wiked.js * Welcome|wknightcore.js|Welcome.js * Twinklerevert|morebits.js|twinklefluff.js * twinklespeedy|morebits.js|twinklespeedy.js * twinklewarn|morebits.js|twinklewarn.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * bottomtabs|bottomtabs.css|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == link-gadgets == * extlinks|extlinks.js * navpop|navpop.js|navpop.css * Twinkleunlink|morebits.js|twinkleunlink.js * commons-file|commons-file.js == admin-gadgets == * modrollback[rights=rollback]|modrollback.js * subpages[rights=delete]|subpages.js * massblock[rights=block]|massblock.js|blockoptions.js * autodel[rights=delete]|autodel.js * twinkledelimages[rights=delete]|morebits.js|twinkledelimages.js * EnhancedUndelete[rights=delete]|EnhancedUndelete.js * CleanDeleteReasons[rights=delete]|CleanDeleteReasons.js avzddqpnddor3e2zkw4nit4am9n3xn9 14438 14437 2011-08-17T00:05:37Z Darklama 2894 /* link-gadgets */ turn commons links on by default 14438 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime|CommentsInLocalTime.js * sidebartranslate|sidebartranslate.js * SpecialSearch|SpecialSearch.js * rightsfilter|rightsfilter.js * contribsrange|contribsrange.js * colorcats|category-colorcode.css * JSL|JSL.js * background-awesomeness|background-awesomeness.css * subject-pages|subjects.css|subjects.js <!--* HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css--> == edit-gadgets == * wiked|wiked.js * Welcome|wknightcore.js|Welcome.js * Twinklerevert|morebits.js|twinklefluff.js * twinklespeedy|morebits.js|twinklespeedy.js * twinklewarn|morebits.js|twinklewarn.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * bottomtabs|bottomtabs.css|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == link-gadgets == * extlinks|extlinks.js * navpop|navpop.js|navpop.css * Twinkleunlink|morebits.js|twinkleunlink.js * commons-file[default]|commons-file.js == admin-gadgets == * modrollback[rights=rollback]|modrollback.js * subpages[rights=delete]|subpages.js * massblock[rights=block]|massblock.js|blockoptions.js * autodel[rights=delete]|autodel.js * twinkledelimages[rights=delete]|morebits.js|twinkledelimages.js * EnhancedUndelete[rights=delete]|EnhancedUndelete.js * CleanDeleteReasons[rights=delete]|CleanDeleteReasons.js lf53ox2manqu4sqcjc02htf8crzrcq0 14439 14438 2011-08-28T17:31:02Z Darklama 2894 /* edit-gadgets */ +toolbox compatibility layer 14439 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime|CommentsInLocalTime.js * sidebartranslate|sidebartranslate.js * SpecialSearch|SpecialSearch.js * rightsfilter|rightsfilter.js * contribsrange|contribsrange.js * colorcats|category-colorcode.css * JSL|JSL.js * background-awesomeness|background-awesomeness.css * subject-pages|subjects.css|subjects.js <!--* HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css--> == edit-gadgets == * wiked|wiked.js * Welcome|wknightcore.js|Welcome.js * Twinklerevert|morebits.js|twinklefluff.js * twinklespeedy|morebits.js|twinklespeedy.js * twinklewarn|morebits.js|twinklewarn.js * toolboxcompat[default]|toolboxcompat.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge|purge.js * edittop|edittop.js * bottomtabs|bottomtabs.css|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == link-gadgets == * extlinks|extlinks.js * navpop|navpop.js|navpop.css * Twinkleunlink|morebits.js|twinkleunlink.js * commons-file[default]|commons-file.js == admin-gadgets == * modrollback[rights=rollback]|modrollback.js * subpages[rights=delete]|subpages.js * massblock[rights=block]|massblock.js|blockoptions.js * autodel[rights=delete]|autodel.js * twinkledelimages[rights=delete]|morebits.js|twinkledelimages.js * EnhancedUndelete[rights=delete]|EnhancedUndelete.js * CleanDeleteReasons[rights=delete]|CleanDeleteReasons.js srtz67fw45jq7iqk6x34yawrixstlb7 14440 14439 2011-08-29T15:21:42Z Darklama 2894 rm links section, moved gadgets to other sections 14440 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime|CommentsInLocalTime.js * sidebartranslate|sidebartranslate.js * SpecialSearch|SpecialSearch.js * rightsfilter|rightsfilter.js * contribsrange|contribsrange.js * colorcats|category-colorcode.css * JSL|JSL.js * background-awesomeness|background-awesomeness.css * subject-pages|subjects.css|subjects.js * extlinks|extlinks.js * navpop|navpop.js|navpop.css * commons-file[default]|commons-file.js <!--* HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css--> == edit-gadgets == * wiked|wiked.js * Welcome|wknightcore.js|Welcome.js * Twinklerevert|morebits.js|twinklefluff.js * twinklespeedy|morebits.js|twinklespeedy.js * twinklewarn|morebits.js|twinklewarn.js * Twinkleunlink|morebits.js|twinkleunlink.js * toolboxcompat[default]|toolboxcompat.js * edittop|edittop.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge|purge.js * bottomtabs|bottomtabs.css|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == admin-gadgets == * modrollback[rights=rollback]|modrollback.js * subpages[rights=delete]|subpages.js * massblock[rights=block]|massblock.js|blockoptions.js * autodel[rights=delete]|autodel.js * twinkledelimages[rights=delete]|morebits.js|twinkledelimages.js * EnhancedUndelete[rights=delete]|EnhancedUndelete.js * CleanDeleteReasons[rights=delete]|CleanDeleteReasons.js cduoqmnx6vhortckgflhlrudc4n1d8m 14441 14440 2011-10-07T17:28:30Z Darklama 2894 rm gadget now core functionality 14441 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime|CommentsInLocalTime.js * sidebartranslate|sidebartranslate.js * SpecialSearch|SpecialSearch.js * rightsfilter|rightsfilter.js * contribsrange|contribsrange.js * colorcats|category-colorcode.css * JSL|JSL.js * background-awesomeness|background-awesomeness.css * subject-pages|subjects.css|subjects.js * extlinks|extlinks.js * navpop|navpop.js|navpop.css * commons-file[default]|commons-file.js <!--* HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css--> == edit-gadgets == * wiked|wiked.js * Welcome|wknightcore.js|Welcome.js * Twinklerevert|morebits.js|twinklefluff.js * twinklespeedy|morebits.js|twinklespeedy.js * twinklewarn|morebits.js|twinklewarn.js * Twinkleunlink|morebits.js|twinkleunlink.js * toolboxcompat[default]|toolboxcompat.js * edittop|edittop.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge|purge.js * bottomtabs|bottomtabs.css|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == admin-gadgets == * modrollback[rights=rollback]|modrollback.js * subpages[rights=delete]|subpages.js * massblock[rights=block]|massblock.js|blockoptions.js * autodel[rights=delete]|autodel.js * twinkledelimages[rights=delete]|morebits.js|twinkledelimages.js * CleanDeleteReasons[rights=delete]|CleanDeleteReasons.js 3xy765ocs92jzni4wsiocf1qakjstxd 14442 14441 2012-02-22T23:27:10Z Darklama 2894 use resourceloader and dependencies for some gadgets 14442 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime|CommentsInLocalTime.js * sidebartranslate|sidebartranslate.js * SpecialSearch|SpecialSearch.js * rightsfilter|rightsfilter.js * contribsrange|contribsrange.js * colorcats|category-colorcode.css * JSL|JSL.js * background-awesomeness|background-awesomeness.css * subject-pages|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop|navpop.js|navpop.css * commons-file[default]|commons-file.js <!--* HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css--> == edit-gadgets == * wiked|wiked.js * Welcome|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|morebits.js|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|morebits.js|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|morebits.js|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|morebits.js|twinkleunlink.js * toolboxcompat[default]|toolboxcompat.js * edittop|edittop.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs|bottomtabs.css|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == admin-gadgets == * modrollback[rights=rollback]|modrollback.js * subpages[rights=delete]|subpages.js * massblock[rights=block]|massblock.js|blockoptions.js * autodel[rights=delete]|autodel.js * twinkledelimages[rights=delete]|morebits.js|twinkledelimages.js * CleanDeleteReasons[rights=delete]|CleanDeleteReasons.js d0jyyebo0jpqwu7awnlsg4u88216syw 14443 14442 2012-05-31T13:59:40Z Darklama 2894 +twinke.css, rename morebits.js -> twinkle.js 14443 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime|CommentsInLocalTime.js * sidebartranslate|sidebartranslate.js * SpecialSearch|SpecialSearch.js * rightsfilter|rightsfilter.js * contribsrange|contribsrange.js * colorcats|category-colorcode.css * JSL|JSL.js * background-awesomeness|background-awesomeness.css * subject-pages|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop|navpop.js|navpop.css * commons-file[default]|commons-file.js <!--* HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css--> == edit-gadgets == * wiked|wiked.js * Welcome|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[default]|toolboxcompat.js * edittop|edittop.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs|bottomtabs.css|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == admin-gadgets == * modrollback[rights=rollback]|modrollback.js * subpages[rights=delete]|subpages.js * massblock[rights=block]|massblock.js|blockoptions.js * autodel[rights=delete]|autodel.js * twinkledelimages[rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * CleanDeleteReasons[rights=delete]|CleanDeleteReasons.js e59nnexkoxadhnmjo1otxeh7nn7ixso 14444 14443 2013-12-19T12:15:03Z Az1568 66 +1 14444 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime|CommentsInLocalTime.js * sidebartranslate|sidebartranslate.js * SpecialSearch|SpecialSearch.js * rightsfilter|rightsfilter.js * contribsrange|contribsrange.js * colorcats|category-colorcode.css * JSL|JSL.js * background-awesomeness|background-awesomeness.css * subject-pages|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop|navpop.js|navpop.css * commons-file[default]|commons-file.js <!--* HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css--> * UTCLiveClock|UTCLiveClock.js == edit-gadgets == * wiked|wiked.js * Welcome|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[default]|toolboxcompat.js * edittop|edittop.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs|bottomtabs.css|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == admin-gadgets == * modrollback[rights=rollback]|modrollback.js * subpages[rights=delete]|subpages.js * massblock[rights=block]|massblock.js|blockoptions.js * autodel[rights=delete]|autodel.js * twinkledelimages[rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * CleanDeleteReasons[rights=delete]|CleanDeleteReasons.js 1tw82oit3eo2sdggx6xs9nf2fs244d3 14445 14444 2014-05-24T18:49:32Z Darklama 2894 /* edit-gadgets */ +sandbox gadget 14445 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime|CommentsInLocalTime.js * sidebartranslate|sidebartranslate.js * SpecialSearch|SpecialSearch.js * rightsfilter|rightsfilter.js * contribsrange|contribsrange.js * colorcats|category-colorcode.css * JSL|JSL.js * background-awesomeness|background-awesomeness.css * subject-pages|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop|navpop.js|navpop.css * commons-file[default]|commons-file.js <!--* HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css--> * UTCLiveClock|UTCLiveClock.js == edit-gadgets == * wiked|wiked.js * Welcome|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[default]|toolboxcompat.js * edittop|edittop.js * mySandbox[ResourceLoader|dependencies=mediawiki.util,mediawiki.Title,mediawiki.Uri|default|rights=createpage]|mySandbox.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs|bottomtabs.css|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == admin-gadgets == * modrollback[rights=rollback]|modrollback.js * subpages[rights=delete]|subpages.js * massblock[rights=block]|massblock.js|blockoptions.js * autodel[rights=delete]|autodel.js * twinkledelimages[rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * CleanDeleteReasons[rights=delete]|CleanDeleteReasons.js ece8vobi7iuqvmntbl3500cj4eavp9k 14446 14445 2014-05-24T19:26:24Z Darklama 2894 /* browse-gadgets */ +Wiktionary hover gadget 14446 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime|CommentsInLocalTime.js * sidebartranslate|sidebartranslate.js * SpecialSearch|SpecialSearch.js * rightsfilter|rightsfilter.js * contribsrange|contribsrange.js * colorcats|category-colorcode.css * JSL|JSL.js * background-awesomeness|background-awesomeness.css * subject-pages|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop|navpop.js|navpop.css * commons-file[default]|commons-file.js <!--* HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css--> * UTCLiveClock|UTCLiveClock.js * dictHover|dictionaryLookupHover.js == edit-gadgets == * wiked|wiked.js * Welcome|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[default]|toolboxcompat.js * edittop|edittop.js * mySandbox[ResourceLoader|dependencies=mediawiki.util,mediawiki.Title,mediawiki.Uri|default|rights=createpage]|mySandbox.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs|bottomtabs.css|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == admin-gadgets == * modrollback[rights=rollback]|modrollback.js * subpages[rights=delete]|subpages.js * massblock[rights=block]|massblock.js|blockoptions.js * autodel[rights=delete]|autodel.js * twinkledelimages[rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * CleanDeleteReasons[rights=delete]|CleanDeleteReasons.js o2nxkimp3hnvu6tt963ym0tcuheq6hc 14447 14446 2014-05-24T19:42:33Z Darklama 2894 should have looked more apparently Wiktionary hover gadget is current broken 14447 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime|CommentsInLocalTime.js * sidebartranslate|sidebartranslate.js * SpecialSearch|SpecialSearch.js * rightsfilter|rightsfilter.js * contribsrange|contribsrange.js * colorcats|category-colorcode.css * JSL|JSL.js * background-awesomeness|background-awesomeness.css * subject-pages|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop|navpop.js|navpop.css * commons-file[default]|commons-file.js <!--* HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css--> * UTCLiveClock|UTCLiveClock.js <!--* dictHover|dictionaryLookupHover.js --> == edit-gadgets == * wiked|wiked.js * Welcome|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[default]|toolboxcompat.js * edittop|edittop.js * mySandbox[ResourceLoader|dependencies=mediawiki.util,mediawiki.Title,mediawiki.Uri|default|rights=createpage]|mySandbox.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs|bottomtabs.css|bottomtabs.js * sixtabs|sixtabs.js * RemoveImageTools|RemoveImageTools.js == admin-gadgets == * modrollback[rights=rollback]|modrollback.js * subpages[rights=delete]|subpages.js * massblock[rights=block]|massblock.js|blockoptions.js * autodel[rights=delete]|autodel.js * twinkledelimages[rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * CleanDeleteReasons[rights=delete]|CleanDeleteReasons.js d97vq4sydulgtvyd3fskrdge8dw9il9 14448 14447 2014-06-05T02:11:05Z Darklama 2894 /* tab-gadgets */ untagged link was removed due to no longer working, gadget to remove link no longer needed 14448 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime|CommentsInLocalTime.js * sidebartranslate|sidebartranslate.js * SpecialSearch|SpecialSearch.js * rightsfilter|rightsfilter.js * contribsrange|contribsrange.js * colorcats|category-colorcode.css * JSL|JSL.js * background-awesomeness|background-awesomeness.css * subject-pages|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop|navpop.js|navpop.css * commons-file[default]|commons-file.js <!--* HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css--> * UTCLiveClock|UTCLiveClock.js <!--* dictHover|dictionaryLookupHover.js --> == edit-gadgets == * wiked|wiked.js * Welcome|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[default]|toolboxcompat.js * edittop|edittop.js * mySandbox[ResourceLoader|dependencies=mediawiki.util,mediawiki.Title,mediawiki.Uri|default|rights=createpage]|mySandbox.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs|bottomtabs.css|bottomtabs.js * sixtabs|sixtabs.js == admin-gadgets == * modrollback[rights=rollback]|modrollback.js * subpages[rights=delete]|subpages.js * massblock[rights=block]|massblock.js|blockoptions.js * autodel[rights=delete]|autodel.js * twinkledelimages[rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * CleanDeleteReasons[rights=delete]|CleanDeleteReasons.js nasth95vzqrkc3m3i7dxmubwd5hvl9l 14449 14448 2014-06-05T03:28:18Z Darklama 2894 /* edit-gadgets */ use ResourceLoader for Welcome gadget 14449 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime|CommentsInLocalTime.js * sidebartranslate|sidebartranslate.js * SpecialSearch|SpecialSearch.js * rightsfilter|rightsfilter.js * contribsrange|contribsrange.js * colorcats|category-colorcode.css * JSL|JSL.js * background-awesomeness|background-awesomeness.css * subject-pages|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop|navpop.js|navpop.css * commons-file[default]|commons-file.js <!--* HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css--> * UTCLiveClock|UTCLiveClock.js <!--* dictHover|dictionaryLookupHover.js --> == edit-gadgets == * wiked|wiked.js * Welcome[ResourceLoader]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[default]|toolboxcompat.js * edittop|edittop.js * mySandbox[ResourceLoader|dependencies=mediawiki.util,mediawiki.Title,mediawiki.Uri|default|rights=createpage]|mySandbox.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs|bottomtabs.css|bottomtabs.js * sixtabs|sixtabs.js == admin-gadgets == * modrollback[rights=rollback]|modrollback.js * subpages[rights=delete]|subpages.js * massblock[rights=block]|massblock.js|blockoptions.js * autodel[rights=delete]|autodel.js * twinkledelimages[rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * CleanDeleteReasons[rights=delete]|CleanDeleteReasons.js 0cvkha8tqlf345li0nad6t5d9rajnqn 14450 14449 2014-06-05T04:16:25Z Darklama 2894 /* edit-gadgets */ add site as dependency for Welcome gadget 14450 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime|CommentsInLocalTime.js * sidebartranslate|sidebartranslate.js * SpecialSearch|SpecialSearch.js * rightsfilter|rightsfilter.js * contribsrange|contribsrange.js * colorcats|category-colorcode.css * JSL|JSL.js * background-awesomeness|background-awesomeness.css * subject-pages|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop|navpop.js|navpop.css * commons-file[default]|commons-file.js <!--* HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css--> * UTCLiveClock|UTCLiveClock.js <!--* dictHover|dictionaryLookupHover.js --> == edit-gadgets == * wiked|wiked.js * Welcome[ResourceLoader|dependencies=site]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[default]|toolboxcompat.js * edittop|edittop.js * mySandbox[ResourceLoader|dependencies=mediawiki.util,mediawiki.Title,mediawiki.Uri|default|rights=createpage]|mySandbox.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs|bottomtabs.css|bottomtabs.js * sixtabs|sixtabs.js == admin-gadgets == * modrollback[rights=rollback]|modrollback.js * subpages[rights=delete]|subpages.js * massblock[rights=block]|massblock.js|blockoptions.js * autodel[rights=delete]|autodel.js * twinkledelimages[rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * CleanDeleteReasons[rights=delete]|CleanDeleteReasons.js 65non2p7phzvn1zpmfdjobt33pr1apv 14451 14450 2014-06-05T04:37:55Z Darklama 2894 /* edit-gadgets */ another dependency for Welcome gadget 14451 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime|CommentsInLocalTime.js * sidebartranslate|sidebartranslate.js * SpecialSearch|SpecialSearch.js * rightsfilter|rightsfilter.js * contribsrange|contribsrange.js * colorcats|category-colorcode.css * JSL|JSL.js * background-awesomeness|background-awesomeness.css * subject-pages|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop|navpop.js|navpop.css * commons-file[default]|commons-file.js <!--* HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css--> * UTCLiveClock|UTCLiveClock.js <!--* dictHover|dictionaryLookupHover.js --> == edit-gadgets == * wiked|wiked.js * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[default]|toolboxcompat.js * edittop|edittop.js * mySandbox[ResourceLoader|dependencies=mediawiki.util,mediawiki.Title,mediawiki.Uri|default|rights=createpage]|mySandbox.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs|bottomtabs.css|bottomtabs.js * sixtabs|sixtabs.js == admin-gadgets == * modrollback[rights=rollback]|modrollback.js * subpages[rights=delete]|subpages.js * massblock[rights=block]|massblock.js|blockoptions.js * autodel[rights=delete]|autodel.js * twinkledelimages[rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * CleanDeleteReasons[rights=delete]|CleanDeleteReasons.js 4tllr680aq9qps70pcep8ikwx3bvoac 14452 14451 2015-04-09T18:28:53Z Matma Rex 1548 disabling the sandbox gadget after deploying SandboxLink extension, see [[phabricator:T72499]]; help and configuration: [[mw:Help:Extension:SandboxLink]] 14452 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime|CommentsInLocalTime.js * sidebartranslate|sidebartranslate.js * SpecialSearch|SpecialSearch.js * rightsfilter|rightsfilter.js * contribsrange|contribsrange.js * colorcats|category-colorcode.css * JSL|JSL.js * background-awesomeness|background-awesomeness.css * subject-pages|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop|navpop.js|navpop.css * commons-file[default]|commons-file.js <!--* HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css--> * UTCLiveClock|UTCLiveClock.js <!--* dictHover|dictionaryLookupHover.js --> == edit-gadgets == * wiked|wiked.js * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[default]|toolboxcompat.js * edittop|edittop.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs|bottomtabs.css|bottomtabs.js * sixtabs|sixtabs.js == admin-gadgets == * modrollback[rights=rollback]|modrollback.js * subpages[rights=delete]|subpages.js * massblock[rights=block]|massblock.js|blockoptions.js * autodel[rights=delete]|autodel.js * twinkledelimages[rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * CleanDeleteReasons[rights=delete]|CleanDeleteReasons.js ifg81wh7nrs3ixw19s8ke7mr2y8808q 14453 14452 2015-04-27T05:10:46Z Az1568 66 /* admin-gadgets */ + * markblocked 14453 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime|CommentsInLocalTime.js * sidebartranslate|sidebartranslate.js * SpecialSearch|SpecialSearch.js * rightsfilter|rightsfilter.js * contribsrange|contribsrange.js * colorcats|category-colorcode.css * JSL|JSL.js * background-awesomeness|background-awesomeness.css * subject-pages|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop|navpop.js|navpop.css * commons-file[default]|commons-file.js <!--* HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css--> * UTCLiveClock|UTCLiveClock.js <!--* dictHover|dictionaryLookupHover.js --> == edit-gadgets == * wiked|wiked.js * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[default]|toolboxcompat.js * edittop|edittop.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs|bottomtabs.css|bottomtabs.js * sixtabs|sixtabs.js == admin-gadgets == * modrollback[rights=rollback]|modrollback.js * subpages[rights=delete]|subpages.js * massblock[rights=block]|massblock.js|blockoptions.js * autodel[rights=delete]|autodel.js * twinkledelimages[rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * CleanDeleteReasons[rights=delete]|CleanDeleteReasons.js * markblocked|markblocked.js ltmxd9slmixnwnxwqku5utjck92me47 14454 14453 2015-08-07T04:27:45Z Pi zero 2546 /* browse-gadgets */ 14454 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime|CommentsInLocalTime.js * sidebartranslate|sidebartranslate.js * SpecialSearch|SpecialSearch.js * rightsfilter|rightsfilter.js * contribsrange|contribsrange.js * colorcats|category-colorcode.css * JSL|JSL.js * background-awesomeness|background-awesomeness.css * subject-pages|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop|navpop.js|navpop.css * commons-file[default]|commons-file.js <!--* HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css--> * UTCLiveClock[ResourceLoader]|UTCLiveClock.js <!--* dictHover|dictionaryLookupHover.js --> == edit-gadgets == * wiked|wiked.js * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[default]|toolboxcompat.js * edittop|edittop.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs|bottomtabs.css|bottomtabs.js * sixtabs|sixtabs.js == admin-gadgets == * modrollback[rights=rollback]|modrollback.js * subpages[rights=delete]|subpages.js * massblock[rights=block]|massblock.js|blockoptions.js * autodel[rights=delete]|autodel.js * twinkledelimages[rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * CleanDeleteReasons[rights=delete]|CleanDeleteReasons.js * markblocked|markblocked.js bjuol4zsry3759a80x9v6bo5j56w5n2 14455 14454 2015-08-15T10:04:11Z Az1568 66 Set [ResourceLoader] for markedblocked 14455 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime|CommentsInLocalTime.js * sidebartranslate|sidebartranslate.js * SpecialSearch|SpecialSearch.js * rightsfilter|rightsfilter.js * contribsrange|contribsrange.js * colorcats|category-colorcode.css * JSL|JSL.js * background-awesomeness|background-awesomeness.css * subject-pages|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop|navpop.js|navpop.css * commons-file[default]|commons-file.js <!--* HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css--> * UTCLiveClock[ResourceLoader]|UTCLiveClock.js <!--* dictHover|dictionaryLookupHover.js --> == edit-gadgets == * wiked|wiked.js * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[default]|toolboxcompat.js * edittop|edittop.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs|bottomtabs.css|bottomtabs.js * sixtabs|sixtabs.js == admin-gadgets == * modrollback[rights=rollback]|modrollback.js * subpages[rights=delete]|subpages.js * massblock[rights=block]|massblock.js|blockoptions.js * autodel[rights=delete]|autodel.js * twinkledelimages[rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * CleanDeleteReasons[rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader]|markblocked.js sly2gt9f9i5b5x2gdnwnzi1tpikx33l 14456 14455 2015-08-15T10:05:45Z Az1568 66 Set [ResourceLoader] for navpops, contribsrange 14456 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime|CommentsInLocalTime.js * sidebartranslate|sidebartranslate.js * SpecialSearch|SpecialSearch.js * rightsfilter|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * colorcats|category-colorcode.css * JSL|JSL.js * background-awesomeness|background-awesomeness.css * subject-pages|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[default]|commons-file.js <!--* HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css--> * UTCLiveClock[ResourceLoader]|UTCLiveClock.js <!--* dictHover|dictionaryLookupHover.js --> == edit-gadgets == * wiked|wiked.js * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[default]|toolboxcompat.js * edittop|edittop.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs|bottomtabs.css|bottomtabs.js * sixtabs|sixtabs.js == admin-gadgets == * modrollback[rights=rollback]|modrollback.js * subpages[rights=delete]|subpages.js * massblock[rights=block]|massblock.js|blockoptions.js * autodel[rights=delete]|autodel.js * twinkledelimages[rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * CleanDeleteReasons[rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader]|markblocked.js 3u6milbmzoskmty6qgc69zx2hq5th3s 14457 14456 2015-08-15T10:15:33Z Az1568 66 /* admin-gadgets */ modrollback [ResourceLoader] 14457 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime|CommentsInLocalTime.js * sidebartranslate|sidebartranslate.js * SpecialSearch|SpecialSearch.js * rightsfilter|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * colorcats|category-colorcode.css * JSL|JSL.js * background-awesomeness|background-awesomeness.css * subject-pages|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[default]|commons-file.js <!--* HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css--> * UTCLiveClock[ResourceLoader]|UTCLiveClock.js <!--* dictHover|dictionaryLookupHover.js --> == edit-gadgets == * wiked|wiked.js * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[default]|toolboxcompat.js * edittop|edittop.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs|bottomtabs.css|bottomtabs.js * sixtabs|sixtabs.js == admin-gadgets == * modrollback[ResourceLoader][rights=rollback]|modrollback.js * subpages[rights=delete]|subpages.js * massblock[rights=block]|massblock.js|blockoptions.js * autodel[rights=delete]|autodel.js * twinkledelimages[rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * CleanDeleteReasons[rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader]|markblocked.js j21fmnugns1iklxlwi48irylepydr2c 14458 14457 2015-08-15T10:16:39Z Az1568 66 fix syntax error 14458 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime|CommentsInLocalTime.js * sidebartranslate|sidebartranslate.js * SpecialSearch|SpecialSearch.js * rightsfilter|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * colorcats|category-colorcode.css * JSL|JSL.js * background-awesomeness|background-awesomeness.css * subject-pages|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[default]|commons-file.js <!--* HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css--> * UTCLiveClock[ResourceLoader]|UTCLiveClock.js <!--* dictHover|dictionaryLookupHover.js --> == edit-gadgets == * wiked|wiked.js * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[default]|toolboxcompat.js * edittop|edittop.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs|bottomtabs.css|bottomtabs.js * sixtabs|sixtabs.js == admin-gadgets == * modrollback[ResourceLoader|rights=rollback]|modrollback.js * subpages[rights=delete]|subpages.js * massblock[rights=block]|massblock.js|blockoptions.js * autodel[rights=delete]|autodel.js * twinkledelimages[rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * CleanDeleteReasons[rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader]|markblocked.js k5w46qje24s5f9cxx0idwzxplb14iqs 14459 14458 2015-08-15T10:19:02Z Az1568 66 /* browse-gadgets */ rightsfilter [ResourceLoader] 14459 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime|CommentsInLocalTime.js * sidebartranslate|sidebartranslate.js * SpecialSearch|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * colorcats|category-colorcode.css * JSL|JSL.js * background-awesomeness|background-awesomeness.css * subject-pages|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[default]|commons-file.js <!--* HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css--> * UTCLiveClock[ResourceLoader]|UTCLiveClock.js <!--* dictHover|dictionaryLookupHover.js --> == edit-gadgets == * wiked|wiked.js * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[default]|toolboxcompat.js * edittop|edittop.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs|bottomtabs.css|bottomtabs.js * sixtabs|sixtabs.js == admin-gadgets == * modrollback[ResourceLoader|rights=rollback]|modrollback.js * subpages[rights=delete]|subpages.js * massblock[rights=block]|massblock.js|blockoptions.js * autodel[rights=delete]|autodel.js * twinkledelimages[rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * CleanDeleteReasons[rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader]|markblocked.js qr4ajlzh78lk31cagz1mqmq3vmpyjtf 14460 14459 2015-08-15T10:27:12Z Az1568 66 /* admin-gadgets */ ResourceLoader for massblock 14460 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime|CommentsInLocalTime.js * sidebartranslate|sidebartranslate.js * SpecialSearch|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * colorcats|category-colorcode.css * JSL|JSL.js * background-awesomeness|background-awesomeness.css * subject-pages|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[default]|commons-file.js <!--* HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css--> * UTCLiveClock[ResourceLoader]|UTCLiveClock.js <!--* dictHover|dictionaryLookupHover.js --> == edit-gadgets == * wiked|wiked.js * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[default]|toolboxcompat.js * edittop|edittop.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs|bottomtabs.css|bottomtabs.js * sixtabs|sixtabs.js == admin-gadgets == * modrollback[ResourceLoader|rights=rollback]|modrollback.js * subpages[rights=delete]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * autodel[rights=delete]|autodel.js * twinkledelimages[rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * CleanDeleteReasons[rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader]|markblocked.js qa2psakdqgkmx8y26t32rjmkufo5cb7 14461 14460 2015-08-15T10:32:49Z Az1568 66 /* admin-gadgets */ CleanDeleteReasons [ResourceLoader] 14461 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime|CommentsInLocalTime.js * sidebartranslate|sidebartranslate.js * SpecialSearch|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * colorcats|category-colorcode.css * JSL|JSL.js * background-awesomeness|background-awesomeness.css * subject-pages|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[default]|commons-file.js <!--* HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css--> * UTCLiveClock[ResourceLoader]|UTCLiveClock.js <!--* dictHover|dictionaryLookupHover.js --> == edit-gadgets == * wiked|wiked.js * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[default]|toolboxcompat.js * edittop|edittop.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs|bottomtabs.css|bottomtabs.js * sixtabs|sixtabs.js == admin-gadgets == * modrollback[ResourceLoader|rights=rollback]|modrollback.js * subpages[rights=delete]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * autodel[rights=delete]|autodel.js * twinkledelimages[rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader]|markblocked.js tgxlfcfsvwvstd9bowfie7wgqtipzeb 14462 14461 2015-08-15T10:40:35Z Az1568 66 /* edit-gadgets */ wiked + ResourceLoader 14462 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime|CommentsInLocalTime.js * sidebartranslate|sidebartranslate.js * SpecialSearch|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * colorcats|category-colorcode.css * JSL|JSL.js * background-awesomeness|background-awesomeness.css * subject-pages|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[default]|commons-file.js <!--* HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css--> * UTCLiveClock[ResourceLoader]|UTCLiveClock.js <!--* dictHover|dictionaryLookupHover.js --> == edit-gadgets == * wiked[ResourceLoader]|wiked.js * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[default]|toolboxcompat.js * edittop|edittop.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs|bottomtabs.css|bottomtabs.js * sixtabs|sixtabs.js == admin-gadgets == * modrollback[ResourceLoader|rights=rollback]|modrollback.js * subpages[rights=delete]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * autodel[rights=delete]|autodel.js * twinkledelimages[rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader]|markblocked.js 0flhz1z7i63cr0gmq4dj2s6097jrap3 14463 14462 2015-08-15T10:46:45Z Az1568 66 /* browse-gadgets */ CommentsInLocalTime + ResourceLoader 14463 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate|sidebartranslate.js * SpecialSearch|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * colorcats|category-colorcode.css * JSL|JSL.js * background-awesomeness|background-awesomeness.css * subject-pages|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[default]|commons-file.js <!--* HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css--> * UTCLiveClock[ResourceLoader]|UTCLiveClock.js <!--* dictHover|dictionaryLookupHover.js --> == edit-gadgets == * wiked[ResourceLoader]|wiked.js * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[default]|toolboxcompat.js * edittop|edittop.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs|bottomtabs.css|bottomtabs.js * sixtabs|sixtabs.js == admin-gadgets == * modrollback[ResourceLoader|rights=rollback]|modrollback.js * subpages[rights=delete]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * autodel[rights=delete]|autodel.js * twinkledelimages[rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader]|markblocked.js t4u5l02l842rsmcp0wrrgukofwou38k 14464 14463 2015-08-15T10:49:59Z Az1568 66 /* admin-gadgets */ ResourceLoader for autodel 14464 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate|sidebartranslate.js * SpecialSearch|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * colorcats|category-colorcode.css * JSL|JSL.js * background-awesomeness|background-awesomeness.css * subject-pages|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[default]|commons-file.js <!--* HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css--> * UTCLiveClock[ResourceLoader]|UTCLiveClock.js <!--* dictHover|dictionaryLookupHover.js --> == edit-gadgets == * wiked[ResourceLoader]|wiked.js * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[default]|toolboxcompat.js * edittop|edittop.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs|bottomtabs.css|bottomtabs.js * sixtabs|sixtabs.js == admin-gadgets == * modrollback[ResourceLoader|rights=rollback]|modrollback.js * subpages[rights=delete]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader]|markblocked.js nnra12qpq844ndgs057zu09ric3ephy 14465 14464 2015-08-15T10:52:38Z Az1568 66 /* browse-gadgets */ Removed JSL due to deprecation and dated file 14465 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate|sidebartranslate.js * SpecialSearch|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * colorcats|category-colorcode.css * background-awesomeness|background-awesomeness.css * subject-pages|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[default]|commons-file.js <!--* HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css--> * UTCLiveClock[ResourceLoader]|UTCLiveClock.js <!--* dictHover|dictionaryLookupHover.js --> == edit-gadgets == * wiked[ResourceLoader]|wiked.js * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[default]|toolboxcompat.js * edittop|edittop.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs|bottomtabs.css|bottomtabs.js * sixtabs|sixtabs.js == admin-gadgets == * modrollback[ResourceLoader|rights=rollback]|modrollback.js * subpages[rights=delete]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader]|markblocked.js si1l1hzt0dvuxcxkmgqjmjjab7i6mne 14466 14465 2015-08-15T10:56:15Z Az1568 66 /* edit-gadgets */ edittop + ResourceLoader 14466 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate|sidebartranslate.js * SpecialSearch|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * colorcats|category-colorcode.css * background-awesomeness|background-awesomeness.css * subject-pages|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[default]|commons-file.js <!--* HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css--> * UTCLiveClock[ResourceLoader]|UTCLiveClock.js <!--* dictHover|dictionaryLookupHover.js --> == edit-gadgets == * wiked[ResourceLoader]|wiked.js * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[default]|toolboxcompat.js * edittop[ResourceLoader]|edittop.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs|bottomtabs.css|bottomtabs.js * sixtabs|sixtabs.js == admin-gadgets == * modrollback[ResourceLoader|rights=rollback]|modrollback.js * subpages[rights=delete]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader]|markblocked.js pceimhzpb1xywkni8w14hgazmbbl7ka 14467 14466 2015-08-15T11:08:09Z Az1568 66 /* browse-gadgets */ SpecialSearch + ResourceLoader 14467 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * colorcats|category-colorcode.css * background-awesomeness|background-awesomeness.css * subject-pages|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[default]|commons-file.js <!--* HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css--> * UTCLiveClock[ResourceLoader]|UTCLiveClock.js <!--* dictHover|dictionaryLookupHover.js --> == edit-gadgets == * wiked[ResourceLoader]|wiked.js * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[default]|toolboxcompat.js * edittop[ResourceLoader]|edittop.js == book-gadgets== * wkBookCreator|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection|collectionparser.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs|bottomtabs.css|bottomtabs.js * sixtabs|sixtabs.js == admin-gadgets == * modrollback[ResourceLoader|rights=rollback]|modrollback.js * subpages[rights=delete]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader]|markblocked.js ddjl81a7d337fym52td3uvwhqktsvcs 14468 14467 2016-07-27T21:24:10Z JackPotte 1965 [ResourceLoader] migration is the first step before further tests 14468 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * colorcats|category-colorcode.css * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader|default]|toolboxcompat.js * edittop[ResourceLoader]|edittop.js == book-gadgets== * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection[ResourceLoader]|collectionparser.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader]|sixtabs.js == admin-gadgets == * modrollback[ResourceLoader|rights=rollback]|modrollback.js * subpages[ResourceLoader|rights=delete]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader]|markblocked.js == broken-gadgets == * HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css * dictHover|dictionaryLookupHover.js g9gyh9tpjvhbz8k7qwqf0lqx2evi4l2 14469 14468 2016-08-14T11:22:36Z JackPotte 1965 14469 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * colorcats|category-colorcode.css * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader|default]|toolboxcompat.js * edittop[ResourceLoader]|edittop.js == book-gadgets== * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection[ResourceLoader]|collectionparser.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader]|sixtabs.js == admin-gadgets == * modrollback[ResourceLoader|rights=rollback]|modrollback.js * subpages[ResourceLoader|rights=delete]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader]|markblocked.js == broken-gadgets == * HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css * dictHover|dictionaryLookupHover.js rcwk6z5ps3als7h1mkngf0xif9spcik 14470 14469 2016-08-14T12:18:34Z JackPotte 1965 Forbidden by Phabricator (because of XSS only?) 14470 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * colorcats|category-colorcode.css * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader|default]|toolboxcompat.js * edittop[ResourceLoader]|edittop.js == book-gadgets== * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection[ResourceLoader]|collectionparser.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader]|sixtabs.js == admin-gadgets == * modrollback[ResourceLoader|rights=rollback]|modrollback.js * subpages[ResourceLoader|rights=delete]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader]|markblocked.js == broken-gadgets == * HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css 8qwv6xnpox5lxxbeb8el186voz3uacn 14471 14470 2016-08-14T13:08:38Z JackPotte 1965 14471 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * colorcats|category-colorcode.css * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * toolboxcompat[ResourceLoader|default]|toolboxcompat.js * edittop[ResourceLoader]|edittop.js == book-gadgets== * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection[ResourceLoader]|collectionparser.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader]|sixtabs.js == admin-gadgets == * modrollback[ResourceLoader|rights=rollback]|modrollback.js * subpages[ResourceLoader|rights=delete]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader]|markblocked.js == broken-gadgets == * HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js 5zts39a87z56ruwrpq4i4wovuw635gr 14472 14471 2016-08-14T13:23:47Z JackPotte 1965 14472 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * colorcats|category-colorcode.css * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * edittop[ResourceLoader]|edittop.js == book-gadgets== * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection[ResourceLoader]|collectionparser.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader]|sixtabs.js == admin-gadgets == * modrollback[ResourceLoader|rights=rollback]|modrollback.js * subpages[ResourceLoader|rights=delete]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader]|markblocked.js == broken-gadgets == * HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js bc0f1en62sxz6ymhlk43qfkwai658po 14473 14472 2016-08-14T13:36:26Z JackPotte 1965 tested [[User:JackPotte/sandbox]] 14473 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * colorcats|category-colorcode.css * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js == book-gadgets== * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection[ResourceLoader]|collectionparser.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader]|sixtabs.js == admin-gadgets == * modrollback[ResourceLoader|rights=rollback]|modrollback.js * subpages[ResourceLoader|rights=delete]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader]|markblocked.js == broken-gadgets == * HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader]|edittop.js 0boz9l5g862hvqagoy1yvlm7jp7wy0j 14474 14473 2016-08-14T13:44:56Z JackPotte 1965 14474 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * colorcats|category-colorcode.css * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader]|sixtabs.js == admin-gadgets == * modrollback[ResourceLoader|rights=rollback]|modrollback.js * subpages[ResourceLoader|rights=delete]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader]|markblocked.js == broken-gadgets == * HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader]|edittop.js * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection[ResourceLoader]|collectionparser.js 145gtkdah3z8ph4yslwws3n5d3pkxkd 14475 14474 2016-08-14T14:46:55Z JackPotte 1965 14475 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * colorcats|category-colorcode.css * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook]|sixtabs.js == admin-gadgets == * modrollback[ResourceLoader|rights=rollback]|modrollback.js * subpages[ResourceLoader|rights=delete]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader]|markblocked.js == broken-gadgets == * HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader]|edittop.js * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection[ResourceLoader]|collectionparser.js 24hhc7iuvq8rvw8fn43x7c2j4v648fl 14476 14475 2016-08-14T14:53:53Z JackPotte 1965 /* admin-gadgets */ 14476 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * colorcats|category-colorcode.css * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook]|sixtabs.js == admin-gadgets == * modrollback[ResourceLoader|rights=rollback]|modrollback.js * subpages[ResourceLoader|rights=delete]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|rights=block]|markblocked.js == broken-gadgets == * HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader]|edittop.js * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection[ResourceLoader]|collectionparser.js e9dvkt4m6y0814ne9o472e6desvq58v 14477 14476 2016-08-14T15:15:26Z JackPotte 1965 14477 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * colorcats|category-colorcode.css * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|rights=block]|markblocked.js == broken-gadgets == <!-- browse-gadgets --> * HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css <!-- edit-gadgets --> * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader]|edittop.js <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection[ResourceLoader]|collectionparser.js <!-- broken-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js m6w00nov8ljresyggwy282moou9wgwr 14478 14477 2016-09-11T23:47:19Z JackPotte 1965 14478 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * colorcats|category-colorcode.css * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|rights=block]|markblocked.js == broken-gadgets == <!-- browse-gadgets --> * HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css <!-- edit-gadgets --> * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader]|edittop.js <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection[ResourceLoader]|collectionparser.js <!-- broken-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js 6br53dkvbv3fnm4b487sj27m00kpwib 14479 14478 2016-09-11T23:51:23Z JackPotte 1965 14479 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * colorcats|category-colorcode.css * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|rights=block]|markblocked.js == broken-gadgets == <!-- browse-gadgets --> * HideFundraisingNotice|HideFundraisingNotice.js|HideFundraisingNotice.css <!-- edit-gadgets --> * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader]|edittop.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection[ResourceLoader]|collectionparser.js <!-- admin-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js abcfi6gdkn15pzaiw1v60g51t58st46 14480 14479 2016-09-12T11:24:38Z JackPotte 1965 HideFundraisingNotice.js is deleted for years 14480 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * colorcats|category-colorcode.css * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|rights=block]|markblocked.js == broken-gadgets == <!-- edit-gadgets --> * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader]|edittop.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection[ResourceLoader]|collectionparser.js <!-- admin-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js mpxk6uchmokt1zrbyisf9n62q9jx6o3 14481 14480 2016-09-13T10:42:59Z JackPotte 1965 14481 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * colorcats|category-colorcode.css * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|rights=edit]|DeluxeBar.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|rights=block]|markblocked.js == broken-gadgets == <!-- edit-gadgets --> * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader]|edittop.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection[ResourceLoader]|collectionparser.js <!-- admin-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js 09zczapbd8xf0kejrptki7dxudur26l 14482 14481 2016-09-13T10:48:21Z JackPotte 1965 14482 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * colorcats|category-colorcode.css * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|rights=edit]|DeluxeBar.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|rights=block]|markblocked.js == broken-gadgets == <!-- edit-gadgets --> * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader]|edittop.js * Special characters|Special characters.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection[ResourceLoader]|collectionparser.js <!-- admin-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js 06j5g5h9us2ploozei4pehf50jyfjlo 14483 14482 2016-09-13T10:48:55Z JackPotte 1965 14483 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * colorcats|category-colorcode.css * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|rights=edit]|DeluxeBar.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|rights=block]|markblocked.js == broken-gadgets == <!-- edit-gadgets --> * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader]|edittop.js * Special characters[ResourceLoader]|Special characters.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection[ResourceLoader]|collectionparser.js <!-- admin-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js crw5uns2gz3pqi71b4vcct4b7m6ua62 14484 14483 2016-09-13T10:52:27Z JackPotte 1965 14484 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * colorcats|category-colorcode.css * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|rights=block]|markblocked.js == broken-gadgets == <!-- edit-gadgets --> * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js * DeluxeBar[ResourceLoader|rights=edit]|DeluxeBar.js <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection[ResourceLoader]|collectionparser.js <!-- admin-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js hq8ypjhwpx0i8p3qy06exyng41ilibc 14485 14484 2016-09-13T10:53:37Z JackPotte 1965 14485 wikitext text/x-wiki == browse-gadgets == * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * colorcats|category-colorcode.css * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|rights=edit]|DeluxeBar.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|rights=block]|markblocked.js == broken-gadgets == <!-- edit-gadgets --> * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection[ResourceLoader]|collectionparser.js <!-- admin-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js 8sadh5gk0z0vbufn08hw55faqvgg9qw 14486 14485 2016-11-19T02:12:34Z Pi zero 2546 wikidialog, first on list, not default 14486 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|targets=desktop,mobile]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * colorcats|category-colorcode.css * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|rights=edit]|DeluxeBar.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|rights=block]|markblocked.js == broken-gadgets == <!-- edit-gadgets --> * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection[ResourceLoader]|collectionparser.js <!-- admin-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js qdn5aygtsh00r38wnjxjycv2hitb69x 14487 14486 2016-12-04T19:45:42Z JackPotte 1965 14487 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|targets=desktop,mobile]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * colorcats|category-colorcode.css * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=mediawiki.toolbar|rights=edit]|DeluxeBar.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|rights=block]|markblocked.js == broken-gadgets == <!-- edit-gadgets --> * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection[ResourceLoader]|collectionparser.js <!-- admin-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js r0obdtp6rcg9tk1yqhtgnzkokgv1t7s 14488 14487 2016-12-25T21:26:01Z Pi zero 2546 /* browse-gadgets */ opt-out 14488 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|default|targets=desktop,mobile]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * colorcats|category-colorcode.css * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * extlinks[default|ResourceLoader|dependencies=mediawiki.util]|extlinks.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=mediawiki.toolbar|rights=edit]|DeluxeBar.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|rights=block]|markblocked.js == broken-gadgets == <!-- edit-gadgets --> * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection[ResourceLoader]|collectionparser.js <!-- admin-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js fmxeidlpq19ztdn8wyqa5ekc6jf0ifo 14489 14488 2017-01-02T23:27:53Z JackPotte 1965 [[Wikibooks:Reading_room/Technical_Assistance#Javascript_error:_mw.util..24content_is_null]] 14489 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|default|targets=desktop,mobile]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * colorcats|category-colorcode.css * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=mediawiki.toolbar|rights=edit]|DeluxeBar.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|rights=block]|markblocked.js == broken-gadgets == <!-- edit-gadgets --> * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection[ResourceLoader]|collectionparser.js <!-- admin-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js 3cwm59yacrfw09evl8zanesh2nxhdpn 14490 14489 2017-01-06T22:38:18Z Pi zero 2546 [[Wikibooks:Reading room/General#Appearance of categories]] 14490 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|default|targets=desktop,mobile]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=mediawiki.toolbar|rights=edit]|DeluxeBar.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|rights=block]|markblocked.js == broken-gadgets == <!-- edit-gadgets --> * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js * colorcats|category-colorcode.css <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection[ResourceLoader]|collectionparser.js <!-- admin-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js e41bkdzlsv48v894z5lmb29h5n27gpi 14491 14490 2017-05-22T23:19:34Z Nemo bis 1585 Declare dependency so that mw.util does not break JavaScript, see [[phabricator:T164242]]. 14491 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|default|targets=desktop,mobile]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=mediawiki.toolbar|rights=edit]|DeluxeBar.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|rights=block]|markblocked.js == broken-gadgets == <!-- edit-gadgets --> * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js * colorcats|category-colorcode.css <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection[ResourceLoader|dependencies=mediawiki.util]|collectionparser.js <!-- admin-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js 0gqpahjqduf4hjvgzckhym9a2vuoh75 14492 14491 2017-05-22T23:19:48Z Nemo bis 1585 Declare dependency so that mw.util does not break JavaScript, see [[phabricator:T164242]]. 14492 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|default|targets=desktop,mobile]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=mediawiki.toolbar|rights=edit]|DeluxeBar.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|rights=block]|markblocked.js == broken-gadgets == <!-- edit-gadgets --> * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader|dependencies=mediawiki.util]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js * colorcats|category-colorcode.css <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection[ResourceLoader|dependencies=mediawiki.util]|collectionparser.js <!-- admin-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js 024105bmspfnhsap2mbyt9srv1xdsnn 14493 14492 2017-06-02T21:32:41Z Nemo bis 1585 Declare dependency on mediawiki.util: [[phabricator:T164242]]. 14493 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|default|targets=desktop,mobile]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=mediawiki.toolbar|rights=edit]|DeluxeBar.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|rights=block]|markblocked.js == broken-gadgets == <!-- edit-gadgets --> * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader|dependencies=mediawiki.util]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js * colorcats|category-colorcode.css <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection[ResourceLoader|dependencies=mediawiki.util]|collectionparser.js <!-- admin-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel[ResourceLoader|rights=delete|dependencies=mediawiki.util]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js nipvzw764q4pzxvjix0xszazkmgve5m 14494 14493 2017-06-02T21:32:46Z Nemo bis 1585 Declare dependency so that mw.util does not break JavaScript, see [[phabricator:T164242]]. 14494 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|default|targets=desktop,mobile]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default|dependencies=mediawiki.util]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=mediawiki.toolbar|rights=edit]|DeluxeBar.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|rights=block]|markblocked.js == broken-gadgets == <!-- edit-gadgets --> * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader|dependencies=mediawiki.util]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js * colorcats|category-colorcode.css <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection[ResourceLoader|dependencies=mediawiki.util]|collectionparser.js <!-- admin-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js bj6nenyueku0brqyf2x6xj8ghuex700 14495 14494 2017-06-02T21:33:04Z Nemo bis 1585 Declare dependency so that mw.util does not break JavaScript, see [[phabricator:T164242]]. 14495 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|default|targets=desktop,mobile]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default|dependencies=mediawiki.util]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=mediawiki.toolbar|rights=edit]|DeluxeBar.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|rights=block|dependencies=mediawiki.util]|markblocked.js == broken-gadgets == <!-- edit-gadgets --> * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader|dependencies=mediawiki.util]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js * colorcats|category-colorcode.css <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection[ResourceLoader|dependencies=mediawiki.util]|collectionparser.js <!-- admin-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js 1tfxwx3qli6nysbenrt52sr7t2556yg 14496 14495 2017-06-02T21:33:21Z Nemo bis 1585 Declare dependency so that mw.util does not break JavaScript, see [[phabricator:T164242]]. 14496 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|default|targets=desktop,mobile]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default|dependencies=mediawiki.util]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=mediawiki.toolbar|rights=edit]|DeluxeBar.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook|dependencies=mediawiki.util]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|rights=block|dependencies=mediawiki.util]|markblocked.js == broken-gadgets == <!-- edit-gadgets --> * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader|dependencies=mediawiki.util]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js * colorcats|category-colorcode.css <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection[ResourceLoader|dependencies=mediawiki.util]|collectionparser.js <!-- admin-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js l6wa2v3m473l7m2h1dxvdcmtr14nmzu 14497 14496 2017-06-02T21:33:35Z Nemo bis 1585 Declare dependency so that mw.util does not break JavaScript, see [[phabricator:T164242]]. 14497 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|default|targets=desktop,mobile]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default|dependencies=mediawiki.util]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=mediawiki.toolbar|rights=edit]|DeluxeBar.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook|dependencies=mediawiki.util]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete|dependencies=mediawiki.util]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|rights=block|dependencies=mediawiki.util]|markblocked.js == broken-gadgets == <!-- edit-gadgets --> * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader|dependencies=mediawiki.util]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js * colorcats|category-colorcode.css <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection[ResourceLoader|dependencies=mediawiki.util]|collectionparser.js <!-- admin-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js l96gstbmrd1ukknrk83599okm3lajsl 14498 14497 2017-06-02T21:34:19Z Nemo bis 1585 Declare dependency on mediawiki.util: [[phabricator:T164242]]. 14498 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|default|targets=desktop,mobile]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default|dependencies=mediawiki.util]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=mediawiki.toolbar|rights=edit]|DeluxeBar.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook|dependencies=mediawiki.util]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete|dependencies=mediawiki.util]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|rights=block|dependencies=mediawiki.util]|markblocked.js == broken-gadgets == <!-- edit-gadgets --> * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader|dependencies=mediawiki.util]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js * colorcats|category-colorcode.css <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection[ResourceLoader|dependencies=mediawiki.util]|collectionparser.js <!-- admin-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete|dependencies=mediawiki.util]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js l7svjijesxmu4koki6lk2619rn96jxu 14499 14498 2017-06-02T21:34:25Z Nemo bis 1585 Declare dependency so that mw.util does not break JavaScript, see [[phabricator:T164242]]. 14499 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|default|targets=desktop,mobile|dependencies=mediawiki.util]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default|dependencies=mediawiki.util]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=mediawiki.toolbar|rights=edit]|DeluxeBar.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook|dependencies=mediawiki.util]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete|dependencies=mediawiki.util]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|rights=block|dependencies=mediawiki.util]|markblocked.js == broken-gadgets == <!-- edit-gadgets --> * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader|dependencies=mediawiki.util]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js * colorcats|category-colorcode.css <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection[ResourceLoader|dependencies=mediawiki.util]|collectionparser.js <!-- admin-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js 603x4910pgfiq8n9os66ddfq99kpif5 14500 14499 2017-08-30T06:57:49Z JackPotte 1965 14500 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|default|targets=desktop,mobile|dependencies=mediawiki.util]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default|dependencies=mediawiki.util]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=mediawiki.toolbar|rights=edit]|DeluxeBar.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook|dependencies=mediawiki.util]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete|dependencies=mediawiki.util]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|rights=block|dependencies=mediawiki.util]|markblocked.js == broken-gadgets == <!-- edit-gadgets --> * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader|dependencies=mediawiki.util]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * colorcats|category-colorcode.css <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection[ResourceLoader|dependencies=mediawiki.util]|collectionparser.js <!-- admin-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js 0xa522bxdva0zuhhovpry4mlzrgiw3m 14501 14500 2018-10-31T21:18:00Z JackPotte 1965 * mediawiki.toolbar [ResourceLoader|hidden] | mediawiki.toolbar.js to repair the old edition bar 14501 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|default|targets=desktop,mobile|dependencies=mediawiki.util]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default|dependencies=mediawiki.util]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=ext.gadget.mediawiki.toolbar|rights=edit]|DeluxeBar.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook|dependencies=mediawiki.util]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete|dependencies=mediawiki.util]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|rights=block|dependencies=mediawiki.util]|markblocked.js * mediawiki.toolbar [ResourceLoader|hidden] | mediawiki.toolbar.js == broken-gadgets == <!-- edit-gadgets --> * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui.dialog,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader|dependencies=mediawiki.util]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * colorcats|category-colorcode.css <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection[ResourceLoader|dependencies=mediawiki.util]|collectionparser.js <!-- admin-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js o3wysienmkct4luoauus9ddnu4fzeru 14502 14501 2019-10-25T16:36:08Z Krinkle 566 Maintenance: [[mw:RL/MGU]] - Updated deprecated module name 14502 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|default|targets=desktop,mobile|dependencies=mediawiki.util]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default|dependencies=mediawiki.util]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=ext.gadget.mediawiki.toolbar|rights=edit]|DeluxeBar.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook|dependencies=mediawiki.util]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete|dependencies=mediawiki.util]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|rights=block|dependencies=mediawiki.util]|markblocked.js * mediawiki.toolbar [ResourceLoader|hidden] | mediawiki.toolbar.js == broken-gadgets == <!-- edit-gadgets --> * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader|dependencies=mediawiki.util]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * colorcats|category-colorcode.css <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection[ResourceLoader|dependencies=mediawiki.util]|collectionparser.js <!-- admin-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js 16yds5oqburcncja5azngf7dvkxxnln 14503 9466 2021-03-21T13:23:28Z Minorax 2634 /* admin-gadgets */ + 14503 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|default|targets=desktop,mobile|dependencies=mediawiki.util]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default|dependencies=mediawiki.util]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=ext.gadget.mediawiki.toolbar|rights=edit]|DeluxeBar.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook|dependencies=mediawiki.util]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete|dependencies=mediawiki.util]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|rights=block|dependencies=mediawiki.util]|markblocked.js * mediawiki.toolbar [ResourceLoader|hidden] | mediawiki.toolbar.js * markAdmins [ResourceLoader|dependencies=mediawiki.util]|markAdmins-data.js|markAdmins.js == broken-gadgets == <!-- edit-gadgets --> * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader|dependencies=mediawiki.util]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * colorcats|category-colorcode.css <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection[ResourceLoader|dependencies=mediawiki.util]|collectionparser.js <!-- admin-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js o63meoeya2fq236fv25hgi2abkqu3nl 14504 14503 2021-06-29T11:56:09Z Leaderboard 2891 +bookcat 14504 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|default|targets=desktop,mobile|dependencies=mediawiki.util]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default|dependencies=mediawiki.util]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=ext.gadget.mediawiki.toolbar|rights=edit]|DeluxeBar.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js * BookCat[ResourceLoader]|BookCat.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook|dependencies=mediawiki.util]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete|dependencies=mediawiki.util]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|rights=block|dependencies=mediawiki.util]|markblocked.js * mediawiki.toolbar [ResourceLoader|hidden] | mediawiki.toolbar.js * markAdmins [ResourceLoader|dependencies=mediawiki.util]|markAdmins-data.js|markAdmins.js == broken-gadgets == <!-- edit-gadgets --> * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui,jquery.tipsy]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui,jquery.tipsy]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui,jquery.tipsy]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui,jquery.tipsy]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader|dependencies=mediawiki.util]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * colorcats|category-colorcode.css <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection[ResourceLoader|dependencies=mediawiki.util]|collectionparser.js <!-- admin-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js rus9mfblrprw8fpq9j5g3xe1sbbqmy8 14505 11981 2023-05-15T21:40:40Z Jon (WMF) 3229 <maintenance> [[phab:T336019]] jquery.tipsy will be removed from MediaWiki core 14505 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|default|targets=desktop,mobile|dependencies=mediawiki.util]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default|dependencies=mediawiki.util]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=ext.gadget.mediawiki.toolbar|rights=edit]|DeluxeBar.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js * BookCat[ResourceLoader]|BookCat.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook|dependencies=mediawiki.util]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete|dependencies=mediawiki.util]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|rights=block|dependencies=mediawiki.util]|markblocked.js * mediawiki.toolbar [ResourceLoader|hidden] | mediawiki.toolbar.js * markAdmins [ResourceLoader|dependencies=mediawiki.util]|markAdmins-data.js|markAdmins.js == broken-gadgets == <!-- edit-gadgets --> * Welcome[ResourceLoader|dependencies=site,mediawiki.util]|wknightcore.js|Welcome.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader|dependencies=mediawiki.util]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * colorcats|category-colorcode.css <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection[ResourceLoader|dependencies=mediawiki.util]|collectionparser.js <!-- admin-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js 7a1kg0zallp5yzh59ctawg19mi88yyn 14506 13607 2024-12-10T11:29:48Z Leaderboard 2891 /* broken-gadgets */ try 14506 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|default|targets=desktop,mobile|dependencies=mediawiki.util]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default|dependencies=mediawiki.util]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=ext.gadget.mediawiki.toolbar|rights=edit]|DeluxeBar.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js * BookCat[ResourceLoader]|BookCat.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook|dependencies=mediawiki.util]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete|dependencies=mediawiki.util]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|rights=block|dependencies=mediawiki.util]|markblocked.js * mediawiki.toolbar [ResourceLoader|hidden] | mediawiki.toolbar.js * markAdmins [ResourceLoader|dependencies=mediawiki.util]|markAdmins-data.js|markAdmins.js == broken-gadgets == <!-- edit-gadgets --> * OneClickWelcomer[ResourceLoader|dependencies=site,mediawiki.util]|User:JJPMaster/OneClickWelcomer.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader|dependencies=mediawiki.util]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * colorcats|category-colorcode.css <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection[ResourceLoader|dependencies=mediawiki.util]|collectionparser.js <!-- admin-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js b4u5trvgvf65x2dl6zef4znhjy04pw8 14507 14506 2024-12-10T11:30:15Z Leaderboard 2891 14507 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|default|targets=desktop,mobile|dependencies=mediawiki.util]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default|dependencies=mediawiki.util]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=ext.gadget.mediawiki.toolbar|rights=edit]|DeluxeBar.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js * BookCat[ResourceLoader]|BookCat.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook|dependencies=mediawiki.util]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete|dependencies=mediawiki.util]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|rights=block|dependencies=mediawiki.util]|markblocked.js * mediawiki.toolbar [ResourceLoader|hidden] | mediawiki.toolbar.js * markAdmins [ResourceLoader|dependencies=mediawiki.util]|markAdmins-data.js|markAdmins.js == broken-gadgets == <!-- edit-gadgets --> * OneClickWelcomer[ResourceLoader|dependencies=site,mediawiki.util]|OneClickWelcomer.js * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader|dependencies=mediawiki.util]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * colorcats|category-colorcode.css <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection[ResourceLoader|dependencies=mediawiki.util]|collectionparser.js <!-- admin-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js 3ontggcfshqpkvo6825v55hpjfhqkpy 14508 14507 2024-12-14T06:18:12Z Leaderboard 2891 https://en.wikibooks.org/wiki/Wikibooks:Reading_room/Technical_Assistance#c-JJPMaster-20241210151300-Leaderboard-20241210144700 14508 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|default|targets=desktop,mobile|dependencies=mediawiki.util]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default|dependencies=mediawiki.util]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=ext.gadget.mediawiki.toolbar|rights=edit]|DeluxeBar.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js * BookCat[ResourceLoader]|BookCat.js * OneClickWelcomer[ResourceLoader|dependencies=site,mediawiki.util]|OneClickWelcomer.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook|dependencies=mediawiki.util]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete|dependencies=mediawiki.util]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|rights=block|dependencies=mediawiki.util]|markblocked.js * mediawiki.toolbar [ResourceLoader|hidden] | mediawiki.toolbar.js * markAdmins [ResourceLoader|dependencies=mediawiki.util]|markAdmins-data.js|markAdmins.js == broken-gadgets == <!-- edit-gadgets --> * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader|dependencies=mediawiki.util]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * colorcats|category-colorcode.css <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * GetCollection[ResourceLoader|dependencies=mediawiki.util]|collectionparser.js <!-- admin-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js 2vhjy3jnzwookmj4ynik1gz6294zbrx 14509 14508 2024-12-17T16:12:39Z Leaderboard 2891 14509 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|default|targets=desktop,mobile|dependencies=mediawiki.util]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default|dependencies=mediawiki.util]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js * GetCollection[ResourceLoader|dependencies=mediawiki.util]|collectionparser.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=ext.gadget.mediawiki.toolbar|rights=edit]|DeluxeBar.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js * BookCat[ResourceLoader]|BookCat.js * OneClickWelcomer[ResourceLoader|dependencies=site,mediawiki.util]|OneClickWelcomer.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook|dependencies=mediawiki.util]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete|dependencies=mediawiki.util]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|rights=block|dependencies=mediawiki.util]|markblocked.js * mediawiki.toolbar [ResourceLoader|hidden] | mediawiki.toolbar.js * markAdmins [ResourceLoader|dependencies=mediawiki.util]|markAdmins-data.js|markAdmins.js == broken-gadgets == <!-- edit-gadgets --> * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader|dependencies=mediawiki.util]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * colorcats|category-colorcode.css <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| <!-- admin-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js fnyll9gm8iv2zky5e1utffkyleewvzw 14510 14509 2024-12-18T02:51:39Z Leaderboard 2891 /* admin-gadgets */ https://en.wikibooks.org/wiki/Wikibooks:Reading_room/Technical_Assistance 14510 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|default|targets=desktop,mobile|dependencies=mediawiki.util]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default|dependencies=mediawiki.util]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js * GetCollection[ResourceLoader|dependencies=mediawiki.util]|collectionparser.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=ext.gadget.mediawiki.toolbar|rights=edit]|DeluxeBar.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js * BookCat[ResourceLoader]|BookCat.js * OneClickWelcomer[ResourceLoader|dependencies=site,mediawiki.util]|OneClickWelcomer.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook|dependencies=mediawiki.util]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete|dependencies=mediawiki.util]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|dependencies=mediawiki.util]|markblocked.js * mediawiki.toolbar [ResourceLoader|hidden] | mediawiki.toolbar.js * markAdmins [ResourceLoader|dependencies=mediawiki.util]|markAdmins-data.js|markAdmins.js == broken-gadgets == <!-- edit-gadgets --> * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader|dependencies=mediawiki.util]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * colorcats|category-colorcode.css <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| <!-- admin-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js k9qjev6ma9ve8jr6pyctv68b7a9m1qc 14511 14510 2024-12-21T16:42:21Z Leaderboard 2891 /* admin-gadgets */ 14511 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|default|targets=desktop,mobile|dependencies=mediawiki.util]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default|dependencies=mediawiki.util]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js * GetCollection[ResourceLoader|dependencies=mediawiki.util]|collectionparser.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=ext.gadget.mediawiki.toolbar|rights=edit]|DeluxeBar.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js * BookCat[ResourceLoader]|BookCat.js * OneClickWelcomer[ResourceLoader|dependencies=site,mediawiki.util]|OneClickWelcomer.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook|dependencies=mediawiki.util]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete|dependencies=mediawiki.util]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|dependencies=mediawiki.util]|markblocked.js * mediawiki.toolbar [ResourceLoader|hidden] | mediawiki.toolbar.js * markAdmins [ResourceLoader|dependencies=mediawiki.util]|markAdmins.js == broken-gadgets == <!-- edit-gadgets --> * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader|dependencies=mediawiki.util]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * colorcats|category-colorcode.css <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| <!-- admin-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js 9dz6kxfgzql99fap9iiy1yh4pn8fmda 14512 14511 2024-12-21T21:14:31Z Leaderboard 2891 /* admin-gadgets */ https://en.wikibooks.org/wiki/Wikibooks:Reading_room/Technical_Assistance#c-JJPMaster-20241221170300-Leaderboard-20241221164200 14512 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|default|targets=desktop,mobile|dependencies=mediawiki.util]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default|dependencies=mediawiki.util]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js * GetCollection[ResourceLoader|dependencies=mediawiki.util]|collectionparser.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=ext.gadget.mediawiki.toolbar|rights=edit]|DeluxeBar.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js * BookCat[ResourceLoader]|BookCat.js * OneClickWelcomer[ResourceLoader|dependencies=site,mediawiki.util]|OneClickWelcomer.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook|dependencies=mediawiki.util]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete|dependencies=mediawiki.util]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|dependencies=mediawiki.util]|markblocked.js * mediawiki.toolbar [ResourceLoader|hidden] | mediawiki.toolbar.js * markAdmins [ResourceLoader|dependencies=mediawiki.util],mediawiki.api|markAdmins.js == broken-gadgets == <!-- edit-gadgets --> * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader|dependencies=mediawiki.util]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * colorcats|category-colorcode.css <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| <!-- admin-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js hoeds1gnyh45mbf37dc9u1hejw2rwss 14513 14512 2024-12-22T01:15:50Z Leaderboard 2891 https://en.wikibooks.org/wiki/Wikibooks:Reading_room/Technical_Assistance#Some_changes_to_MediaWiki:Gadget-markAdmins 14513 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|default|targets=desktop,mobile|dependencies=mediawiki.util]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default|dependencies=mediawiki.util]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js * GetCollection[ResourceLoader|dependencies=mediawiki.util]|collectionparser.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=ext.gadget.mediawiki.toolbar|rights=edit]|DeluxeBar.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js * BookCat[ResourceLoader]|BookCat.js * OneClickWelcomer[ResourceLoader|dependencies=site,mediawiki.util]|OneClickWelcomer.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook|dependencies=mediawiki.util]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete|dependencies=mediawiki.util]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|dependencies=mediawiki.util]|markblocked.js * mediawiki.toolbar [ResourceLoader|hidden] | mediawiki.toolbar.js * markAdmins [ResourceLoader|dependencies=mediawiki.util,mediawiki.api]|markAdmins.js == broken-gadgets == <!-- edit-gadgets --> * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader|dependencies=mediawiki.util]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * colorcats|category-colorcode.css <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| <!-- admin-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel[ResourceLoader|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js al112tr5i9ofaoqrawnne4ou727mm7q 14514 14513 2025-04-03T20:24:36Z JJPMaster 3394 /* broken-gadgets */ fixing autodel dependencies (using [[wikt:MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]) 14514 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|default|targets=desktop,mobile|dependencies=mediawiki.util]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default|dependencies=mediawiki.util]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js * GetCollection[ResourceLoader|dependencies=mediawiki.util]|collectionparser.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=ext.gadget.mediawiki.toolbar|rights=edit]|DeluxeBar.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js * BookCat[ResourceLoader]|BookCat.js * OneClickWelcomer[ResourceLoader|dependencies=site,mediawiki.util]|OneClickWelcomer.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook|dependencies=mediawiki.util]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete|dependencies=mediawiki.util]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|dependencies=mediawiki.util]|markblocked.js * mediawiki.toolbar [ResourceLoader|hidden] | mediawiki.toolbar.js * markAdmins [ResourceLoader|dependencies=mediawiki.util,mediawiki.api]|markAdmins.js == broken-gadgets == <!-- edit-gadgets --> * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader|dependencies=mediawiki.util]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * colorcats|category-colorcode.css <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| <!-- admin-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel [ResourceLoader|dependencies=mediawiki.cookie,mediawiki.util,mediawiki.user,ext.gadget.jquery.blockUI,ext.gadget.AjaxQuickDelete,ext.gadget.jquery.in-view|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js 5x4pqyg62noks0ma4kf6c11conuxxjc 14515 14514 2025-04-03T20:46:22Z JJPMaster 3394 this isn't commons 14515 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|default|targets=desktop,mobile|dependencies=mediawiki.util]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default|dependencies=mediawiki.util]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js * GetCollection[ResourceLoader|dependencies=mediawiki.util]|collectionparser.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=ext.gadget.mediawiki.toolbar|rights=edit]|DeluxeBar.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js * BookCat[ResourceLoader]|BookCat.js * OneClickWelcomer[ResourceLoader|dependencies=site,mediawiki.util]|OneClickWelcomer.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook|dependencies=mediawiki.util]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete|dependencies=mediawiki.util]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|dependencies=mediawiki.util]|markblocked.js * mediawiki.toolbar [ResourceLoader|hidden] | mediawiki.toolbar.js * markAdmins [ResourceLoader|dependencies=mediawiki.util,mediawiki.api]|markAdmins.js == broken-gadgets == <!-- edit-gadgets --> * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader|dependencies=mediawiki.util]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * colorcats|category-colorcode.css <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| <!-- admin-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel [ResourceLoader|dependencies=mediawiki.cookie,mediawiki.util,mediawiki.user|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js ecbyjyqpcx9lvxsfsuji01zc12nrox7 14516 14515 2025-04-03T20:49:57Z JJPMaster 3394 /* broken-gadgets */ the other dependencies (using [[wikt:MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]) 14516 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|default|targets=desktop,mobile|dependencies=mediawiki.util]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default|dependencies=mediawiki.util]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js * GetCollection[ResourceLoader|dependencies=mediawiki.util]|collectionparser.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=ext.gadget.mediawiki.toolbar|rights=edit]|DeluxeBar.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js * BookCat[ResourceLoader]|BookCat.js * OneClickWelcomer[ResourceLoader|dependencies=site,mediawiki.util]|OneClickWelcomer.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook|dependencies=mediawiki.util]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete|dependencies=mediawiki.util]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|dependencies=mediawiki.util]|markblocked.js * mediawiki.toolbar [ResourceLoader|hidden] | mediawiki.toolbar.js * markAdmins [ResourceLoader|dependencies=mediawiki.util,mediawiki.api]|markAdmins.js == broken-gadgets == <!-- edit-gadgets --> * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader|dependencies=mediawiki.util]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * colorcats|category-colorcode.css <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| <!-- admin-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel [ResourceLoader|dependencies=mediawiki.cookie,mediawiki.util,mediawiki.user,user,jquery.ui|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js bwtmyk1o0boxc4ijq85z75mnyqr5k60 14517 14516 2025-09-24T18:26:00Z Krinkle 566 Maintenance: Remove redundant "targets=desktop,mobile", this is the default now and will not change again because the target system was deprecated. Ref [[phab:T127268]] and [[mw;Extension:Gadgets#Options]] ("Removed options"). 14517 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|default|dependencies=mediawiki.util]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default|dependencies=mediawiki.util]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js * GetCollection[ResourceLoader|dependencies=mediawiki.util]|collectionparser.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=ext.gadget.mediawiki.toolbar|rights=edit]|DeluxeBar.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js * BookCat[ResourceLoader]|BookCat.js * OneClickWelcomer[ResourceLoader|dependencies=site,mediawiki.util]|OneClickWelcomer.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook|dependencies=mediawiki.util]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete|dependencies=mediawiki.util]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|dependencies=mediawiki.util]|markblocked.js * mediawiki.toolbar [ResourceLoader|hidden] | mediawiki.toolbar.js * markAdmins [ResourceLoader|dependencies=mediawiki.util,mediawiki.api]|markAdmins.js == broken-gadgets == <!-- edit-gadgets --> * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader|dependencies=mediawiki.util]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * colorcats|category-colorcode.css <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| <!-- admin-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel [ResourceLoader|dependencies=mediawiki.cookie,mediawiki.util,mediawiki.user,user,jquery.ui|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js 7yiyx2ykeoa9yg2wtxtt63o6wtr1mfi 14518 14517 2025-09-24T18:36:56Z Krinkle 566 Maintenance: Define a "sitewide" gadget, a hidden default gadget for additional files/dependencies in addition to Common.js. See also edit history on [[MediaWiki:Common.js]]. 14518 wikitext text/x-wiki == browse-gadgets == * sitewide[ResourceLoader|default|hidden]|sitewide-jQueryAsync.js * wikidialog[ResourceLoader|default|dependencies=mediawiki.util]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default|dependencies=mediawiki.util]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js * GetCollection[ResourceLoader|dependencies=mediawiki.util]|collectionparser.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=ext.gadget.mediawiki.toolbar|rights=edit]|DeluxeBar.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js * BookCat[ResourceLoader]|BookCat.js * OneClickWelcomer[ResourceLoader|dependencies=site,mediawiki.util]|OneClickWelcomer.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook|dependencies=mediawiki.util]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete|dependencies=mediawiki.util]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|dependencies=mediawiki.util]|markblocked.js * mediawiki.toolbar [ResourceLoader|hidden] | mediawiki.toolbar.js * markAdmins [ResourceLoader|dependencies=mediawiki.util,mediawiki.api]|markAdmins.js == broken-gadgets == <!-- edit-gadgets --> * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader|dependencies=mediawiki.util]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * colorcats|category-colorcode.css <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| <!-- admin-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel [ResourceLoader|dependencies=mediawiki.cookie,mediawiki.util,mediawiki.user,user,jquery.ui|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js o6s3xiq5sjvlkiw5x1cnsb4wqghkzt9 14519 14518 2025-09-24T19:04:07Z Krinkle 566 Nevermind. Can be refactored to not need it. 14519 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|default|dependencies=mediawiki.util]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default|dependencies=mediawiki.util]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js * GetCollection[ResourceLoader|dependencies=mediawiki.util]|collectionparser.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=ext.gadget.mediawiki.toolbar|rights=edit]|DeluxeBar.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js * BookCat[ResourceLoader]|BookCat.js * OneClickWelcomer[ResourceLoader|dependencies=site,mediawiki.util]|OneClickWelcomer.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook|dependencies=mediawiki.util]|sixtabs.js == admin-gadgets == * subpages[ResourceLoader|rights=delete|dependencies=mediawiki.util]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|dependencies=mediawiki.util]|markblocked.js * mediawiki.toolbar [ResourceLoader|hidden] | mediawiki.toolbar.js * markAdmins [ResourceLoader|dependencies=mediawiki.util,mediawiki.api]|markAdmins.js == broken-gadgets == <!-- edit-gadgets --> * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader|dependencies=mediawiki.util]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * colorcats|category-colorcode.css <!-- book-gadgets --> * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| <!-- admin-gadgets --> * modrollback[ResourceLoader|rights=rollback]|modrollback.js * autodel [ResourceLoader|dependencies=mediawiki.cookie,mediawiki.util,mediawiki.user,user,jquery.ui|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js 7yiyx2ykeoa9yg2wtxtt63o6wtr1mfi 14520 14519 2025-11-03T00:09:37Z Codename Noreste 3207 Adding modrollback to the admin gadget section, and hiding the broken script section. 14520 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|default|dependencies=mediawiki.util]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default|dependencies=mediawiki.util]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js * GetCollection[ResourceLoader|dependencies=mediawiki.util]|collectionparser.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=ext.gadget.mediawiki.toolbar|rights=edit]|DeluxeBar.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js * BookCat[ResourceLoader]|BookCat.js * OneClickWelcomer[ResourceLoader|dependencies=site,mediawiki.util]|OneClickWelcomer.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook|dependencies=mediawiki.util]|sixtabs.js == admin-gadgets == * modrollback[ResourceLoader|rights=rollback]|modrollback.js * subpages[ResourceLoader|rights=delete|dependencies=mediawiki.util]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|dependencies=mediawiki.util]|markblocked.js * mediawiki.toolbar[ResourceLoader|hidden]|mediawiki.toolbar.js * markAdmins[ResourceLoader|dependencies=mediawiki.util,mediawiki.api]|markAdmins.js <!-- == broken-gadgets == * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader|dependencies=mediawiki.util]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * colorcats|category-colorcode.css * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * autodel [ResourceLoader|dependencies=mediawiki.cookie,mediawiki.util,mediawiki.user,user,jquery.ui|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js --> m4r69d6y6jx5p3flqs6ykh4ugtdew3w 14521 14520 2025-11-23T17:57:50Z Codename Noreste 3207 Marking the dialog gadget as hidden, while it remains enabled as default. 14521 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|hidden|default|dependencies=mediawiki.util]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default|dependencies=mediawiki.util]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js * GetCollection[ResourceLoader|dependencies=mediawiki.util]|collectionparser.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=ext.gadget.mediawiki.toolbar|rights=edit]|DeluxeBar.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js * BookCat[ResourceLoader]|BookCat.js * OneClickWelcomer[ResourceLoader|dependencies=site,mediawiki.util]|OneClickWelcomer.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook|dependencies=mediawiki.util]|sixtabs.js == admin-gadgets == * modrollback[ResourceLoader|rights=rollback]|modrollback.js * subpages[ResourceLoader|rights=delete|dependencies=mediawiki.util]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js|blockoptions.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|dependencies=mediawiki.util]|markblocked.js * mediawiki.toolbar[ResourceLoader|hidden]|mediawiki.toolbar.js * markAdmins[ResourceLoader|dependencies=mediawiki.util,mediawiki.api]|markAdmins.js <!-- == broken-gadgets == * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader|dependencies=mediawiki.util]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * colorcats|category-colorcode.css * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * autodel [ResourceLoader|dependencies=mediawiki.cookie,mediawiki.util,mediawiki.user,user,jquery.ui|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js --> c14no11kp2l7wh6doywmyajfblnbudq 14522 14521 2026-01-02T06:17:38Z Codename Noreste 3207 No longer relies on blockoptions.js. 14522 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|hidden|default|dependencies=mediawiki.util]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default|dependencies=mediawiki.util]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js * GetCollection[ResourceLoader|dependencies=mediawiki.util]|collectionparser.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=ext.gadget.mediawiki.toolbar|rights=edit]|DeluxeBar.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js * BookCat[ResourceLoader]|BookCat.js * OneClickWelcomer[ResourceLoader|dependencies=site,mediawiki.util]|OneClickWelcomer.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook|dependencies=mediawiki.util]|sixtabs.js == admin-gadgets == * modrollback[ResourceLoader|rights=rollback]|modrollback.js * subpages[ResourceLoader|rights=delete|dependencies=mediawiki.util]|subpages.js * massblock[ResourceLoader|rights=block]|massblock.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|dependencies=mediawiki.util]|markblocked.js * mediawiki.toolbar[ResourceLoader|hidden]|mediawiki.toolbar.js * markAdmins[ResourceLoader|dependencies=mediawiki.util,mediawiki.api]|markAdmins.js <!-- == broken-gadgets == * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader|dependencies=mediawiki.util]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * colorcats|category-colorcode.css * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * autodel [ResourceLoader|dependencies=mediawiki.cookie,mediawiki.util,mediawiki.user,user,jquery.ui|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js --> 8olx2uavb5hjqnjcxpqfq79l0mzjwyn 14523 14522 2026-01-02T20:24:56Z Codename Noreste 3207 /* admin-gadgets */ Updating. 14523 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|hidden|default|dependencies=mediawiki.util]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default|dependencies=mediawiki.util]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js * GetCollection[ResourceLoader|dependencies=mediawiki.util]|collectionparser.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=ext.gadget.mediawiki.toolbar|rights=edit]|DeluxeBar.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js * BookCat[ResourceLoader]|BookCat.js * OneClickWelcomer[ResourceLoader|dependencies=site,mediawiki.util]|OneClickWelcomer.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook|dependencies=mediawiki.util]|sixtabs.js == admin-gadgets == * modrollback[ResourceLoader|rights=rollback]|modrollback.js * subpages[ResourceLoader|rights=delete|dependencies=mediawiki.util]|subpages.js * Massblock[ResourceLoader|rights=block]|Massblock.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|dependencies=mediawiki.util]|markblocked.js * mediawiki.toolbar[ResourceLoader|hidden]|mediawiki.toolbar.js * markAdmins[ResourceLoader|dependencies=mediawiki.util,mediawiki.api]|markAdmins.js <!-- == broken-gadgets == * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader|dependencies=mediawiki.util]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * colorcats|category-colorcode.css * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * autodel [ResourceLoader|dependencies=mediawiki.cookie,mediawiki.util,mediawiki.user,user,jquery.ui|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js --> rp68pms96h1lzb97eg6lwsvavnph37f 14524 14523 2026-01-02T20:56:53Z JJPMaster 3394 /* admin-gadgets */ +1 dependency (using [[wikt:MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]) 14524 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|hidden|default|dependencies=mediawiki.util]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default|dependencies=mediawiki.util]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js * GetCollection[ResourceLoader|dependencies=mediawiki.util]|collectionparser.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=ext.gadget.mediawiki.toolbar|rights=edit]|DeluxeBar.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js * BookCat[ResourceLoader]|BookCat.js * OneClickWelcomer[ResourceLoader|dependencies=site,mediawiki.util]|OneClickWelcomer.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook|dependencies=mediawiki.util]|sixtabs.js == admin-gadgets == * modrollback[ResourceLoader|rights=rollback]|modrollback.js * subpages[ResourceLoader|rights=delete|dependencies=mediawiki.util]|subpages.js * Massblock[ResourceLoader|rights=block|dependencies=mediawiki.util]|Massblock.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|dependencies=mediawiki.util]|markblocked.js * mediawiki.toolbar[ResourceLoader|hidden]|mediawiki.toolbar.js * markAdmins[ResourceLoader|dependencies=mediawiki.util,mediawiki.api]|markAdmins.js <!-- == broken-gadgets == * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader|dependencies=mediawiki.util]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * colorcats|category-colorcode.css * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * autodel [ResourceLoader|dependencies=mediawiki.cookie,mediawiki.util,mediawiki.user,user,jquery.ui|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js --> tr6ebnaezxuih5mczwrt6dqs5bj8yoa 14525 14524 2026-01-02T21:03:21Z JJPMaster 3394 /* admin-gadgets */ +the other dependency from itwiki (using [[wikt:MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]) 14525 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|hidden|default|dependencies=mediawiki.util]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default|dependencies=mediawiki.util]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js * GetCollection[ResourceLoader|dependencies=mediawiki.util]|collectionparser.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=ext.gadget.mediawiki.toolbar|rights=edit]|DeluxeBar.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js * BookCat[ResourceLoader]|BookCat.js * OneClickWelcomer[ResourceLoader|dependencies=site,mediawiki.util]|OneClickWelcomer.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook|dependencies=mediawiki.util]|sixtabs.js == admin-gadgets == * modrollback[ResourceLoader|rights=rollback]|modrollback.js * subpages[ResourceLoader|rights=delete|dependencies=mediawiki.util]|subpages.js * Massblock[ResourceLoader|rights=block|dependencies=mediawiki.util,mediawiki.api]|Massblock.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|dependencies=mediawiki.util]|markblocked.js * mediawiki.toolbar[ResourceLoader|hidden]|mediawiki.toolbar.js * markAdmins[ResourceLoader|dependencies=mediawiki.util,mediawiki.api]|markAdmins.js <!-- == broken-gadgets == * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader|dependencies=mediawiki.util]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * colorcats|category-colorcode.css * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * autodel [ResourceLoader|dependencies=mediawiki.cookie,mediawiki.util,mediawiki.user,user,jquery.ui|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js --> 49furmkuwvuq1urhexd8phmaxpnr7i1 14526 14525 2026-04-20T23:53:11Z Codename Noreste 3207 /* edit-gadgets */ Adding HotCat. 14526 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|hidden|default|dependencies=mediawiki.util]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default|dependencies=mediawiki.util]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js * GetCollection[ResourceLoader|dependencies=mediawiki.util]|collectionparser.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=ext.gadget.mediawiki.toolbar|rights=edit]|DeluxeBar.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js * BookCat[ResourceLoader]|BookCat.js * HotCat[ResourceLoader]|HotCat.js * OneClickWelcomer[ResourceLoader|dependencies=site,mediawiki.util]|OneClickWelcomer.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook|dependencies=mediawiki.util]|sixtabs.js == admin-gadgets == * modrollback[ResourceLoader|rights=rollback]|modrollback.js * subpages[ResourceLoader|rights=delete|dependencies=mediawiki.util]|subpages.js * Massblock[ResourceLoader|rights=block|dependencies=mediawiki.util,mediawiki.api]|Massblock.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|dependencies=mediawiki.util]|markblocked.js * mediawiki.toolbar[ResourceLoader|hidden]|mediawiki.toolbar.js * markAdmins[ResourceLoader|dependencies=mediawiki.util,mediawiki.api]|markAdmins.js <!-- == broken-gadgets == * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader|dependencies=mediawiki.util]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * colorcats|category-colorcode.css * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * autodel [ResourceLoader|dependencies=mediawiki.cookie,mediawiki.util,mediawiki.user,user,jquery.ui|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js --> 0m2ks3j4nrjr5hnjec8ciru7mltwago 14527 14526 2026-07-22T21:39:32Z Codename Noreste 3207 Per [[Wikibooks:Reading room/Proposals#New gadget to browse subpages]]. 14527 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|hidden|default|dependencies=mediawiki.util]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default|dependencies=mediawiki.util]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js * GetCollection[ResourceLoader|dependencies=mediawiki.util]|collectionparser.js * Global-Subpages[ResourceLoader|dependecies=mediawiki.api,@wikimedia/codex]|Global-Subpages.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=ext.gadget.mediawiki.toolbar|rights=edit]|DeluxeBar.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js * BookCat[ResourceLoader]|BookCat.js * HotCat[ResourceLoader]|HotCat.js * OneClickWelcomer[ResourceLoader|dependencies=site,mediawiki.util]|OneClickWelcomer.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook|dependencies=mediawiki.util]|sixtabs.js == admin-gadgets == * modrollback[ResourceLoader|rights=rollback]|modrollback.js * subpages[ResourceLoader|rights=delete|dependencies=mediawiki.util]|subpages.js * Massblock[ResourceLoader|rights=block|dependencies=mediawiki.util,mediawiki.api]|Massblock.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|dependencies=mediawiki.util]|markblocked.js * mediawiki.toolbar[ResourceLoader|hidden]|mediawiki.toolbar.js * markAdmins[ResourceLoader|dependencies=mediawiki.util,mediawiki.api]|markAdmins.js <!-- == broken-gadgets == * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader|dependencies=mediawiki.util]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * colorcats|category-colorcode.css * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * autodel [ResourceLoader|dependencies=mediawiki.cookie,mediawiki.util,mediawiki.user,user,jquery.ui|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js --> nyv0lpfog9918f3wle8mm53g85cc64i 14528 14527 2026-07-22T21:43:23Z Codename Noreste 3207 Fix. 14528 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|hidden|default|dependencies=mediawiki.util]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default|dependencies=mediawiki.util]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js * GetCollection[ResourceLoader|dependencies=mediawiki.util]|collectionparser.js * Global-Subpages[ResourceLoader|dependecies=mediawiki.api, ext.codex]|Global-Subpages.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=ext.gadget.mediawiki.toolbar|rights=edit]|DeluxeBar.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js * BookCat[ResourceLoader]|BookCat.js * HotCat[ResourceLoader]|HotCat.js * OneClickWelcomer[ResourceLoader|dependencies=site,mediawiki.util]|OneClickWelcomer.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook|dependencies=mediawiki.util]|sixtabs.js == admin-gadgets == * modrollback[ResourceLoader|rights=rollback]|modrollback.js * subpages[ResourceLoader|rights=delete|dependencies=mediawiki.util]|subpages.js * Massblock[ResourceLoader|rights=block|dependencies=mediawiki.util,mediawiki.api]|Massblock.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|dependencies=mediawiki.util]|markblocked.js * mediawiki.toolbar[ResourceLoader|hidden]|mediawiki.toolbar.js * markAdmins[ResourceLoader|dependencies=mediawiki.util,mediawiki.api]|markAdmins.js <!-- == broken-gadgets == * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader|dependencies=mediawiki.util]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * colorcats|category-colorcode.css * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * autodel [ResourceLoader|dependencies=mediawiki.cookie,mediawiki.util,mediawiki.user,user,jquery.ui|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js --> p3lk3r2y3rikbeswewbh2htg5ljn62b 14529 14528 2026-07-22T21:46:42Z Codename Noreste 3207 Another fix. 14529 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|hidden|default|dependencies=mediawiki.util]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default|dependencies=mediawiki.util]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js * GetCollection[ResourceLoader|dependencies=mediawiki.util]|collectionparser.js * Global-Subpages[ResourceLoader|dependecies=mediawiki.api,@wikimedia/codex]|Global-Subpages.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=ext.gadget.mediawiki.toolbar|rights=edit]|DeluxeBar.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js * BookCat[ResourceLoader]|BookCat.js * HotCat[ResourceLoader]|HotCat.js * OneClickWelcomer[ResourceLoader|dependencies=site,mediawiki.util]|OneClickWelcomer.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook|dependencies=mediawiki.util]|sixtabs.js == admin-gadgets == * modrollback[ResourceLoader|rights=rollback]|modrollback.js * subpages[ResourceLoader|rights=delete|dependencies=mediawiki.util]|subpages.js * Massblock[ResourceLoader|rights=block|dependencies=mediawiki.util,mediawiki.api]|Massblock.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|dependencies=mediawiki.util]|markblocked.js * mediawiki.toolbar[ResourceLoader|hidden]|mediawiki.toolbar.js * markAdmins[ResourceLoader|dependencies=mediawiki.util,mediawiki.api]|markAdmins.js <!-- == broken-gadgets == * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader|dependencies=mediawiki.util]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * colorcats|category-colorcode.css * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * autodel [ResourceLoader|dependencies=mediawiki.cookie,mediawiki.util,mediawiki.user,user,jquery.ui|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js --> nyv0lpfog9918f3wle8mm53g85cc64i 14530 14529 2026-07-23T12:23:46Z Sophivorus 3088 Fix gadget name 14530 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|hidden|default|dependencies=mediawiki.util]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default|dependencies=mediawiki.util]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js * GetCollection[ResourceLoader|dependencies=mediawiki.util]|collectionparser.js * Subpages[ResourceLoader|dependecies=mediawiki.api,@wikimedia/codex]|Subpages.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=ext.gadget.mediawiki.toolbar|rights=edit]|DeluxeBar.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js * BookCat[ResourceLoader]|BookCat.js * HotCat[ResourceLoader]|HotCat.js * OneClickWelcomer[ResourceLoader|dependencies=site,mediawiki.util]|OneClickWelcomer.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook|dependencies=mediawiki.util]|sixtabs.js == admin-gadgets == * modrollback[ResourceLoader|rights=rollback]|modrollback.js * subpages[ResourceLoader|rights=delete|dependencies=mediawiki.util]|subpages.js * Massblock[ResourceLoader|rights=block|dependencies=mediawiki.util,mediawiki.api]|Massblock.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|dependencies=mediawiki.util]|markblocked.js * mediawiki.toolbar[ResourceLoader|hidden]|mediawiki.toolbar.js * markAdmins[ResourceLoader|dependencies=mediawiki.util,mediawiki.api]|markAdmins.js <!-- == broken-gadgets == * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader|dependencies=mediawiki.util]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * colorcats|category-colorcode.css * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * autodel [ResourceLoader|dependencies=mediawiki.cookie,mediawiki.util,mediawiki.user,user,jquery.ui|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js --> gcgggk6khjd6fro7j55cq5h9iadwd8y 14531 14530 2026-08-01T17:21:50Z QueerEcofeminist 1879 [[:en:MediaWiki:Gadgets-definition]] पासून १८३ आवर्तने आयात केलीत 14530 wikitext text/x-wiki == browse-gadgets == * wikidialog[ResourceLoader|hidden|default|dependencies=mediawiki.util]|wikidialog.js * CommentsInLocalTime[ResourceLoader]|CommentsInLocalTime.js * sidebartranslate[ResourceLoader]|langcode2name.js|sidebartranslate.js * SpecialSearch[ResourceLoader]|SpecialSearch.js * rightsfilter[ResourceLoader]|rightsfilter.js * contribsrange[ResourceLoader]|contribsrange.js * background-awesomeness|background-awesomeness.css * subject-pages[ResourceLoader]|subjects.css|subjects.js * navpop[ResourceLoader]|navpop.js|navpop.css * commons-file[ResourceLoader|default|dependencies=mediawiki.util]|commons-file.js * UTCLiveClock[ResourceLoader]|UTCLiveClock.js * GetCollection[ResourceLoader|dependencies=mediawiki.util]|collectionparser.js * Subpages[ResourceLoader|dependecies=mediawiki.api,@wikimedia/codex]|Subpages.js == edit-gadgets == * wiked[ResourceLoader]|wiked.js * DeluxeBar[ResourceLoader|dependencies=ext.gadget.mediawiki.toolbar|rights=edit]|DeluxeBar.js * searchbox[ResourceLoader]|lib-beau.js|searchbox.js * BookCat[ResourceLoader]|BookCat.js * HotCat[ResourceLoader]|HotCat.js * OneClickWelcomer[ResourceLoader|dependencies=site,mediawiki.util]|OneClickWelcomer.js == tab-gadgets == * purge[ResourceLoader|dependencies=mediawiki.util]|purge.js * bottomtabs[ResourceLoader]|bottomtabs.css|bottomtabs.js * sixtabs[ResourceLoader|skins=monobook|dependencies=mediawiki.util]|sixtabs.js == admin-gadgets == * modrollback[ResourceLoader|rights=rollback]|modrollback.js * subpages[ResourceLoader|rights=delete|dependencies=mediawiki.util]|subpages.js * Massblock[ResourceLoader|rights=block|dependencies=mediawiki.util,mediawiki.api]|Massblock.js * CleanDeleteReasons[ResourceLoader|rights=delete]|CleanDeleteReasons.js * markblocked[ResourceLoader|dependencies=mediawiki.util]|markblocked.js * mediawiki.toolbar[ResourceLoader|hidden]|mediawiki.toolbar.js * markAdmins[ResourceLoader|dependencies=mediawiki.util,mediawiki.api]|markAdmins.js <!-- == broken-gadgets == * Twinklerevert[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklefluff.js * twinklespeedy[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklespeedy.js * twinklewarn[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinklewarn.js * Twinkleunlink[ResourceLoader|dependencies=mediawiki.util,jquery.ui]|twinkle.js|twinkle.css|twinkleunlink.js * toolboxcompat[ResourceLoader]|toolboxcompat.js * edittop[ResourceLoader|dependencies=mediawiki.util]|edittop.js * Special_characters[ResourceLoader]|Special_characters.js * colorcats|category-colorcode.css * wkBookCreator[ResourceLoader]|wknightcore.js|wkcategorize.js|wkeditinsert.js|wkdesigner.js| * autodel [ResourceLoader|dependencies=mediawiki.cookie,mediawiki.util,mediawiki.user,user,jquery.ui|rights=delete]|autodel.js * twinkledelimages[ResourceLoader|rights=delete]|twinkle.js|twinkle.css|twinkledelimages.js * extlinks[ResourceLoader|dependencies=mediawiki.util]|extlinks.js --> gcgggk6khjd6fro7j55cq5h9iadwd8y मिडियाविकी:Gadget-HotCat.js 8 3200 15046 7909 2026-04-20T23:50:46Z Codename Noreste 3207 Importing from [[:q:MediaWiki:Gadget-HotCat.js]]. 15046 javascript text/javascript window.hotcat_translations_from_commons = true; /* This imports the latest version of HotCat from Commons. HotCat is a gadget to make changes to categories much easier. Full documentation can be found at http://commons.wikimedia.org/wiki/Help:Gadget-HotCat */ mw.loader.load( '//commons.wikimedia.org/w/index.php?title=MediaWiki:Gadget-HotCat.js&action=raw&ctype=text/javascript' ); d04l6ms26ytvd8ef5ldbo81xqdqueda 15047 15046 2026-08-01T17:30:31Z QueerEcofeminist 1879 [[:en:MediaWiki:Gadget-HotCat.js]] पासून १ आवर्तन आयात केलीत 15046 javascript text/javascript window.hotcat_translations_from_commons = true; /* This imports the latest version of HotCat from Commons. HotCat is a gadget to make changes to categories much easier. Full documentation can be found at http://commons.wikimedia.org/wiki/Help:Gadget-HotCat */ mw.loader.load( '//commons.wikimedia.org/w/index.php?title=MediaWiki:Gadget-HotCat.js&action=raw&ctype=text/javascript' ); d04l6ms26ytvd8ef5ldbo81xqdqueda साचा:Nowrap 10 3271 14902 11132 2015-11-28T10:13:53Z Edokter 3641 Adapt comment; edits inside noinclude blocks should not affect job queue, but won't kill parser either way. 14902 wikitext text/x-wiki <span class="nowrap">{{{1}}}</span><noinclude> {{documentation}} <!-- Categories go on the /doc page; interwikis go to Wikidata. --> </noinclude> avb5tcymgupik1ikutqclidkj9tnitx 14903 13432 2023-04-02T10:51:56Z Leaderboard 2891 1 revision imported from [[:w:Template:Nowrap]] 14903 wikitext text/x-wiki <span class="nowrap">{{{1}}}</span><noinclude> {{documentation}} <!-- Categories go on the /doc page; interwikis go to Wikidata. --> </noinclude> avb5tcymgupik1ikutqclidkj9tnitx 14904 14903 2023-04-02T22:09:44Z Tacsipacsi 1837 Tacsipacsi moved page [[Transwiki:Nowrap]] to [[Template:Nowrap]]: yet again 14903 wikitext text/x-wiki <span class="nowrap">{{{1}}}</span><noinclude> {{documentation}} <!-- Categories go on the /doc page; interwikis go to Wikidata. --> </noinclude> avb5tcymgupik1ikutqclidkj9tnitx 14905 14904 2024-07-15T23:12:29Z Dialysis Machine 3642 Sn00-Cue-Sn00-Cue-Sn00-Cue-Sn00-Cue-Sn00-Cue-Sn00-Cue 14905 wikitext text/x-wiki [[File:Dialysis.png]] arxcxcw31q20mjk7c2d6mx75n4r4gxv 14906 14905 2024-07-15T23:23:50Z Jan.Kamenicek 3643 rv vandalism 14906 wikitext text/x-wiki <span class="nowrap">{{{1}}}</span><noinclude> {{documentation}} <!-- Categories go on the /doc page; interwikis go to Wikidata. --> </noinclude> avb5tcymgupik1ikutqclidkj9tnitx 14907 14906 2024-07-16T02:26:59Z Kittycataclysm 3644 Protected "[[Template:Nowrap]]": high impact page ([Edit=Allow only autoconfirmed users] (indefinite) [Move=Allow only autoconfirmed users] (indefinite)) 14906 wikitext text/x-wiki <span class="nowrap">{{{1}}}</span><noinclude> {{documentation}} <!-- Categories go on the /doc page; interwikis go to Wikidata. --> </noinclude> avb5tcymgupik1ikutqclidkj9tnitx 14908 14907 2025-01-25T22:01:25Z ExE Boss 2914 Use <[[mw:Special:MyLanguage/Help:Transclusion#<onlyinclude>|onlyinclude]]> and [[mw:Special:MyLanguage/Help:TemplateStyles|TemplateStyles]] 14908 wikitext text/x-wiki <onlyinclude><templatestyles src="Template:Nowrap/styles.css"/><span class="nowrap">{{{1}}}</span></onlyinclude> {{Documentation}} <!-- Categories go on the /doc page; interwikis go to Wikidata. --> 68yaxpsvn72zbfdg10f7zdmhugs22et 14909 14908 2026-08-01T17:28:39Z QueerEcofeminist 1879 [[:en:Template:Nowrap]] पासून ७ आवर्तने आयात केलीत 14908 wikitext text/x-wiki <onlyinclude><templatestyles src="Template:Nowrap/styles.css"/><span class="nowrap">{{{1}}}</span></onlyinclude> {{Documentation}} <!-- Categories go on the /doc page; interwikis go to Wikidata. --> 68yaxpsvn72zbfdg10f7zdmhugs22et आंबील 0 3280 14337 13352 2026-08-01T16:10:09Z QueerEcofeminist 1879 भर घातली, साचे लावले (via JWB) 14337 wikitext text/x-wiki {{recipe summary | category = | servings = | time = १५ तास | difficulty = <!-- Should if provided contain a number between 1 and 5 --> | image = | energy = <!-- Should if provided contain the number of calories and cal (can include kJ)--> | note = }} '''आंबील''' करण्यासाठी [[ज्वारी]] किंवा [[नाचणी]] चे पीठ रात्री किंवा किमान १२-१५ तास भिजवुन मग त्याला शिजवितात.शिजवितांना मीठ (कोणी जीरेही ) टाकतात.आवडीप्रमाणे घट्ट वा पातळ ठेवतात.[[गौरी]] अथवा [[महालक्ष्मी]] च्या वेळेस हा पदार्थ जरूर करतातच. तो एक कुळाचार आहे.लाकडाने पेटविलेल्या चुलीवर केलेली आंबील स्वादिष्ट लागते. [[वर्ग:नाष्ट्याचे पदार्थ]] e7h2rqhkitqxelueyjtyd2a06yqgux5 आलू पराठा 0 3340 14342 13062 2026-08-01T17:07:40Z QueerEcofeminist 1879 भर घातली, साचे लावले 14342 wikitext text/x-wiki '''आलू पराठा''' हा खाद्यपदार्थ उत्तर भारतात विशेषतः प्रचलित आहे. गव्हाच्या पोळीत उकडलेल्या बटाट्याचे [[तिखट]], [[मीठ]], [[जिरे]] इ. घालून केलेले सारण भरून हा पदार्थ तयार केला जातो. == साहित्य == == कृती == == नोंद == [[वर्ग:पराठे]] aib4rn9ne79lzom1ojp8g4fb0vuv6cb 14343 14342 2026-08-01T17:09:21Z QueerEcofeminist 1879 भर घातली, साचे लावले 14343 wikitext text/x-wiki {{recipe summary | category = | servings = | time = ३० मिनिटे | difficulty = 3 <!-- Should if provided contain a number between 1 and 5 --> | image = [[Alu Paratha.jpg|300px]] | energy = <!-- Should if provided contain the number of calories and cal (can include kJ)--> | note = }} '''आलू पराठा''' हा खाद्यपदार्थ उत्तर भारतात विशेषतः प्रचलित आहे. गव्हाच्या पोळीत उकडलेल्या बटाट्याचे [[तिखट]], [[मीठ]], [[जिरे]] इ. घालून केलेले सारण भरून हा पदार्थ तयार केला जातो. == साहित्य == == कृती == == नोंद == [[वर्ग:पराठे]] ovp8br96lcrw835706xwvv4nyc4jeos 14344 14343 2026-08-01T17:09:47Z QueerEcofeminist 1879 bhar 14344 wikitext text/x-wiki {{recipe summary | category = | servings = | time = ३० मिनिटे | difficulty = 3 <!-- Should if provided contain a number between 1 and 5 --> | image = [[file:Alu Paratha.jpg|300px]] | energy = <!-- Should if provided contain the number of calories and cal (can include kJ)--> | note = }} '''आलू पराठा''' हा खाद्यपदार्थ उत्तर भारतात विशेषतः प्रचलित आहे. गव्हाच्या पोळीत उकडलेल्या बटाट्याचे [[तिखट]], [[मीठ]], [[जिरे]] इ. घालून केलेले सारण भरून हा पदार्थ तयार केला जातो. == साहित्य == == कृती == == नोंद == [[वर्ग:पराठे]] 9pfcvab2ma3kydnf9uoa1x8ry9e74mt 14345 14344 2026-08-01T17:11:19Z QueerEcofeminist 1879 /* साहित्य */ 14345 wikitext text/x-wiki {{recipe summary | category = | servings = | time = ३० मिनिटे | difficulty = 3 <!-- Should if provided contain a number between 1 and 5 --> | image = [[file:Alu Paratha.jpg|300px]] | energy = <!-- Should if provided contain the number of calories and cal (can include kJ)--> | note = }} '''आलू पराठा''' हा खाद्यपदार्थ उत्तर भारतात विशेषतः प्रचलित आहे. गव्हाच्या पोळीत उकडलेल्या बटाट्याचे [[तिखट]], [[मीठ]], [[जिरे]] इ. घालून केलेले सारण भरून हा पदार्थ तयार केला जातो. == साहित्य == * गव्हाचे पीठ * मीठ * हिरवी मिरची * बारीक चिरलेली कोथिंबीर * उकडून कुस्करून घेतलेला बटाटा * पाणी == कृती == == नोंद == [[वर्ग:पराठे]] ts6siiom6fglfmn1vn2x0jpafzj4yda अनरसा 0 3355 14336 14321 2026-08-01T16:08:49Z QueerEcofeminist 1879 भर घातली, साचे लावले (via JWB) 14336 wikitext text/x-wiki {{recipe summary | category = | servings = | time = १२ तास तयारी आणि प्रत्यक्ष बनवायला १ तास | difficulty = <!-- Should if provided contain a number between 1 and 5 --> | image = [[File:अनारसा (गोड पदार्थ).jpg|300px]] | energy = <!-- Should if provided contain the number of calories and cal (can include kJ)--> | note = }} '''अनरसा''' हा एक भारतीय खाद्यपदार्थ आहे. पाण्यात पाच-सहा दिवस भिजवून आंबवलेले तांदूळ व [[गूळ]] यांपासून हा बनतो. त्यासाठी साजूक तूप, [[वेलदोडा]], खसखस यांचाही वापर होतो. अनरसाच्या ओलसर पिठाच्या चकत्या तुपात तळण्यापू्वी त्यांच्यावर खसखस पसरण्याची रीत आहे. <ref>{{स्रोत बातमी |दुवा=http://www.twistoffood.com/anarsa/ |title= अनरसा |प्रकाशक=ट्विस्टऑफ़फ़ूड.कॉम |दिनांक=१० सेप्टेंबर २०१४ | प्राप्त दिनांक=}}</ref> हा विशेषतः [[दिवाळी]]त आणि अधिक महिन्यात जावयाला वाण देण्यासाठी बनवतात. हा पदार्थ महाराष्ट्राप्रमाणे पंजाबमध्येही लोकप्रिय आहे. पंजाबमध्ये बहुधा खसखस वापरत नाहीत. संस्कृतमध्ये अनरश्याला अपूप म्हणतात.<ref>{{स्रोत बातमी |दुवा=http://www.amarujala.com/chandigarh/special-sweet-dish-anarsa-recipee-for-diwali-hindi-news|title=दीवाली पर बनती है ये स्पेशल मिठाई |प्रकाशक=अमरउजाला.कॉम |दिनांक=२२ ऑक्टोबर २०१४| प्राप्त दिनांक=}}</ref> सामान्यपणे दीपावलीच्या सणात महाराष्ट्रात आणि बिहारमध्ये बनविल्या जाणाऱ्या विविध उपहारांतील हा एक पदार्थ आहे.<ref>{{स्रोत बातमी |दुवा=https://books.google.co.in/books?id=K-AYdQARNVYC&pg=PA100&lpg=PA100&dq=Changing+dietary+patterns+and+habits&source=bl&ots=k9PXROQUKN&sig=48GeG17C-NdDh1wmB_hCWQaBzZs&hl=en&sa=X&ved=0ahUKEwjmqd2J4-PQAhUiR48KHRtxAx4Q6AEIJTAB#v=onepage&q=Changing%20dietary%20patterns%20and%20habits&f=false |title=चेंजिंग डाइटरी पैटर्न्स एंड हैबिट्स : अ सोसिओ-कल्चरल स्टडी ऑफ़ बिहार |प्रकाशक=बुक्स.गूगल.को.इन |दिनांक=१९ मे २०१६ | प्राप्त दिनांक=}}</ref> महाराष्ट्रात विशेषकरून [[अधिक मास]] काळात जावयाला ३३ अनारसे भेट देण्याची पद्धती आहे. ==संदर्भ== [[वर्ग:महाराष्ट्रातील खाद्यपदार्थ]] [[वर्ग:नाष्ट्याचे पदार्थ]] [[वर्ग:तळलेले पदार्थ]] [[वर्ग:दिवाळी फराळ]] [[वर्ग:गोड पदार्थ]] [[वर्ग:सण आणि उत्सव]] sp4v78h9wysb0y3ws5kw7x7n41vbve7 विभाग:TScope 828 3545 15029 2016-10-12T19:37:34Z Pi zero 2546 create 15029 Scribunto text/plain local export = {} export.dispatch = function( frame ) local title = frame.args[1] local args = {} for v, k in pairs( frame:getParent().args ) do args[v] = k end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ tonumber( v ) - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.dispatchNamed = function( frame ) local title = frame.args[1] local args = {} for v, k in pairs( frame:getParent().args ) do if type( v ) ~= "number" then args[v] = k end end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ tonumber( v ) - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.static = function( frame ) return frame:getParent():getTitle() end local function tabulate( args ) local s = '' for k, v in pairs( args ) do s = s .. '|-\n| ' .. k .. '\n| <code>' .. v .. '</code>\n' end if s ~= '' then s = '{| class="wikitable"\n|-\n! key\n! value\n' .. s .. '|}' end return s end export.echo = function( frame ) local mp = tabulate( frame.args ) local cp = tabulate( frame:getParent().args ) if mp ~= '' then mp = 'module parameters:\n' .. mp .. '\n' end if cp ~= '' then cp = 'context parameters:\n' .. cp .. '\n' else cp = 'no context parameters.\n' end return mp .. cp end return export a9twe64v7hbxuqd38u2i6ae5ri9xzjr 15030 15029 2016-10-12T23:38:37Z Pi zero 2546 push 15030 Scribunto text/plain local export = {} export.dispatch = function( frame ) local title = frame.args[1] local args = {} for v, k in pairs( frame:getParent().args ) do args[v] = k end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ tonumber( v ) - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.push = function( frame ) local title = frame.args[1] local args = {} local displace = 0; for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then local nv = tonumber( v ) - 1 args[ nv ] = k displace = math.max( displace, nv ) end end end for v, k in pairs( frame:getParent().args ) do if type( v ) == "number" then args[ tonumber( v ) + displace ] = k else args[v] = k end end for v, k in pairs( frame.args ) do if type( v ) ~= "number" then args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.dispatchNamed = function( frame ) local title = frame.args[1] local args = {} for v, k in pairs( frame:getParent().args ) do if type( v ) ~= "number" then args[v] = k end end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ tonumber( v ) - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.static = function( frame ) return frame:getParent():getTitle() end local function tabulate( args ) local s = '' for k, v in pairs( args ) do s = s .. '|-\n| ' .. k .. '\n| <code>' .. v .. '</code>\n' end if s ~= '' then s = '{| class="wikitable"\n|-\n! key\n! value\n' .. s .. '|}' end return s end export.echo = function( frame ) local mp = tabulate( frame.args ) local cp = tabulate( frame:getParent().args ) if mp ~= '' then mp = 'module parameters:\n' .. mp .. '\n' end if cp ~= '' then cp = 'context parameters:\n' .. cp .. '\n' else cp = 'no context parameters.\n' end return mp .. cp end return export h8x1ml38t5lypcnxnm0mzdph81j8yx2 15031 15030 2016-10-12T23:43:31Z Pi zero 2546 nomenclature 15031 Scribunto text/plain local export = {} export.dispatch = function( frame ) local title = frame.args[1] local args = {} local displace = 0; for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then local nv = tonumber( v ) - 1 args[ nv ] = k displace = math.max( displace, nv ) end end end for v, k in pairs( frame:getParent().args ) do if type( v ) == "number" then args[ tonumber( v ) + displace ] = k else args[v] = k end end for v, k in pairs( frame.args ) do if type( v ) ~= "number" then args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.dispatchOverride = function( frame ) local title = frame.args[1] local args = {} for v, k in pairs( frame:getParent().args ) do args[v] = k end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ tonumber( v ) - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.dispatchNamed = function( frame ) local title = frame.args[1] local args = {} for v, k in pairs( frame:getParent().args ) do if type( v ) ~= "number" then args[v] = k end end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ tonumber( v ) - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.static = function( frame ) return frame:getParent():getTitle() end local function tabulate( args ) local s = '' for k, v in pairs( args ) do s = s .. '|-\n| ' .. k .. '\n| <code>' .. v .. '</code>\n' end if s ~= '' then s = '{| class="wikitable"\n|-\n! key\n! value\n' .. s .. '|}' end return s end export.echo = function( frame ) local mp = tabulate( frame.args ) local cp = tabulate( frame:getParent().args ) if mp ~= '' then mp = 'module parameters:\n' .. mp .. '\n' end if cp ~= '' then cp = 'context parameters:\n' .. cp .. '\n' else cp = 'no context parameters.\n' end return mp .. cp end return export hjowo8eda82iri4kb2kow7u6zd4l2yg 15032 15031 2016-10-13T02:21:29Z Pi zero 2546 upgrade 15032 Scribunto text/plain local export = {} export.dispatch = function( frame ) local title = frame.args[1] local args = {} local displace = 0; for v, k in pairs( frame.args ) do if (type( v ) == "number") and (v ~= 1) then args[ v - 1 ] = k displace = math.max( displace, (v - 1) ) end end for v, k in pairs( frame:getParent().args ) do if type( v ) == "number" then args[ displace + v ] = k else args[v] = k end end for v, k in pairs( frame.args ) do if type( v ) ~= "number" then args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.dispatchSuffix = function( frame ) local title = frame.args[1] local args = {} local displace = 0; for v, k in pairs( frame:getParent().args ) do if type( v ) == "number" then displace = math.max( displace, v ) end args[v] = k end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ displace + v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.dispatchOverride = function( frame ) local title = frame.args[1] local args = {} for v, k in pairs( frame:getParent().args ) do args[v] = k end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.dispatchNamed = function( frame ) local title = frame.args[1] local args = {} for v, k in pairs( frame:getParent().args ) do if type( v ) ~= "number" then args[v] = k end end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.static = function( frame ) return frame:getParent():getTitle() end local function tabulate( args ) local s = '' for k, v in pairs( args ) do s = s .. '|-\n| ' .. k .. '\n| <code>' .. v .. '</code>\n' end if s ~= '' then s = '{| class="wikitable"\n|-\n! key\n! value\n' .. s .. '|}' end return s end export.echo = function( frame ) local mp = tabulate( frame.args ) local cp = tabulate( frame:getParent().args ) if mp ~= '' then mp = 'module parameters:\n' .. mp .. '\n' end if cp ~= '' then cp = 'context parameters:\n' .. cp .. '\n' else cp = 'no context parameters.\n' end return mp .. cp end return export g9dakvfsw8rqc8z6vamq8654sj2fw77 15033 15032 2016-10-13T10:28:12Z Pi zero 2546 nomenclature 15033 Scribunto text/plain local export = {} export.prepend = function( frame ) local title = frame.args[1] local args = {} local displace = 0; for v, k in pairs( frame.args ) do if (type( v ) == "number") and (v ~= 1) then args[ v - 1 ] = k displace = math.max( displace, (v - 1) ) end end for v, k in pairs( frame:getParent().args ) do if type( v ) == "number" then args[ displace + v ] = k else args[v] = k end end for v, k in pairs( frame.args ) do if type( v ) ~= "number" then args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.append = function( frame ) local title = frame.args[1] local args = {} local displace = 0; for v, k in pairs( frame:getParent().args ) do if type( v ) == "number" then displace = math.max( displace, v ) end args[v] = k end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ displace + v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.override = function( frame ) local title = frame.args[1] local args = {} for v, k in pairs( frame:getParent().args ) do args[v] = k end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.drop = function( frame ) local title = frame.args[1] local args = {} for v, k in pairs( frame:getParent().args ) do if type( v ) ~= "number" then args[v] = k end end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.static = function( frame ) return frame:getParent():getTitle() end local function tabulate( args ) local s = '' for k, v in pairs( args ) do s = s .. '|-\n| ' .. k .. '\n| <code>' .. v .. '</code>\n' end if s ~= '' then s = '{| class="wikitable"\n|-\n! key\n! value\n' .. s .. '|}' end return s end export.echo = function( frame ) local mp = tabulate( frame.args ) local cp = tabulate( frame:getParent().args ) if mp ~= '' then mp = 'module parameters:\n' .. mp .. '\n' end if cp ~= '' then cp = 'context parameters:\n' .. cp .. '\n' else cp = 'no context parameters.\n' end return mp .. cp end return export lu0uzf3rrp5i8j0hyxv2e2ucb0589a4 15034 15033 2016-10-13T10:49:55Z Pi zero 2546 vanilla 15034 Scribunto text/plain local export = {} export.call = function( frame ) local title = frame.args[1] local args = {} for v, k in pairs( frame:getParent().args ) do args[v] = k end return frame:expandTemplate{ title = title, args = args } end export.prepend = function( frame ) local title = frame.args[1] local args = {} local displace = 0; for v, k in pairs( frame.args ) do if (type( v ) == "number") and (v ~= 1) then args[ v - 1 ] = k displace = math.max( displace, (v - 1) ) end end for v, k in pairs( frame:getParent().args ) do if type( v ) == "number" then args[ displace + v ] = k else args[v] = k end end for v, k in pairs( frame.args ) do if type( v ) ~= "number" then args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.append = function( frame ) local title = frame.args[1] local args = {} local displace = 0; for v, k in pairs( frame:getParent().args ) do if type( v ) == "number" then displace = math.max( displace, v ) end args[v] = k end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ displace + v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.override = function( frame ) local title = frame.args[1] local args = {} for v, k in pairs( frame:getParent().args ) do args[v] = k end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.drop = function( frame ) local title = frame.args[1] local args = {} for v, k in pairs( frame:getParent().args ) do if type( v ) ~= "number" then args[v] = k end end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.static = function( frame ) return frame:getParent():getTitle() end local function tabulate( args ) local s = '' for k, v in pairs( args ) do s = s .. '|-\n| ' .. k .. '\n| <code>' .. v .. '</code>\n' end if s ~= '' then s = '{| class="wikitable"\n|-\n! key\n! value\n' .. s .. '|}' end return s end export.echo = function( frame ) local mp = tabulate( frame.args ) local cp = tabulate( frame:getParent().args ) if mp ~= '' then mp = 'module parameters:\n' .. mp .. '\n' end if cp ~= '' then cp = 'context parameters:\n' .. cp .. '\n' else cp = 'no context parameters.\n' end return mp .. cp end return export ogt9i0n4ptc97fc6s4pen3fsipcwlw2 15035 15034 2016-10-13T10:52:54Z Pi zero 2546 rm vanilla, reorder 15035 Scribunto text/plain local export = {} export.override = function( frame ) local title = frame.args[1] local args = {} for v, k in pairs( frame:getParent().args ) do args[v] = k end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.prepend = function( frame ) local title = frame.args[1] local args = {} local displace = 0; for v, k in pairs( frame.args ) do if (type( v ) == "number") and (v ~= 1) then args[ v - 1 ] = k displace = math.max( displace, (v - 1) ) end end for v, k in pairs( frame:getParent().args ) do if type( v ) == "number" then args[ displace + v ] = k else args[v] = k end end for v, k in pairs( frame.args ) do if type( v ) ~= "number" then args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.append = function( frame ) local title = frame.args[1] local args = {} local displace = 0; for v, k in pairs( frame:getParent().args ) do if type( v ) == "number" then displace = math.max( displace, v ) end args[v] = k end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ displace + v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.drop = function( frame ) local title = frame.args[1] local args = {} for v, k in pairs( frame:getParent().args ) do if type( v ) ~= "number" then args[v] = k end end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.static = function( frame ) return frame:getParent():getTitle() end local function tabulate( args ) local s = '' for k, v in pairs( args ) do s = s .. '|-\n| ' .. k .. '\n| <code>' .. v .. '</code>\n' end if s ~= '' then s = '{| class="wikitable"\n|-\n! key\n! value\n' .. s .. '|}' end return s end export.echo = function( frame ) local mp = tabulate( frame.args ) local cp = tabulate( frame:getParent().args ) if mp ~= '' then mp = 'module parameters:\n' .. mp .. '\n' end if cp ~= '' then cp = 'context parameters:\n' .. cp .. '\n' else cp = 'no context parameters.\n' end return mp .. cp end return export 01g4sca3crq2hm0f72suaw4km7zgf35 15036 15035 2016-10-13T12:19:20Z Pi zero 2546 Protected "[[Module:TScope]]": high-impact template ([Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite)) 15035 Scribunto text/plain local export = {} export.override = function( frame ) local title = frame.args[1] local args = {} for v, k in pairs( frame:getParent().args ) do args[v] = k end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.prepend = function( frame ) local title = frame.args[1] local args = {} local displace = 0; for v, k in pairs( frame.args ) do if (type( v ) == "number") and (v ~= 1) then args[ v - 1 ] = k displace = math.max( displace, (v - 1) ) end end for v, k in pairs( frame:getParent().args ) do if type( v ) == "number" then args[ displace + v ] = k else args[v] = k end end for v, k in pairs( frame.args ) do if type( v ) ~= "number" then args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.append = function( frame ) local title = frame.args[1] local args = {} local displace = 0; for v, k in pairs( frame:getParent().args ) do if type( v ) == "number" then displace = math.max( displace, v ) end args[v] = k end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ displace + v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.drop = function( frame ) local title = frame.args[1] local args = {} for v, k in pairs( frame:getParent().args ) do if type( v ) ~= "number" then args[v] = k end end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.static = function( frame ) return frame:getParent():getTitle() end local function tabulate( args ) local s = '' for k, v in pairs( args ) do s = s .. '|-\n| ' .. k .. '\n| <code>' .. v .. '</code>\n' end if s ~= '' then s = '{| class="wikitable"\n|-\n! key\n! value\n' .. s .. '|}' end return s end export.echo = function( frame ) local mp = tabulate( frame.args ) local cp = tabulate( frame:getParent().args ) if mp ~= '' then mp = 'module parameters:\n' .. mp .. '\n' end if cp ~= '' then cp = 'context parameters:\n' .. cp .. '\n' else cp = 'no context parameters.\n' end return mp .. cp end return export 01g4sca3crq2hm0f72suaw4km7zgf35 15037 15036 2016-10-26T17:41:10Z Pi zero 2546 shiftLeft 15037 Scribunto text/plain local export = {} export.override = function( frame ) local title = frame.args[1] local args = {} for v, k in pairs( frame:getParent().args ) do args[v] = k end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.prepend = function( frame ) local title = frame.args[1] local args = {} local displace = 0; for v, k in pairs( frame.args ) do if (type( v ) == "number") and (v ~= 1) then args[ v - 1 ] = k displace = math.max( displace, (v - 1) ) end end for v, k in pairs( frame:getParent().args ) do if type( v ) == "number" then args[ displace + v ] = k else args[v] = k end end for v, k in pairs( frame.args ) do if type( v ) ~= "number" then args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.append = function( frame ) local title = frame.args[1] local args = {} local displace = 0; for v, k in pairs( frame:getParent().args ) do if type( v ) == "number" then displace = math.max( displace, v ) end args[v] = k end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ displace + v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.drop = function( frame ) local title = frame.args[1] local args = {} for v, k in pairs( frame:getParent().args ) do if type( v ) ~= "number" then args[v] = k end end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.shiftLeft = function( frame ) local title = frame.args[1] local args = {} local displace = tonumber( frame.args[2] ) if displace == nil then displace = 0 end for v, k in pairs( frame:getParent().args ) do if type( v ) == "number" then if v >= displace then args[ v - displace ] = k end else args[v] = k end end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= -1 then args[ v - 1 ] = k end else args[v] = k end end end export.static = function( frame ) return frame:getParent():getTitle() end local function tabulate( args ) local s = '' for k, v in pairs( args ) do s = s .. '|-\n| ' .. k .. '\n| <code>' .. v .. '</code>\n' end if s ~= '' then s = '{| class="wikitable"\n|-\n! key\n! value\n' .. s .. '|}' end return s end export.echo = function( frame ) local mp = tabulate( frame.args ) local cp = tabulate( frame:getParent().args ) if mp ~= '' then mp = 'module parameters:\n' .. mp .. '\n' end if cp ~= '' then cp = 'context parameters:\n' .. cp .. '\n' else cp = 'no context parameters.\n' end return mp .. cp end return export nkztdj4tx0qndmouucbva6ch8c5hdox 15038 15037 2016-10-26T17:50:46Z Pi zero 2546 xambox 15038 Scribunto text/plain local export = {} export.override = function( frame ) local title = frame.args[1] local args = {} for v, k in pairs( frame:getParent().args ) do args[v] = k end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.prepend = function( frame ) local title = frame.args[1] local args = {} local displace = 0; for v, k in pairs( frame.args ) do if (type( v ) == "number") and (v ~= 1) then args[ v - 1 ] = k displace = math.max( displace, (v - 1) ) end end for v, k in pairs( frame:getParent().args ) do if type( v ) == "number" then args[ displace + v ] = k else args[v] = k end end for v, k in pairs( frame.args ) do if type( v ) ~= "number" then args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.append = function( frame ) local title = frame.args[1] local args = {} local displace = 0; for v, k in pairs( frame:getParent().args ) do if type( v ) == "number" then displace = math.max( displace, v ) end args[v] = k end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ displace + v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.drop = function( frame ) local title = frame.args[1] local args = {} for v, k in pairs( frame:getParent().args ) do if type( v ) ~= "number" then args[v] = k end end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.shiftLeft = function( frame ) local title = frame.args[1] local args = {} local displace = tonumber( frame.args[2] ) if displace == nil then displace = 0 end for v, k in pairs( frame:getParent().args ) do if type( v ) == "number" then if v >= displace then args[ v - displace ] = k end else args[v] = k end end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= -1 then args[ v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.static = function( frame ) return frame:getParent():getTitle() end local function tabulate( args ) local s = '' for k, v in pairs( args ) do s = s .. '|-\n| ' .. k .. '\n| <code>' .. v .. '</code>\n' end if s ~= '' then s = '{| class="wikitable"\n|-\n! key\n! value\n' .. s .. '|}' end return s end export.echo = function( frame ) local mp = tabulate( frame.args ) local cp = tabulate( frame:getParent().args ) if mp ~= '' then mp = 'module parameters:\n' .. mp .. '\n' end if cp ~= '' then cp = 'context parameters:\n' .. cp .. '\n' else cp = 'no context parameters.\n' end return mp .. cp end return export gy3iypg5notxt1i9focc2n66w933v69 15039 15038 2016-10-26T17:52:15Z Pi zero 2546 x 15039 Scribunto text/plain local export = {} export.override = function( frame ) local title = frame.args[1] local args = {} for v, k in pairs( frame:getParent().args ) do args[v] = k end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.prepend = function( frame ) local title = frame.args[1] local args = {} local displace = 0; for v, k in pairs( frame.args ) do if (type( v ) == "number") and (v ~= 1) then args[ v - 1 ] = k displace = math.max( displace, (v - 1) ) end end for v, k in pairs( frame:getParent().args ) do if type( v ) == "number" then args[ displace + v ] = k else args[v] = k end end for v, k in pairs( frame.args ) do if type( v ) ~= "number" then args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.append = function( frame ) local title = frame.args[1] local args = {} local displace = 0; for v, k in pairs( frame:getParent().args ) do if type( v ) == "number" then displace = math.max( displace, v ) end args[v] = k end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ displace + v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.drop = function( frame ) local title = frame.args[1] local args = {} for v, k in pairs( frame:getParent().args ) do if type( v ) ~= "number" then args[v] = k end end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.shiftLeft = function( frame ) local title = frame.args[1] local args = {} local displace = tonumber( frame.args[2] ) if displace == nil then displace = 0 end for v, k in pairs( frame:getParent().args ) do if type( v ) == "number" then if v >= displace then args[ v - displace ] = k end else args[v] = k end end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.static = function( frame ) return frame:getParent():getTitle() end local function tabulate( args ) local s = '' for k, v in pairs( args ) do s = s .. '|-\n| ' .. k .. '\n| <code>' .. v .. '</code>\n' end if s ~= '' then s = '{| class="wikitable"\n|-\n! key\n! value\n' .. s .. '|}' end return s end export.echo = function( frame ) local mp = tabulate( frame.args ) local cp = tabulate( frame:getParent().args ) if mp ~= '' then mp = 'module parameters:\n' .. mp .. '\n' end if cp ~= '' then cp = 'context parameters:\n' .. cp .. '\n' else cp = 'no context parameters.\n' end return mp .. cp end return export ege0wm0jtx6ynito7s99jidezena8ou 15040 15039 2016-10-26T17:54:50Z Pi zero 2546 x 15040 Scribunto text/plain local export = {} export.override = function( frame ) local title = frame.args[1] local args = {} for v, k in pairs( frame:getParent().args ) do args[v] = k end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v > 2 then args[ v - 2 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.prepend = function( frame ) local title = frame.args[1] local args = {} local displace = 0; for v, k in pairs( frame.args ) do if (type( v ) == "number") and (v ~= 1) then args[ v - 1 ] = k displace = math.max( displace, (v - 1) ) end end for v, k in pairs( frame:getParent().args ) do if type( v ) == "number" then args[ displace + v ] = k else args[v] = k end end for v, k in pairs( frame.args ) do if type( v ) ~= "number" then args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.append = function( frame ) local title = frame.args[1] local args = {} local displace = 0; for v, k in pairs( frame:getParent().args ) do if type( v ) == "number" then displace = math.max( displace, v ) end args[v] = k end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ displace + v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.drop = function( frame ) local title = frame.args[1] local args = {} for v, k in pairs( frame:getParent().args ) do if type( v ) ~= "number" then args[v] = k end end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.shiftLeft = function( frame ) local title = frame.args[1] local args = {} local displace = tonumber( frame.args[2] ) if displace == nil then displace = 0 end for v, k in pairs( frame:getParent().args ) do if type( v ) == "number" then if v >= displace then args[ v - displace ] = k end else args[v] = k end end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.static = function( frame ) return frame:getParent():getTitle() end local function tabulate( args ) local s = '' for k, v in pairs( args ) do s = s .. '|-\n| ' .. k .. '\n| <code>' .. v .. '</code>\n' end if s ~= '' then s = '{| class="wikitable"\n|-\n! key\n! value\n' .. s .. '|}' end return s end export.echo = function( frame ) local mp = tabulate( frame.args ) local cp = tabulate( frame:getParent().args ) if mp ~= '' then mp = 'module parameters:\n' .. mp .. '\n' end if cp ~= '' then cp = 'context parameters:\n' .. cp .. '\n' else cp = 'no context parameters.\n' end return mp .. cp end return export p9rikaka2b4zb7coxji8vdn6uqbi696 15041 15040 2016-10-26T17:56:04Z Pi zero 2546 Undo revision 4258628 by [[Special:Contributions/Pi zero|Pi zero]] ([[User talk:Pi zero|talk]]) 15041 Scribunto text/plain local export = {} export.override = function( frame ) local title = frame.args[1] local args = {} for v, k in pairs( frame:getParent().args ) do args[v] = k end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.prepend = function( frame ) local title = frame.args[1] local args = {} local displace = 0; for v, k in pairs( frame.args ) do if (type( v ) == "number") and (v ~= 1) then args[ v - 1 ] = k displace = math.max( displace, (v - 1) ) end end for v, k in pairs( frame:getParent().args ) do if type( v ) == "number" then args[ displace + v ] = k else args[v] = k end end for v, k in pairs( frame.args ) do if type( v ) ~= "number" then args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.append = function( frame ) local title = frame.args[1] local args = {} local displace = 0; for v, k in pairs( frame:getParent().args ) do if type( v ) == "number" then displace = math.max( displace, v ) end args[v] = k end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ displace + v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.drop = function( frame ) local title = frame.args[1] local args = {} for v, k in pairs( frame:getParent().args ) do if type( v ) ~= "number" then args[v] = k end end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.shiftLeft = function( frame ) local title = frame.args[1] local args = {} local displace = tonumber( frame.args[2] ) if displace == nil then displace = 0 end for v, k in pairs( frame:getParent().args ) do if type( v ) == "number" then if v >= displace then args[ v - displace ] = k end else args[v] = k end end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.static = function( frame ) return frame:getParent():getTitle() end local function tabulate( args ) local s = '' for k, v in pairs( args ) do s = s .. '|-\n| ' .. k .. '\n| <code>' .. v .. '</code>\n' end if s ~= '' then s = '{| class="wikitable"\n|-\n! key\n! value\n' .. s .. '|}' end return s end export.echo = function( frame ) local mp = tabulate( frame.args ) local cp = tabulate( frame:getParent().args ) if mp ~= '' then mp = 'module parameters:\n' .. mp .. '\n' end if cp ~= '' then cp = 'context parameters:\n' .. cp .. '\n' else cp = 'no context parameters.\n' end return mp .. cp end return export ege0wm0jtx6ynito7s99jidezena8ou 15042 15041 2016-10-26T17:56:49Z Pi zero 2546 x 15042 Scribunto text/plain local export = {} export.override = function( frame ) local title = frame.args[1] local args = {} for v, k in pairs( frame:getParent().args ) do args[v] = k end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.prepend = function( frame ) local title = frame.args[1] local args = {} local displace = 0; for v, k in pairs( frame.args ) do if (type( v ) == "number") and (v ~= 1) then args[ v - 1 ] = k displace = math.max( displace, (v - 1) ) end end for v, k in pairs( frame:getParent().args ) do if type( v ) == "number" then args[ displace + v ] = k else args[v] = k end end for v, k in pairs( frame.args ) do if type( v ) ~= "number" then args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.append = function( frame ) local title = frame.args[1] local args = {} local displace = 0; for v, k in pairs( frame:getParent().args ) do if type( v ) == "number" then displace = math.max( displace, v ) end args[v] = k end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ displace + v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.drop = function( frame ) local title = frame.args[1] local args = {} for v, k in pairs( frame:getParent().args ) do if type( v ) ~= "number" then args[v] = k end end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.shiftLeft = function( frame ) local title = frame.args[1] local args = {} local displace = tonumber( frame.args[2] ) if displace == nil then displace = 0 end for v, k in pairs( frame:getParent().args ) do if type( v ) == "number" then if v >= displace then args[ v - displace ] = k end else args[v] = k end end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v > 2 then args[ v - 2 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.static = function( frame ) return frame:getParent():getTitle() end local function tabulate( args ) local s = '' for k, v in pairs( args ) do s = s .. '|-\n| ' .. k .. '\n| <code>' .. v .. '</code>\n' end if s ~= '' then s = '{| class="wikitable"\n|-\n! key\n! value\n' .. s .. '|}' end return s end export.echo = function( frame ) local mp = tabulate( frame.args ) local cp = tabulate( frame:getParent().args ) if mp ~= '' then mp = 'module parameters:\n' .. mp .. '\n' end if cp ~= '' then cp = 'context parameters:\n' .. cp .. '\n' else cp = 'no context parameters.\n' end return mp .. cp end return export htrtlaj3j8njydcde9zqa40bswmvawu 15043 15042 2016-10-28T18:07:07Z Pi zero 2546 map 15043 Scribunto text/plain local export = {} export.override = function( frame ) local title = frame.args[1] local args = {} for v, k in pairs( frame:getParent().args ) do args[v] = k end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.prepend = function( frame ) local title = frame.args[1] local args = {} local displace = 0; for v, k in pairs( frame.args ) do if (type( v ) == "number") and (v ~= 1) then args[ v - 1 ] = k displace = math.max( displace, (v - 1) ) end end for v, k in pairs( frame:getParent().args ) do if type( v ) == "number" then args[ displace + v ] = k else args[v] = k end end for v, k in pairs( frame.args ) do if type( v ) ~= "number" then args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.append = function( frame ) local title = frame.args[1] local args = {} local displace = 0; for v, k in pairs( frame:getParent().args ) do if type( v ) == "number" then displace = math.max( displace, v ) end args[v] = k end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ displace + v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.drop = function( frame ) local title = frame.args[1] local args = {} for v, k in pairs( frame:getParent().args ) do if type( v ) ~= "number" then args[v] = k end end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.shiftLeft = function( frame ) local title = frame.args[1] local args = {} local displace = tonumber( frame.args[2] ) if displace == nil then displace = 0 end for v, k in pairs( frame:getParent().args ) do if type( v ) == "number" then if v >= displace then args[ v - displace ] = k end else args[v] = k end end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v > 2 then args[ v - 2 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.map = function( frame ) local title = frame.args[1] local displace = frame.args[2] if displace == nil then displace = 0 else displace = tonumber( displace ) end local args = {} local data = {} local maxv = 0 for v, k in pairs( frame:getParent().args ) do if (type( v ) ~= "number") then args[v] = k elseif v <= displace then args[v + 1] = k else data[v] = k maxv = math.max( v, maxv ) end end for v, k in pairs( frame.args ) do if type( v ) ~= "number" then args[v] = k elseif v > 2 then args[v - 1] = k end end local result = "" for v = 1, maxv do if data[v] ~= nil then args[1] = data[v] result = result .. frame:expandTemplate{ title = title, args = args } end end return result end export.static = function( frame ) return frame:getParent():getTitle() end local function tabulate( args ) local s = '' for k, v in pairs( args ) do s = s .. '|-\n| ' .. k .. '\n| <code>' .. v .. '</code>\n' end if s ~= '' then s = '{| class="wikitable"\n|-\n! key\n! value\n' .. s .. '|}' end return s end export.echo = function( frame ) local mp = tabulate( frame.args ) local cp = tabulate( frame:getParent().args ) if mp ~= '' then mp = 'module parameters:\n' .. mp .. '\n' end if cp ~= '' then cp = 'context parameters:\n' .. cp .. '\n' else cp = 'no context parameters.\n' end return mp .. cp end return export n3blx1g9jcetmcolf1n2fiuhyaql9nh 15044 15043 2016-11-18T19:36:43Z Pi zero 2546 15 revisions imported from [[:n:Module:TScope]]: dialog required support 15043 Scribunto text/plain local export = {} export.override = function( frame ) local title = frame.args[1] local args = {} for v, k in pairs( frame:getParent().args ) do args[v] = k end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.prepend = function( frame ) local title = frame.args[1] local args = {} local displace = 0; for v, k in pairs( frame.args ) do if (type( v ) == "number") and (v ~= 1) then args[ v - 1 ] = k displace = math.max( displace, (v - 1) ) end end for v, k in pairs( frame:getParent().args ) do if type( v ) == "number" then args[ displace + v ] = k else args[v] = k end end for v, k in pairs( frame.args ) do if type( v ) ~= "number" then args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.append = function( frame ) local title = frame.args[1] local args = {} local displace = 0; for v, k in pairs( frame:getParent().args ) do if type( v ) == "number" then displace = math.max( displace, v ) end args[v] = k end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ displace + v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.drop = function( frame ) local title = frame.args[1] local args = {} for v, k in pairs( frame:getParent().args ) do if type( v ) ~= "number" then args[v] = k end end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.shiftLeft = function( frame ) local title = frame.args[1] local args = {} local displace = tonumber( frame.args[2] ) if displace == nil then displace = 0 end for v, k in pairs( frame:getParent().args ) do if type( v ) == "number" then if v >= displace then args[ v - displace ] = k end else args[v] = k end end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v > 2 then args[ v - 2 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.map = function( frame ) local title = frame.args[1] local displace = frame.args[2] if displace == nil then displace = 0 else displace = tonumber( displace ) end local args = {} local data = {} local maxv = 0 for v, k in pairs( frame:getParent().args ) do if (type( v ) ~= "number") then args[v] = k elseif v <= displace then args[v + 1] = k else data[v] = k maxv = math.max( v, maxv ) end end for v, k in pairs( frame.args ) do if type( v ) ~= "number" then args[v] = k elseif v > 2 then args[v - 1] = k end end local result = "" for v = 1, maxv do if data[v] ~= nil then args[1] = data[v] result = result .. frame:expandTemplate{ title = title, args = args } end end return result end export.static = function( frame ) return frame:getParent():getTitle() end local function tabulate( args ) local s = '' for k, v in pairs( args ) do s = s .. '|-\n| ' .. k .. '\n| <code>' .. v .. '</code>\n' end if s ~= '' then s = '{| class="wikitable"\n|-\n! key\n! value\n' .. s .. '|}' end return s end export.echo = function( frame ) local mp = tabulate( frame.args ) local cp = tabulate( frame:getParent().args ) if mp ~= '' then mp = 'module parameters:\n' .. mp .. '\n' end if cp ~= '' then cp = 'context parameters:\n' .. cp .. '\n' else cp = 'no context parameters.\n' end return mp .. cp end return export n3blx1g9jcetmcolf1n2fiuhyaql9nh 15045 11165 2026-08-01T17:29:28Z QueerEcofeminist 1879 [[:en:Module:TScope]] पासून १६ आवर्तने आयात केलीत 11164 Scribunto text/plain local export = {} export.override = function( frame ) local title = frame.args[1] local args = {} for v, k in pairs( frame:getParent().args ) do args[v] = k end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.prepend = function( frame ) local title = frame.args[1] local args = {} local displace = 0; for v, k in pairs( frame.args ) do if (type( v ) == "number") and (v ~= 1) then args[ v - 1 ] = k displace = math.max( displace, (v - 1) ) end end for v, k in pairs( frame:getParent().args ) do if type( v ) == "number" then args[ displace + v ] = k else args[v] = k end end for v, k in pairs( frame.args ) do if type( v ) ~= "number" then args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.append = function( frame ) local title = frame.args[1] local args = {} local displace = 0; for v, k in pairs( frame:getParent().args ) do if type( v ) == "number" then displace = math.max( displace, v ) end args[v] = k end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ displace + v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.drop = function( frame ) local title = frame.args[1] local args = {} for v, k in pairs( frame:getParent().args ) do if type( v ) ~= "number" then args[v] = k end end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v ~= 1 then args[ v - 1 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.shiftLeft = function( frame ) local title = frame.args[1] local args = {} local displace = tonumber( frame.args[2] ) if displace == nil then displace = 0 end for v, k in pairs( frame:getParent().args ) do if type( v ) == "number" then if v >= displace then args[ v - displace ] = k end else args[v] = k end end for v, k in pairs( frame.args ) do if type( v ) == "number" then if v > 2 then args[ v - 2 ] = k end else args[v] = k end end return frame:expandTemplate{ title = title, args = args } end export.map = function( frame ) local title = frame.args[1] local displace = frame.args[2] if displace == nil then displace = 0 else displace = tonumber( displace ) end local args = {} local data = {} local maxv = 0 for v, k in pairs( frame:getParent().args ) do if (type( v ) ~= "number") then args[v] = k elseif v <= displace then args[v + 1] = k else data[v] = k maxv = math.max( v, maxv ) end end for v, k in pairs( frame.args ) do if type( v ) ~= "number" then args[v] = k elseif v > 2 then args[v - 1] = k end end local result = "" for v = 1, maxv do if data[v] ~= nil then args[1] = data[v] result = result .. frame:expandTemplate{ title = title, args = args } end end return result end export.static = function( frame ) return frame:getParent():getTitle() end local function tabulate( args ) local s = '' for k, v in pairs( args ) do s = s .. '|-\n| ' .. k .. '\n| <code>' .. v .. '</code>\n' end if s ~= '' then s = '{| class="wikitable"\n|-\n! key\n! value\n' .. s .. '|}' end return s end export.echo = function( frame ) local mp = tabulate( frame.args ) local cp = tabulate( frame:getParent().args ) if mp ~= '' then mp = 'module parameters:\n' .. mp .. '\n' end if cp ~= '' then cp = 'context parameters:\n' .. cp .. '\n' else cp = 'no context parameters.\n' end return mp .. cp end return export n3blx1g9jcetmcolf1n2fiuhyaql9nh साचा:BOOKCATEGORY 10 3606 15020 2016-11-16T15:31:42Z Pi zero 2546 create 15020 wikitext text/x-wiki <includeonly>{{BOOKCATEGORY/core|namespace={{ARTICLESPACE:{{{1|{{FULLPAGENAME}}}}}}}|basename={{BOOKNAME|{{{1|{{FULLPAGENAME}}}}}}}}}</includeonly><noinclude> {{Documentation}} </noinclude> 38lhpln7ckeuvfscik69vghlb76mjx3 15021 15020 2016-11-16T17:19:59Z Pi zero 2546 Protected "[[Template:BOOKCATEGORY]]": High-impact page: matching similar all-caps templates ([Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite)) 15020 wikitext text/x-wiki <includeonly>{{BOOKCATEGORY/core|namespace={{ARTICLESPACE:{{{1|{{FULLPAGENAME}}}}}}}|basename={{BOOKNAME|{{{1|{{FULLPAGENAME}}}}}}}}}</includeonly><noinclude> {{Documentation}} </noinclude> 38lhpln7ckeuvfscik69vghlb76mjx3 15022 15021 2016-12-13T20:48:44Z Pi zero 2546 +pagename 15022 wikitext text/x-wiki <includeonly>{{BOOKCATEGORY/core|namespace={{ARTICLESPACE:{{{1|{{FULLPAGENAME}}}}}}}|basename={{BOOKNAME|{{{1|{{FULLPAGENAME}}}}}}}|pagename={{PAGENAME:{{{1|{{FULLPAGENAME}}}}}}}}}</includeonly><noinclude> {{Documentation}} </noinclude> ra876s91lm6kct2s74jocbl0aoz1wwp 15023 15022 2016-12-13T21:41:26Z Pi zero 2546 simplify 15023 wikitext text/x-wiki <includeonly>{{BOOKCATEGORY/core2|{{ROOTBOOKNAME|{{{1|{{FULLPAGENAME}}}}}}}}}</includeonly><noinclude> {{Documentation}} </noinclude> jcjdhdu7408dvawafsj1twrg2q6vs5y 15024 15023 2016-12-13T21:46:00Z Pi zero 2546 simplify 15024 wikitext text/x-wiki <includeonly>{{BOOKCATEGORY/core|{{ROOTBOOKNAME|{{{1|{{FULLPAGENAME}}}}}}}}}</includeonly><noinclude> {{Documentation}} </noinclude> q2jhj88vcp5uhlb1c2tqi4bvl0i0179 15025 15024 2017-04-19T02:59:31Z Pi zero 2546 {{{book}}} 15025 wikitext text/x-wiki <includeonly>{{BOOKCATEGORY/core|{{{book|{{ROOTBOOKNAME|{{{1|{{FULLPAGENAME}}}}}}}}}}}}</includeonly><noinclude> {{Documentation}} </noinclude> 4ehhwrech9ogxsc86m2zynzsu3i0ko2 15026 15025 2017-10-26T13:47:34Z Pi zero 2546 much less expensive, now that all the renamings have already happened 15026 wikitext text/x-wiki <includeonly>Category:Book:{{{book|{{ROOTBOOKNAME|{{{1|{{FULLPAGENAME}}}}}}}}}}</includeonly><noinclude> {{Documentation}} </noinclude> 2kz90j7gkyiuaexh49a7yquj1a33jbb 15027 15026 2018-01-24T02:52:43Z Pi zero 2546 BOOKNAME (new-style) 15027 wikitext text/x-wiki <includeonly>Category:Book:{{{book|{{BOOKNAME|{{{1|{{FULLPAGENAME}}}}}}}}}}</includeonly><noinclude> {{Documentation}} </noinclude> lloy4fm1jzvf8hvj4tiuynvt6q10c3o 15028 11334 2026-08-01T17:29:27Z QueerEcofeminist 1879 [[:en:Template:BOOKCATEGORY]] पासून ८ आवर्तने आयात केलीत 11333 wikitext text/x-wiki <includeonly>Category:Book:{{{book|{{safesubst:<noinclude/>BOOKNAME|{{{1|{{safesubst:<noinclude/>FULLPAGENAME}}}}}}}}}}</includeonly><noinclude> {{Documentation}} </noinclude> iwwpkbvabom52cebzb3ibkm2696erug साचा:BookCat 10 3611 14957 2007-09-07T17:47:23Z Whiteknight 3636 creating template that automatically adds a page to the appropriate book category 14957 wikitext text/x-wiki [[Category:{{BOOKNAME}}|{{#ifeq:{{BOOKNAME}}|{{PAGENAME}}|!|{{SUBPAGENAME}}}}]] hksgns9506vn1i3tr58n3nhmol1175l 14958 14957 2007-09-07T18:02:03Z Darklama 2894 +description and use {{FULLCHAPTERNAME}} instead of SUBPAGENAME 14958 wikitext text/x-wiki <includeonly>[[Category:{{BOOKNAME}}|{{#ifeq:{{BOOKNAME}}|{{PAGENAME}}| |{{{1|{{FULLCHAPTERNAME}}}}}]]</includeonly><noinclude> Sorts a book by book title or by chapter name depending on what page its added to.</noinclude> jjwghjjqlr7jok68yy7ekz3ncdq87r1 14959 14958 2007-11-15T11:49:17Z IJstLrndAlotAboutStargateAtWP 3649 14959 wikitext text/x-wiki <TABLE CELLPADDING=0 CELLSPACING=0 BORDER=0> <TR><TD BGCOLOR=#392002>....</TD><TD BGCOLOR=#392002>....</TD><TD BGCOLOR=#3e1e02>....</TD><TD BGCOLOR=#3c1c01>....</TD><TD BGCOLOR=#381e00>....</TD><TD BGCOLOR=#391b00>....</TD><TD BGCOLOR=#3d1f03>....</TD><TD BGCOLOR=#3b1d02>....</TD><TD BGCOLOR=#3b1d02>....</TD><TD BGCOLOR=#3b1d04>....</TD><TD BGCOLOR=#371806>....</TD><TD BGCOLOR=#3a1b04>....</TD><TD BGCOLOR=#381800>....</TD><TD BGCOLOR=#3b1803>....</TD><TD BGCOLOR=#3a1705>....</TD><TD BGCOLOR=#371307>....</TD><TD BGCOLOR=#3a1f04>....</TD><TD BGCOLOR=#4b2706>....</TD><TD BGCOLOR=#51290c>....</TD><TD BGCOLOR=#6e5d3f>....</TD><TD BGCOLOR=#6a5e3e>....</TD><TD BGCOLOR=#6f5b37>....</TD><TD BGCOLOR=#745e3d>....</TD><TD BGCOLOR=#685c28>....</TD><TD BGCOLOR=#62441e>....</TD><TD BGCOLOR=#604c20>....</TD><TD BGCOLOR=#644819>....</TD><TD BGCOLOR=#634917>....</TD><TD BGCOLOR=#5f491d>....</TD><TD BGCOLOR=#5d4223>....</TD><TD BGCOLOR=#523512>....</TD><TD BGCOLOR=#5c4018>....</TD><TD BGCOLOR=#614826>....</TD><TD BGCOLOR=#624b1e>....</TD><TD BGCOLOR=#6a5425>....</TD><TD BGCOLOR=#786037>....</TD><TD BGCOLOR=#836c3e>....</TD><TD BGCOLOR=#876e3c>....</TD><TD BGCOLOR=#8e6f46>....</TD><TD BGCOLOR=#947345>....</TD><TD BGCOLOR=#937545>....</TD><TD BGCOLOR=#9c7d4f>....</TD><TD BGCOLOR=#9d7645>....</TD><TD BGCOLOR=#9c7b4f>....</TD><TD BGCOLOR=#9b7b52>....</TD><TD BGCOLOR=#927249>....</TD><TD BGCOLOR=#79592f>....</TD><TD BGCOLOR=#6c501a>....</TD><TD BGCOLOR=#685323>....</TD><TD BGCOLOR=#77612f>....</TD><TD BGCOLOR=#80622e>....</TD><TD BGCOLOR=#886637>....</TD><TD BGCOLOR=#886b34>....</TD><TD BGCOLOR=#866c37>....</TD><TD BGCOLOR=#886d3e>....</TD><TD BGCOLOR=#926f3f>....</TD><TD BGCOLOR=#986d40>....</TD><TD BGCOLOR=#997344>....</TD><TD BGCOLOR=#987545>....</TD><TD BGCOLOR=#9c7647>....</TD><TD BGCOLOR=#9f794a>....</TD><TD BGCOLOR=#a07a4b>....</TD><TD BGCOLOR=#a27c4d>....</TD><TD BGCOLOR=#a47e4f>....</TD><TD BGCOLOR=#a27c4d>....</TD><TD BGCOLOR=#a37c4d>....</TD><TD BGCOLOR=#b27a4a>....</TD><TD BGCOLOR=#bb804a>....</TD><TD BGCOLOR=#b7854b>....</TD><TD BGCOLOR=#ad874f>....</TD><TD BGCOLOR=#ab884a>....</TD><TD BGCOLOR=#b1874b>....</TD><TD BGCOLOR=#ad8447>....</TD><TD BGCOLOR=#ab884b>....</TD><TD BGCOLOR=#a9844f>....</TD><TD BGCOLOR=#a47e50>....</TD><TD BGCOLOR=#a47f4e>....</TD><TD BGCOLOR=#9d7743>....</TD><TD BGCOLOR=#997344>....</TD><TD BGCOLOR=#9d7748>....</TD><TD BGCOLOR=#a17b4c>....</TD><TD BGCOLOR=#a37e4c>....</TD><TD BGCOLOR=#ab864f>....</TD><TD BGCOLOR=#b0884d>....</TD><TD BGCOLOR=#b3894a>....</TD><TD BGCOLOR=#b78d4d>....</TD><TD BGCOLOR=#b88f4e>....</TD><TD BGCOLOR=#b99050>....</TD><TD BGCOLOR=#b88f4e>....</TD><TD BGCOLOR=#b38a52>....</TD><TD BGCOLOR=#ad8751>....</TD><TD BGCOLOR=#a88552>....</TD><TD BGCOLOR=#a48352>....</TD><TD BGCOLOR=#a18051>....</TD><TD BGCOLOR=#9d8251>....</TD><TD BGCOLOR=#9a7e4e>....</TD><TD BGCOLOR=#9d7a4a>....</TD><TD BGCOLOR=#987a42>....</TD><TD BGCOLOR=#897443>....</TD><TD BGCOLOR=#826d49>....</TD><TD BGCOLOR=#74754f>....</TD><TD BGCOLOR=#757e54>....</TD><TD BGCOLOR=#827557>....</TD><TD BGCOLOR=#776f55>....</TD><TD BGCOLOR=#747961>....</TD><TD BGCOLOR=#7d7758>....</TD><TD BGCOLOR=#7b6443>....</TD><TD BGCOLOR=#766537>....</TD><TD BGCOLOR=#6f5725>....</TD><TD BGCOLOR=#6c4e28>....</TD><TD BGCOLOR=#6d512f>....</TD><TD BGCOLOR=#725b30>....</TD><TD BGCOLOR=#766334>....</TD><TD BGCOLOR=#7a6c4a>....</TD><TD BGCOLOR=#7b6c53>....</TD><TD BGCOLOR=#7b664e>....</TD></TR> <TR><TD BGCOLOR=#371d01 COLSPAN=2>....</TD><TD BGCOLOR=#3b1b00>....</TD><TD BGCOLOR=#3c1c00>....</TD><TD BGCOLOR=#381e01>....</TD><TD BGCOLOR=#391b00>....</TD><TD BGCOLOR=#3e2004>....</TD><TD BGCOLOR=#3a1c01 COLSPAN=2>....</TD><TD BGCOLOR=#391b02>....</TD><TD BGCOLOR=#361705>....</TD><TD BGCOLOR=#391b04>....</TD><TD BGCOLOR=#371800>....</TD><TD BGCOLOR=#391a04>....</TD><TD BGCOLOR=#381805>....</TD><TD BGCOLOR=#331306>....</TD><TD BGCOLOR=#3b1f05>....</TD><TD BGCOLOR=#4c2504>....</TD><TD BGCOLOR=#542e0f>....</TD><TD BGCOLOR=#6a5c3d>....</TD><TD BGCOLOR=#6b5e3e>....</TD><TD BGCOLOR=#6a5833>....</TD><TD BGCOLOR=#705d3a>....</TD><TD BGCOLOR=#685925>....</TD><TD BGCOLOR=#624616>....</TD><TD BGCOLOR=#604e19>....</TD><TD BGCOLOR=#634814>....</TD><TD BGCOLOR=#604813>....</TD><TD BGCOLOR=#5c4b1d>....</TD><TD BGCOLOR=#563f1f>....</TD><TD BGCOLOR=#4f3612>....</TD><TD BGCOLOR=#5b4016>....</TD><TD BGCOLOR=#694a29>....</TD><TD BGCOLOR=#63441c>....</TD><TD BGCOLOR=#6d4e28>....</TD><TD BGCOLOR=#775c36>....</TD><TD BGCOLOR=#836b3e>....</TD><TD BGCOLOR=#8d7345>....</TD><TD BGCOLOR=#8e7046>....</TD><TD BGCOLOR=#967747>....</TD><TD BGCOLOR=#947949>....</TD><TD BGCOLOR=#9b7f52>....</TD><TD BGCOLOR=#a07b4c>....</TD><TD BGCOLOR=#9e7d53>....</TD><TD BGCOLOR=#9e7e55>....</TD><TD BGCOLOR=#95754c>....</TD><TD BGCOLOR=#88693f>....</TD><TD BGCOLOR=#705220>....</TD><TD BGCOLOR=#765b2a>....</TD><TD BGCOLOR=#7d6231>....</TD><TD BGCOLOR=#876836>....</TD><TD BGCOLOR=#8c6a3c>....</TD><TD BGCOLOR=#876838>....</TD><TD BGCOLOR=#886d3c>....</TD><TD BGCOLOR=#8e7142>....</TD><TD BGCOLOR=#957041>....</TD><TD BGCOLOR=#9d7546>....</TD><TD BGCOLOR=#9b7646>....</TD><TD BGCOLOR=#9f7b4b>....</TD><TD BGCOLOR=#9e7849>....</TD><TD BGCOLOR=#a27c4d>....</TD><TD BGCOLOR=#a37d4e>....</TD><TD BGCOLOR=#a68051>....</TD><TD BGCOLOR=#a78152>....</TD><TD BGCOLOR=#a68051>....</TD><TD BGCOLOR=#a98353>....</TD><TD BGCOLOR=#af8754>....</TD><TD BGCOLOR=#b88750>....</TD><TD BGCOLOR=#b9874f>....</TD><TD BGCOLOR=#b48653>....</TD><TD BGCOLOR=#ab884a>....</TD><TD BGCOLOR=#b1874b>....</TD><TD BGCOLOR=#b2894c>....</TD><TD BGCOLOR=#ab8749>....</TD><TD BGCOLOR=#ac8750>....</TD><TD BGCOLOR=#a88251>....</TD><TD BGCOLOR=#a27d49>....</TD><TD BGCOLOR=#98733d>....</TD><TD BGCOLOR=#987243>....</TD><TD BGCOLOR=#9d7748>....</TD><TD BGCOLOR=#a37d4e>....</TD><TD BGCOLOR=#a7834c>....</TD><TD BGCOLOR=#af8d4e>....</TD><TD BGCOLOR=#b38c4e>....</TD><TD BGCOLOR=#b58b4c>....</TD><TD BGCOLOR=#b68c4e>....</TD><TD BGCOLOR=#b78d51>....</TD><TD BGCOLOR=#b78e51>....</TD><TD BGCOLOR=#b99054>....</TD><TD BGCOLOR=#b38b55>....</TD><TD BGCOLOR=#ad8653>....</TD><TD BGCOLOR=#a88555>....</TD><TD BGCOLOR=#a48254>....</TD><TD BGCOLOR=#aa8351>....</TD><TD BGCOLOR=#a68551>....</TD><TD BGCOLOR=#a3814d>....</TD><TD BGCOLOR=#a07946>....</TD><TD BGCOLOR=#9b7e4a>....</TD><TD BGCOLOR=#917a4a>....</TD><TD BGCOLOR=#886e49>....</TD><TD BGCOLOR=#7a724b>....</TD><TD BGCOLOR=#73784e>....</TD><TD BGCOLOR=#7e7b58>....</TD><TD BGCOLOR=#7b7a56>....</TD><TD BGCOLOR=#737251>....</TD><TD BGCOLOR=#746744>....</TD><TD BGCOLOR=#684f2c>....</TD><TD BGCOLOR=#6f5a2f>....</TD><TD BGCOLOR=#6b5323>....</TD><TD BGCOLOR=#6d522a>....</TD><TD BGCOLOR=#785f3d>....</TD><TD BGCOLOR=#816b48>....</TD><TD BGCOLOR=#806a44>....</TD><TD BGCOLOR=#81704f>....</TD><TD BGCOLOR=#7c6c50>....</TD><TD BGCOLOR=#796149>....</TD></TR> <TR><TD BGCOLOR=#371e00 COLSPAN=2>....</TD><TD BGCOLOR=#3c1c01>....</TD><TD BGCOLOR=#3b1b01>....</TD><TD BGCOLOR=#391f02>....</TD><TD BGCOLOR=#381a00>....</TD><TD BGCOLOR=#3d1f03>....</TD><TD BGCOLOR=#3b1d02>....</TD><TD BGCOLOR=#391b00>....</TD><TD BGCOLOR=#391a02>....</TD><TD BGCOLOR=#361704>....</TD><TD BGCOLOR=#381a03>....</TD><TD BGCOLOR=#361900>....</TD><TD BGCOLOR=#381c05>....</TD><TD BGCOLOR=#341803>....</TD><TD BGCOLOR=#361908>....</TD><TD BGCOLOR=#3d1d04>....</TD><TD BGCOLOR=#4d2303>....</TD><TD BGCOLOR=#522d0f>....</TD><TD BGCOLOR=#665e3d>....</TD><TD BGCOLOR=#6d5d3d>....</TD><TD BGCOLOR=#675833>....</TD><TD BGCOLOR=#6f603d>....</TD><TD BGCOLOR=#685623>....</TD><TD BGCOLOR=#654914>....</TD><TD BGCOLOR=#624f1a>....</TD><TD BGCOLOR=#624617>....</TD><TD BGCOLOR=#644a1b>....</TD><TD BGCOLOR=#5e471a>....</TD><TD BGCOLOR=#5b3f21>....</TD><TD BGCOLOR=#543613>....</TD><TD BGCOLOR=#5d3f16>....</TD><TD BGCOLOR=#6c4e2a>....</TD><TD BGCOLOR=#674924>....</TD><TD BGCOLOR=#6b4b2d>....</TD><TD BGCOLOR=#715632>....</TD><TD BGCOLOR=#7e673a>....</TD><TD BGCOLOR=#876c43>....</TD><TD BGCOLOR=#96774c>....</TD><TD BGCOLOR=#917545>....</TD><TD BGCOLOR=#8e764a>....</TD><TD BGCOLOR=#9a8157>....</TD><TD BGCOLOR=#9b794c>....</TD><TD BGCOLOR=#9f7e54>....</TD><TD BGCOLOR=#9e7e55>....</TD><TD BGCOLOR=#96764d>....</TD><TD BGCOLOR=#927248>....</TD><TD BGCOLOR=#7b5e2e>....</TD><TD BGCOLOR=#795725>....</TD><TD BGCOLOR=#866532>....</TD><TD BGCOLOR=#876939>....</TD><TD BGCOLOR=#89673a>....</TD><TD BGCOLOR=#886940>....</TD><TD BGCOLOR=#8e7246>....</TD><TD BGCOLOR=#927444>....</TD><TD BGCOLOR=#997344>....</TD><TD BGCOLOR=#9b7949>....</TD><TD BGCOLOR=#9d7849>....</TD><TD BGCOLOR=#a0794a>....</TD><TD BGCOLOR=#a27c4d>....</TD><TD BGCOLOR=#a47e4f>....</TD><TD BGCOLOR=#a88253 COLSPAN=3>....</TD><TD BGCOLOR=#aa8455>....</TD><TD BGCOLOR=#ac8657>....</TD><TD BGCOLOR=#a88956>....</TD><TD BGCOLOR=#b08953>....</TD><TD BGCOLOR=#b2844f>....</TD><TD BGCOLOR=#af8353>....</TD><TD BGCOLOR=#ad894c>....</TD><TD BGCOLOR=#b3884c>....</TD><TD BGCOLOR=#b2884c>....</TD><TD BGCOLOR=#af8b4d>....</TD><TD BGCOLOR=#ab864b>....</TD><TD BGCOLOR=#a47f4a>....</TD><TD BGCOLOR=#a37e47>....</TD><TD BGCOLOR=#a07b42>....</TD><TD BGCOLOR=#997344>....</TD><TD BGCOLOR=#9d7748>....</TD><TD BGCOLOR=#a17b4c>....</TD><TD BGCOLOR=#a9864e>....</TD><TD BGCOLOR=#b39052>....</TD><TD BGCOLOR=#b68e54>....</TD><TD BGCOLOR=#b58a54>....</TD><TD BGCOLOR=#b58954>....</TD><TD BGCOLOR=#b58a56>....</TD><TD BGCOLOR=#b78c58>....</TD><TD BGCOLOR=#b98e59>....</TD><TD BGCOLOR=#b48a59>....</TD><TD BGCOLOR=#ad8557>....</TD><TD BGCOLOR=#a68256>....</TD><TD BGCOLOR=#a28055>....</TD><TD BGCOLOR=#a88251>....</TD><TD BGCOLOR=#a68653>....</TD><TD BGCOLOR=#a58451>....</TD><TD BGCOLOR=#a37c4c>....</TD><TD BGCOLOR=#9a7e4f>....</TD><TD BGCOLOR=#967c4f>....</TD><TD BGCOLOR=#997751>....</TD><TD BGCOLOR=#89734a>....</TD><TD BGCOLOR=#80754d>....</TD><TD BGCOLOR=#7c7a55>....</TD><TD BGCOLOR=#737142>....</TD><TD BGCOLOR=#6c5d33>....</TD><TD BGCOLOR=#6f5730>....</TD><TD BGCOLOR=#644b25>....</TD><TD BGCOLOR=#725a31>....</TD><TD BGCOLOR=#796133>....</TD><TD BGCOLOR=#866f44>....</TD><TD BGCOLOR=#826d49>....</TD><TD BGCOLOR=#7d6950>....</TD><TD BGCOLOR=#83694f>....</TD><TD BGCOLOR=#7f6a49>....</TD><TD BGCOLOR=#7b6746>....</TD><TD BGCOLOR=#73583e>....</TD></TR> <TR><TD BGCOLOR=#351b00 COLSPAN=2>....</TD><TD BGCOLOR=#391900>....</TD><TD BGCOLOR=#371900>....</TD><TD BGCOLOR=#361c01>....</TD><TD BGCOLOR=#381a01>....</TD><TD BGCOLOR=#3a1c01 COLSPAN=2>....</TD><TD BGCOLOR=#371900>....</TD><TD BGCOLOR=#371a02>....</TD><TD BGCOLOR=#371905>....</TD><TD BGCOLOR=#361902>....</TD><TD BGCOLOR=#351a02>....</TD><TD BGCOLOR=#351b03>....</TD><TD BGCOLOR=#331803>....</TD><TD BGCOLOR=#341906>....</TD><TD BGCOLOR=#3f1e05>....</TD><TD BGCOLOR=#502102>....</TD><TD BGCOLOR=#563314>....</TD><TD BGCOLOR=#645f3d>....</TD><TD BGCOLOR=#6c5d3e>....</TD><TD BGCOLOR=#655734>....</TD><TD BGCOLOR=#6c623d>....</TD><TD BGCOLOR=#665120>....</TD><TD BGCOLOR=#634615>....</TD><TD BGCOLOR=#5b4718>....</TD><TD BGCOLOR=#61441a>....</TD><TD BGCOLOR=#62451d>....</TD><TD BGCOLOR=#634318>....</TD><TD BGCOLOR=#573416>....</TD><TD BGCOLOR=#57300f>....</TD><TD BGCOLOR=#5f3c14>....</TD><TD BGCOLOR=#634b25>....</TD><TD BGCOLOR=#69522c>....</TD><TD BGCOLOR=#725a3a>....</TD><TD BGCOLOR=#725a35>....</TD><TD BGCOLOR=#755d32>....</TD><TD BGCOLOR=#886d48>....</TD><TD BGCOLOR=#95774c>....</TD><TD BGCOLOR=#8b6f41>....</TD><TD BGCOLOR=#8e754b>....</TD><TD BGCOLOR=#987f57>....</TD><TD BGCOLOR=#97784c>....</TD><TD BGCOLOR=#9c794f>....</TD><TD BGCOLOR=#9b7a51>....</TD><TD BGCOLOR=#997950>....</TD><TD BGCOLOR=#8f6f46>....</TD><TD BGCOLOR=#816438>....</TD><TD BGCOLOR=#805a28>....</TD><TD BGCOLOR=#886532>....</TD><TD BGCOLOR=#856739>....</TD><TD BGCOLOR=#8a693e>....</TD><TD BGCOLOR=#906f4b>....</TD><TD BGCOLOR=#93764e>....</TD><TD BGCOLOR=#967647>....</TD><TD BGCOLOR=#9e7747>....</TD><TD BGCOLOR=#9a7b49>....</TD><TD BGCOLOR=#a17d4c>....</TD><TD BGCOLOR=#a87e50>....</TD><TD BGCOLOR=#ae8658>....</TD><TD BGCOLOR=#ad8657>....</TD><TD BGCOLOR=#ab8656>....</TD><TD BGCOLOR=#ab8655>....</TD><TD BGCOLOR=#aa8354>....</TD><TD BGCOLOR=#a88253>....</TD><TD BGCOLOR=#a78254>....</TD><TD BGCOLOR=#a88858>....</TD><TD BGCOLOR=#aa8752>....</TD><TD BGCOLOR=#ac8551>....</TD><TD BGCOLOR=#ac8958>....</TD><TD BGCOLOR=#b0894c>....</TD><TD BGCOLOR=#b3874c>....</TD><TD BGCOLOR=#b2884d>....</TD><TD BGCOLOR=#b38f51>....</TD><TD BGCOLOR=#af8c4e>....</TD><TD BGCOLOR=#b18c54>....</TD><TD BGCOLOR=#ad894e>....</TD><TD BGCOLOR=#a58147>....</TD><TD BGCOLOR=#9e7647>....</TD><TD BGCOLOR=#9e7748>....</TD><TD BGCOLOR=#a37d4d>....</TD><TD BGCOLOR=#ac8551>....</TD><TD BGCOLOR=#b9925b>....</TD><TD BGCOLOR=#ba8f5e>....</TD><TD BGCOLOR=#b78a5e>....</TD><TD BGCOLOR=#b18556>....</TD><TD BGCOLOR=#b48a58>....</TD><TD BGCOLOR=#b98e5e>....</TD><TD BGCOLOR=#b98e5f>....</TD><TD BGCOLOR=#b4895b>....</TD><TD BGCOLOR=#ae8458>....</TD><TD BGCOLOR=#a78156>....</TD><TD BGCOLOR=#a07c54>....</TD><TD BGCOLOR=#a18053>....</TD><TD BGCOLOR=#a18656>....</TD><TD BGCOLOR=#a18556>....</TD><TD BGCOLOR=#a58457>....</TD><TD BGCOLOR=#9a8053>....</TD><TD BGCOLOR=#997d52>....</TD><TD BGCOLOR=#9d7952>....</TD><TD BGCOLOR=#98774f>....</TD><TD BGCOLOR=#896f49>....</TD><TD BGCOLOR=#776e49>....</TD><TD BGCOLOR=#655c27>....</TD><TD BGCOLOR=#674e1d>....</TD><TD BGCOLOR=#6f5026>....</TD><TD BGCOLOR=#6e542b>....</TD><TD BGCOLOR=#816741>....</TD><TD BGCOLOR=#877047>....</TD><TD BGCOLOR=#836f46>....</TD><TD BGCOLOR=#84714f>....</TD><TD BGCOLOR=#7e6a55>....</TD><TD BGCOLOR=#816653>....</TD><TD BGCOLOR=#7d6646>....</TD><TD BGCOLOR=#796340>....</TD><TD BGCOLOR=#70553a>....</TD></TR> <TR><TD BGCOLOR=#341a02 COLSPAN=2>....</TD><TD BGCOLOR=#351a02>....</TD><TD BGCOLOR=#341a01>....</TD><TD BGCOLOR=#361b03>....</TD><TD BGCOLOR=#391b03 COLSPAN=2>....</TD><TD BGCOLOR=#381a02>....</TD><TD BGCOLOR=#361902>....</TD><TD BGCOLOR=#351b03>....</TD><TD BGCOLOR=#331902>....</TD><TD BGCOLOR=#351b03>....</TD><TD BGCOLOR=#331a00>....</TD><TD BGCOLOR=#321b02>....</TD><TD BGCOLOR=#311904>....</TD><TD BGCOLOR=#361802>....</TD><TD BGCOLOR=#3e1c06>....</TD><TD BGCOLOR=#562003>....</TD><TD BGCOLOR=#533415>....</TD><TD BGCOLOR=#63613b>....</TD><TD BGCOLOR=#635f3e>....</TD><TD BGCOLOR=#66563d>....</TD><TD BGCOLOR=#696441>....</TD><TD BGCOLOR=#644b22>....</TD><TD BGCOLOR=#644818>....</TD><TD BGCOLOR=#5e461a>....</TD><TD BGCOLOR=#644614>....</TD><TD BGCOLOR=#604819>....</TD><TD BGCOLOR=#614213>....</TD><TD BGCOLOR=#583711>....</TD><TD BGCOLOR=#542f0b>....</TD><TD BGCOLOR=#5e3a13>....</TD><TD BGCOLOR=#604420>....</TD><TD BGCOLOR=#684f2c>....</TD><TD BGCOLOR=#725e31>....</TD><TD BGCOLOR=#765f36>....</TD><TD BGCOLOR=#765939>....</TD><TD BGCOLOR=#8a6d49>....</TD><TD BGCOLOR=#866a43>....</TD><TD BGCOLOR=#95754a>....</TD><TD BGCOLOR=#8e6d47>....</TD><TD BGCOLOR=#977953>....</TD><TD BGCOLOR=#957b4a>....</TD><TD BGCOLOR=#9c744c>....</TD><TD BGCOLOR=#9b7951>....</TD><TD BGCOLOR=#9a7f54>....</TD><TD BGCOLOR=#8b6f45>....</TD><TD BGCOLOR=#846942>....</TD><TD BGCOLOR=#835c37>....</TD><TD BGCOLOR=#826537>....</TD><TD BGCOLOR=#836737>....</TD><TD BGCOLOR=#8a6a41>....</TD><TD BGCOLOR=#93734b>....</TD><TD BGCOLOR=#96764d>....</TD><TD BGCOLOR=#987548>....</TD><TD BGCOLOR=#a17a47>....</TD><TD BGCOLOR=#a0804b>....</TD><TD BGCOLOR=#a88551>....</TD><TD BGCOLOR=#ac8455>....</TD><TD BGCOLOR=#b1855b>....</TD><TD BGCOLOR=#ae8557>....</TD><TD BGCOLOR=#a78853>....</TD><TD BGCOLOR=#a7854e>....</TD><TD BGCOLOR=#a7824d>....</TD><TD BGCOLOR=#a68151>....</TD><TD BGCOLOR=#a58155>....</TD><TD BGCOLOR=#a38152>....</TD><TD BGCOLOR=#a38151>....</TD><TD BGCOLOR=#ab8959>....</TD><TD BGCOLOR=#ae8b5b>....</TD><TD BGCOLOR=#b6874f>....</TD><TD BGCOLOR=#b28350>....</TD><TD BGCOLOR=#b0844e>....</TD><TD BGCOLOR=#b48d4f>....</TD><TD BGCOLOR=#ab8a4d>....</TD><TD BGCOLOR=#b1894f>....</TD><TD BGCOLOR=#a98449>....</TD><TD BGCOLOR=#a68249>....</TD><TD BGCOLOR=#a27545>....</TD><TD BGCOLOR=#a07745>....</TD><TD BGCOLOR=#a27d4a>....</TD><TD BGCOLOR=#b08352>....</TD><TD BGCOLOR=#c08c5d>....</TD><TD BGCOLOR=#bb8b5b>....</TD><TD BGCOLOR=#b88d5b>....</TD><TD BGCOLOR=#b58f57>....</TD><TD BGCOLOR=#b6915a>....</TD><TD BGCOLOR=#b79160>....</TD><TD BGCOLOR=#b89164>....</TD><TD BGCOLOR=#bd8e5f>....</TD><TD BGCOLOR=#b68759>....</TD><TD BGCOLOR=#a87c51>....</TD><TD BGCOLOR=#9e754b>....</TD><TD BGCOLOR=#9e7c4f>....</TD><TD BGCOLOR=#a08556>....</TD><TD BGCOLOR=#a28758>....</TD><TD BGCOLOR=#a38457>....</TD><TD BGCOLOR=#9c865a>....</TD><TD BGCOLOR=#987f53>....</TD><TD BGCOLOR=#997950>....</TD><TD BGCOLOR=#9a7b50>....</TD><TD BGCOLOR=#8e724a>....</TD><TD BGCOLOR=#7a623c>....</TD><TD BGCOLOR=#615018>....</TD><TD BGCOLOR=#695117>....</TD><TD BGCOLOR=#78592a>....</TD><TD BGCOLOR=#846a3d>....</TD><TD BGCOLOR=#846f50>....</TD><TD BGCOLOR=#877258>....</TD><TD BGCOLOR=#806e57>....</TD><TD BGCOLOR=#816f57>....</TD><TD BGCOLOR=#826749>....</TD><TD BGCOLOR=#7e664c>....</TD><TD BGCOLOR=#7d6540>....</TD><TD BGCOLOR=#7c6144>....</TD><TD BGCOLOR=#6d5238>....</TD></TR> <TR><TD BGCOLOR=#331901 COLSPAN=2>....</TD><TD BGCOLOR=#361c03>....</TD><TD BGCOLOR=#341a02>....</TD><TD BGCOLOR=#351b03>....</TD><TD BGCOLOR=#381a03>....</TD><TD BGCOLOR=#3a1c05>....</TD><TD BGCOLOR=#371902>....</TD><TD BGCOLOR=#351802>....</TD><TD BGCOLOR=#361b05>....</TD><TD BGCOLOR=#341904 COLSPAN=2>....</TD><TD BGCOLOR=#331601>....</TD><TD BGCOLOR=#331904>....</TD><TD BGCOLOR=#2e1805>....</TD><TD BGCOLOR=#3a1704>....</TD><TD BGCOLOR=#401c07>....</TD><TD BGCOLOR=#541d02>....</TD><TD BGCOLOR=#563717>....</TD><TD BGCOLOR=#64623b>....</TD><TD BGCOLOR=#65613e>....</TD><TD BGCOLOR=#68593c>....</TD><TD BGCOLOR=#67623c>....</TD><TD BGCOLOR=#634a1f>....</TD><TD BGCOLOR=#624519>....</TD><TD BGCOLOR=#5d461c>....</TD><TD BGCOLOR=#634516>....</TD><TD BGCOLOR=#5f481c>....</TD><TD BGCOLOR=#5b4115>....</TD><TD BGCOLOR=#563314>....</TD><TD BGCOLOR=#4e2a0b>....</TD><TD BGCOLOR=#593813>....</TD><TD BGCOLOR=#634521>....</TD><TD BGCOLOR=#6d512f>....</TD><TD BGCOLOR=#6b5529>....</TD><TD BGCOLOR=#735a32>....</TD><TD BGCOLOR=#7b5e3e>....</TD><TD BGCOLOR=#775a36>....</TD><TD BGCOLOR=#846841>....</TD><TD BGCOLOR=#96764b>....</TD><TD BGCOLOR=#947348>....</TD><TD BGCOLOR=#997b53>....</TD><TD BGCOLOR=#967b52>....</TD><TD BGCOLOR=#90744a>....</TD><TD BGCOLOR=#947c50>....</TD><TD BGCOLOR=#91794d>....</TD><TD BGCOLOR=#8d6f45>....</TD><TD BGCOLOR=#886a43>....</TD><TD BGCOLOR=#835f3a>....</TD><TD BGCOLOR=#7f643b>....</TD><TD BGCOLOR=#87673e>....</TD><TD BGCOLOR=#907047>....</TD><TD BGCOLOR=#93734a>....</TD><TD BGCOLOR=#95754c>....</TD><TD BGCOLOR=#99784d>....</TD><TD BGCOLOR=#a07f50>....</TD><TD BGCOLOR=#a48656>....</TD><TD BGCOLOR=#ac885a>....</TD><TD BGCOLOR=#ad885e>....</TD><TD BGCOLOR=#a9845a>....</TD><TD BGCOLOR=#a78053>....</TD><TD BGCOLOR=#a58553>....</TD><TD BGCOLOR=#a1844d>....</TD><TD BGCOLOR=#a0814a>....</TD><TD BGCOLOR=#a17f4a>....</TD><TD BGCOLOR=#a88451>....</TD><TD BGCOLOR=#a58352>....</TD><TD BGCOLOR=#aa8858>....</TD><TD BGCOLOR=#ac8a5a>....</TD><TD BGCOLOR=#ad8c5b>....</TD><TD BGCOLOR=#ab8b58>....</TD><TD BGCOLOR=#a98654>....</TD><TD BGCOLOR=#aa844a>....</TD><TD BGCOLOR=#b38d4b>....</TD><TD BGCOLOR=#ac8b52>....</TD><TD BGCOLOR=#af8751>....</TD><TD BGCOLOR=#b28c55>....</TD><TD BGCOLOR=#a88550>....</TD><TD BGCOLOR=#a47b4c>....</TD><TD BGCOLOR=#9e7848>....</TD><TD BGCOLOR=#9e7b4b>....</TD><TD BGCOLOR=#ab8251>....</TD><TD BGCOLOR=#bb8d5d>....</TD><TD BGCOLOR=#b78a59>....</TD><TD BGCOLOR=#b98d5c>....</TD><TD BGCOLOR=#bc9461>....</TD><TD BGCOLOR=#b7925e>....</TD><TD BGCOLOR=#bb9663>....</TD><TD BGCOLOR=#bb9563>....</TD><TD BGCOLOR=#c29361>....</TD><TD BGCOLOR=#bf905f>....</TD><TD BGCOLOR=#ae8354>....</TD><TD BGCOLOR=#a0784b>....</TD><TD BGCOLOR=#9a784b>....</TD><TD BGCOLOR=#9a8050>....</TD><TD BGCOLOR=#9e8353>....</TD><TD BGCOLOR=#a18154>....</TD><TD BGCOLOR=#9c8357>....</TD><TD BGCOLOR=#9a8055>....</TD><TD BGCOLOR=#93784d>....</TD><TD BGCOLOR=#90794c>....</TD><TD BGCOLOR=#8b7b51>....</TD><TD BGCOLOR=#826a49>....</TD><TD BGCOLOR=#715428>....</TD><TD BGCOLOR=#775a26>....</TD><TD BGCOLOR=#876b3e>....</TD><TD BGCOLOR=#836e4a>....</TD><TD BGCOLOR=#85745b>....</TD><TD BGCOLOR=#86725c>....</TD><TD BGCOLOR=#827057>....</TD><TD BGCOLOR=#7e6c51>....</TD><TD BGCOLOR=#82674a>....</TD><TD BGCOLOR=#7d664b>....</TD><TD BGCOLOR=#7b6844>....</TD><TD BGCOLOR=#82684e>....</TD><TD BGCOLOR=#755339>....</TD></TR> </TABLE><TABLE CELLPADDING=0 CELLSPACING=0 BORDER=0> <TR><TD BGCOLOR=#351b02>....</TD><TD BGCOLOR=#351b02>....</TD><TD BGCOLOR=#331900>....</TD><TD BGCOLOR=#361c03>....</TD><TD BGCOLOR=#331900>....</TD><TD BGCOLOR=#371904>....</TD><TD BGCOLOR=#391b04>....</TD><TD BGCOLOR=#391b03>....</TD><TD BGCOLOR=#351802>....</TD><TD BGCOLOR=#351a07>....</TD><TD BGCOLOR=#321705>....</TD><TD BGCOLOR=#2f1403>....</TD><TD BGCOLOR=#351303>....</TD><TD BGCOLOR=#351806>....</TD><TD BGCOLOR=#2a1405>....</TD><TD BGCOLOR=#3e1607>....</TD><TD BGCOLOR=#3f1804>....</TD><TD BGCOLOR=#531c01>....</TD><TD BGCOLOR=#593b1a>....</TD><TD BGCOLOR=#626039>....</TD><TD BGCOLOR=#63603a>....</TD><TD BGCOLOR=#685838>....</TD><TD BGCOLOR=#68633a>....</TD><TD BGCOLOR=#634a1c>....</TD><TD BGCOLOR=#65481e>....</TD><TD BGCOLOR=#5e4620>....</TD><TD BGCOLOR=#614216>....</TD><TD BGCOLOR=#5d471f>....</TD><TD BGCOLOR=#5a451e>....</TD><TD BGCOLOR=#573119>....</TD><TD BGCOLOR=#4f2b13>....</TD><TD BGCOLOR=#563918>....</TD><TD BGCOLOR=#664422>....</TD><TD BGCOLOR=#6c4c2b>....</TD><TD BGCOLOR=#6d5328>....</TD><TD BGCOLOR=#745931>....</TD><TD BGCOLOR=#7d6040>....</TD><TD BGCOLOR=#775a36>....</TD><TD BGCOLOR=#7e623b>....</TD><TD BGCOLOR=#8c6c40>....</TD><TD BGCOLOR=#997949>....</TD><TD BGCOLOR=#987a4f>....</TD><TD BGCOLOR=#977b59>....</TD><TD BGCOLOR=#916f49>....</TD><TD BGCOLOR=#92764c>....</TD><TD BGCOLOR=#8c7348>....</TD><TD BGCOLOR=#8f7147>....</TD><TD BGCOLOR=#8b6b44>....</TD><TD BGCOLOR=#82623d>....</TD><TD BGCOLOR=#7c633f>....</TD><TD BGCOLOR=#8b6747>....</TD><TD BGCOLOR=#907047>....</TD><TD BGCOLOR=#95754c>....</TD><TD BGCOLOR=#95754c>....</TD><TD BGCOLOR=#9a7c52>....</TD><TD BGCOLOR=#a0875c>....</TD><TD BGCOLOR=#a3885e>....</TD><TD BGCOLOR=#ab855e>....</TD><TD BGCOLOR=#a4815b>....</TD><TD BGCOLOR=#a1845c>....</TD><TD BGCOLOR=#a78259>....</TD><TD BGCOLOR=#a28052>....</TD><TD BGCOLOR=#998051>....</TD><TD BGCOLOR=#9c8354>....</TD><TD BGCOLOR=#a1804f>....</TD><TD BGCOLOR=#a27c4a>....</TD><TD BGCOLOR=#a58251>....</TD><TD BGCOLOR=#aa8858>....</TD><TD BGCOLOR=#ab8959>....</TD><TD BGCOLOR=#af8d5d>....</TD><TD BGCOLOR=#b08d5c>....</TD><TD BGCOLOR=#aa8657>....</TD><TD BGCOLOR=#a8834e>....</TD><TD BGCOLOR=#ae8b4e>....</TD><TD BGCOLOR=#af8d58>....</TD><TD BGCOLOR=#ad8451>....</TD><TD BGCOLOR=#ae8854>....</TD><TD BGCOLOR=#ae8c59>....</TD><TD BGCOLOR=#a47d50>....</TD><TD BGCOLOR=#9c784a>....</TD><TD BGCOLOR=#99794a>....</TD><TD BGCOLOR=#9f7e4c>....</TD><TD BGCOLOR=#b38c59>....</TD><TD BGCOLOR=#b18755>....</TD><TD BGCOLOR=#b08251>....</TD><TD BGCOLOR=#b98f60>....</TD><TD BGCOLOR=#bb9565>....</TD><TD BGCOLOR=#bb9662>....</TD><TD BGCOLOR=#bc9760>....</TD><TD BGCOLOR=#c69761>....</TD><TD BGCOLOR=#c1925e>....</TD><TD BGCOLOR=#bb905e>....</TD><TD BGCOLOR=#ab8453>....</TD><TD BGCOLOR=#9e7c4f>....</TD><TD BGCOLOR=#957a4b>....</TD><TD BGCOLOR=#997e4f>....</TD><TD BGCOLOR=#a48356>....</TD><TD BGCOLOR=#9f8057>....</TD><TD BGCOLOR=#9c8156>....</TD><TD BGCOLOR=#947c50>....</TD><TD BGCOLOR=#8b784a>....</TD><TD BGCOLOR=#897a52>....</TD><TD BGCOLOR=#876e54>....</TD><TD BGCOLOR=#7c5c3c>....</TD><TD BGCOLOR=#7f633b>....</TD><TD BGCOLOR=#856f4f>....</TD><TD BGCOLOR=#827258>....</TD><TD BGCOLOR=#80775a>....</TD><TD BGCOLOR=#817059>....</TD><TD BGCOLOR=#7c6a50>....</TD><TD BGCOLOR=#7b694a>....</TD><TD BGCOLOR=#7f6449>....</TD><TD BGCOLOR=#7c6749>....</TD><TD BGCOLOR=#766846>....</TD><TD BGCOLOR=#816851>....</TD><TD BGCOLOR=#764b31>....</TD></TR> <TR><TD BGCOLOR=#351b02 COLSPAN=2>....</TD><TD BGCOLOR=#331900>....</TD><TD BGCOLOR=#361c03>....</TD><TD BGCOLOR=#331800>....</TD><TD BGCOLOR=#371903>....</TD><TD BGCOLOR=#361a03>....</TD><TD BGCOLOR=#381b03>....</TD><TD BGCOLOR=#341601>....</TD><TD BGCOLOR=#331804>....</TD><TD BGCOLOR=#341906>....</TD><TD BGCOLOR=#2f1404>....</TD><TD BGCOLOR=#321302>....</TD><TD BGCOLOR=#311a07>....</TD><TD BGCOLOR=#281505>....</TD><TD BGCOLOR=#3e1506>....</TD><TD BGCOLOR=#3d1503>....</TD><TD BGCOLOR=#511c02>....</TD><TD BGCOLOR=#5a3a1d>....</TD><TD BGCOLOR=#5f5e39>....</TD><TD BGCOLOR=#655f3a>....</TD><TD BGCOLOR=#665a36>....</TD><TD BGCOLOR=#666034>....</TD><TD BGCOLOR=#63491b>....</TD><TD BGCOLOR=#654a1e>....</TD><TD BGCOLOR=#624722>....</TD><TD BGCOLOR=#604118>....</TD><TD BGCOLOR=#5f4a20>....</TD><TD BGCOLOR=#58431e>....</TD><TD BGCOLOR=#552e19>....</TD><TD BGCOLOR=#4f2f18>....</TD><TD BGCOLOR=#573b1b>....</TD><TD BGCOLOR=#623f1d>....</TD><TD BGCOLOR=#6b4b2c>....</TD><TD BGCOLOR=#694b24>....</TD><TD BGCOLOR=#71552d>....</TD><TD BGCOLOR=#755935>....</TD><TD BGCOLOR=#745832>....</TD><TD BGCOLOR=#796138>....</TD><TD BGCOLOR=#806035>....</TD><TD BGCOLOR=#927242>....</TD><TD BGCOLOR=#967b4c>....</TD><TD BGCOLOR=#9c7f5a>....</TD><TD BGCOLOR=#966f4a>....</TD><TD BGCOLOR=#8d6b43>....</TD><TD BGCOLOR=#8a6f44>....</TD><TD BGCOLOR=#8c7046>....</TD><TD BGCOLOR=#8d6d48>....</TD><TD BGCOLOR=#81633e>....</TD><TD BGCOLOR=#7c603e>....</TD><TD BGCOLOR=#8b6446>....</TD><TD BGCOLOR=#927148>....</TD><TD BGCOLOR=#96764c>....</TD><TD BGCOLOR=#95754b>....</TD><TD BGCOLOR=#997f54>....</TD><TD BGCOLOR=#9e885e>....</TD><TD BGCOLOR=#a3875f>....</TD><TD BGCOLOR=#a57d59>....</TD><TD BGCOLOR=#a07e5a>....</TD><TD BGCOLOR=#a1865e>....</TD><TD BGCOLOR=#a58459>....</TD><TD BGCOLOR=#9e7e51>....</TD><TD BGCOLOR=#987d53>....</TD><TD BGCOLOR=#997d53>....</TD><TD BGCOLOR=#9b7b4d>....</TD><TD BGCOLOR=#a58052>....</TD><TD BGCOLOR=#a78654>....</TD><TD BGCOLOR=#ae8c5b>....</TD><TD BGCOLOR=#b18f5d>....</TD><TD BGCOLOR=#b08f5d>....</TD><TD BGCOLOR=#b18754>....</TD><TD BGCOLOR=#a67c4f>....</TD><TD BGCOLOR=#a07a4b>....</TD><TD BGCOLOR=#a5824e>....</TD><TD BGCOLOR=#ad8a54>....</TD><TD BGCOLOR=#ac8453>....</TD><TD BGCOLOR=#aa8451>....</TD><TD BGCOLOR=#ae8a56>....</TD><TD BGCOLOR=#a57e50>....</TD><TD BGCOLOR=#9a7748>....</TD><TD BGCOLOR=#957646>....</TD><TD BGCOLOR=#a0804e>....</TD><TD BGCOLOR=#ad8855>....</TD><TD BGCOLOR=#b18755>....</TD><TD BGCOLOR=#a97d4b>....</TD><TD BGCOLOR=#a97f51>....</TD><TD BGCOLOR=#b28b5a>....</TD><TD BGCOLOR=#b7925f>....</TD><TD BGCOLOR=#b9975f>....</TD><TD BGCOLOR=#c69960>....</TD><TD BGCOLOR=#c3965f>....</TD><TD BGCOLOR=#bb925b>....</TD><TD BGCOLOR=#af8953>....</TD><TD BGCOLOR=#a07e4f>....</TD><TD BGCOLOR=#987c4d>....</TD><TD BGCOLOR=#96794c>....</TD><TD BGCOLOR=#9e7a51>....</TD><TD BGCOLOR=#9d7d54>....</TD><TD BGCOLOR=#9d8156>....</TD><TD BGCOLOR=#998255>....</TD><TD BGCOLOR=#8a774b>....</TD><TD BGCOLOR=#877552>....</TD><TD BGCOLOR=#88735a>....</TD><TD BGCOLOR=#7a6146>....</TD><TD BGCOLOR=#82694e>....</TD><TD BGCOLOR=#877360>....</TD><TD BGCOLOR=#857560>....</TD><TD BGCOLOR=#807a59>....</TD><TD BGCOLOR=#7f6e53>....</TD><TD BGCOLOR=#7c674a>....</TD><TD BGCOLOR=#776442>....</TD><TD BGCOLOR=#81644e>....</TD><TD BGCOLOR=#7b6342>....</TD><TD BGCOLOR=#766849>....</TD><TD BGCOLOR=#796350>....</TD><TD BGCOLOR=#694125>....</TD></TR> <TR><TD BGCOLOR=#341a01 COLSPAN=2>....</TD><TD BGCOLOR=#321800>....</TD><TD BGCOLOR=#361c03>....</TD><TD BGCOLOR=#331700>....</TD><TD BGCOLOR=#391902>....</TD><TD BGCOLOR=#341b02>....</TD><TD BGCOLOR=#371b03>....</TD><TD BGCOLOR=#361600>....</TD><TD BGCOLOR=#341a02>....</TD><TD BGCOLOR=#311601>....</TD><TD BGCOLOR=#301404>....</TD><TD BGCOLOR=#301a04>....</TD><TD BGCOLOR=#281d03>....</TD><TD BGCOLOR=#251602>....</TD><TD BGCOLOR=#3e1a07>....</TD><TD BGCOLOR=#3c1905>....</TD><TD BGCOLOR=#4c1f05>....</TD><TD BGCOLOR=#5e3e22>....</TD><TD BGCOLOR=#61603d>....</TD><TD BGCOLOR=#685c3b>....</TD><TD BGCOLOR=#605a33>....</TD><TD BGCOLOR=#685d31>....</TD><TD BGCOLOR=#63461b>....</TD><TD BGCOLOR=#61491a>....</TD><TD BGCOLOR=#62431d>....</TD><TD BGCOLOR=#60431a>....</TD><TD BGCOLOR=#604b1c>....</TD><TD BGCOLOR=#59401d>....</TD><TD BGCOLOR=#512810>....</TD><TD BGCOLOR=#4f3215>....</TD><TD BGCOLOR=#563a14>....</TD><TD BGCOLOR=#61401d>....</TD><TD BGCOLOR=#5f4325>....</TD><TD BGCOLOR=#60401e>....</TD><TD BGCOLOR=#694c24>....</TD><TD BGCOLOR=#755a33>....</TD><TD BGCOLOR=#735730>....</TD><TD BGCOLOR=#756238>....</TD><TD BGCOLOR=#7b5b34>....</TD><TD BGCOLOR=#88683d>....</TD><TD BGCOLOR=#8d7544>....</TD><TD BGCOLOR=#967948>....</TD><TD BGCOLOR=#977b4f>....</TD><TD BGCOLOR=#896e43>....</TD><TD BGCOLOR=#8a6f44>....</TD><TD BGCOLOR=#876c41>....</TD><TD BGCOLOR=#886e4b>....</TD><TD BGCOLOR=#7f613f>....</TD><TD BGCOLOR=#7e5c3a>....</TD><TD BGCOLOR=#8b6844>....</TD><TD BGCOLOR=#94744b>....</TD><TD BGCOLOR=#95764c>....</TD><TD BGCOLOR=#96794e>....</TD><TD BGCOLOR=#9a8054>....</TD><TD BGCOLOR=#9a8457>....</TD><TD BGCOLOR=#9e8056>....</TD><TD BGCOLOR=#a27c55>....</TD><TD BGCOLOR=#a5825e>....</TD><TD BGCOLOR=#a2865e>....</TD><TD BGCOLOR=#9e8453>....</TD><TD BGCOLOR=#997e50>....</TD><TD BGCOLOR=#997c4d>....</TD><TD BGCOLOR=#987a48>....</TD><TD BGCOLOR=#9e7d4b>....</TD><TD BGCOLOR=#a68152>....</TD><TD BGCOLOR=#a78753>....</TD><TD BGCOLOR=#af8e5a>....</TD><TD BGCOLOR=#b1905c>....</TD><TD BGCOLOR=#aa8a55>....</TD><TD BGCOLOR=#9f7a4a>....</TD><TD BGCOLOR=#9a7445>....</TD><TD BGCOLOR=#9d7748>....</TD><TD BGCOLOR=#a47e4d>....</TD><TD BGCOLOR=#ad8950>....</TD><TD BGCOLOR=#ad8856>....</TD><TD BGCOLOR=#a17c47>....</TD><TD BGCOLOR=#ad8950>....</TD><TD BGCOLOR=#a98451>....</TD><TD BGCOLOR=#9e7a47>....</TD><TD BGCOLOR=#9a7643>....</TD><TD BGCOLOR=#a07a4a>....</TD><TD BGCOLOR=#ab8253>....</TD><TD BGCOLOR=#b18856>....</TD><TD BGCOLOR=#ae8751>....</TD><TD BGCOLOR=#ae8252>....</TD><TD BGCOLOR=#a88049>....</TD><TD BGCOLOR=#a88553>....</TD><TD BGCOLOR=#ac8e59>....</TD><TD BGCOLOR=#b58f5c>....</TD><TD BGCOLOR=#b68e5a>....</TD><TD BGCOLOR=#b68f57>....</TD><TD BGCOLOR=#af894f>....</TD><TD BGCOLOR=#a4804f>....</TD><TD BGCOLOR=#9b7c4d>....</TD><TD BGCOLOR=#997a4e>....</TD><TD BGCOLOR=#9c774f>....</TD><TD BGCOLOR=#9d7d54>....</TD><TD BGCOLOR=#9a8055>....</TD><TD BGCOLOR=#9a8357>....</TD><TD BGCOLOR=#937c55>....</TD><TD BGCOLOR=#827051>....</TD><TD BGCOLOR=#857759>....</TD><TD BGCOLOR=#76644a>....</TD><TD BGCOLOR=#806c59>....</TD><TD BGCOLOR=#867263>....</TD><TD BGCOLOR=#87715d>....</TD><TD BGCOLOR=#7f7056>....</TD><TD BGCOLOR=#7f6a4f>....</TD><TD BGCOLOR=#796646>....</TD><TD BGCOLOR=#79694a>....</TD><TD BGCOLOR=#7c6351>....</TD><TD BGCOLOR=#755e40>....</TD><TD BGCOLOR=#74634d>....</TD><TD BGCOLOR=#725e4c>....</TD><TD BGCOLOR=#4e3317>....</TD></TR> <TR><TD BGCOLOR=#361c03 COLSPAN=2>....</TD><TD BGCOLOR=#351b02>....</TD><TD BGCOLOR=#361c03>....</TD><TD BGCOLOR=#321700>....</TD><TD BGCOLOR=#391a03>....</TD><TD BGCOLOR=#341b02>....</TD><TD BGCOLOR=#361902>....</TD><TD BGCOLOR=#381701>....</TD><TD BGCOLOR=#351801>....</TD><TD BGCOLOR=#331502>....</TD><TD BGCOLOR=#331403>....</TD><TD BGCOLOR=#301602>....</TD><TD BGCOLOR=#291902>....</TD><TD BGCOLOR=#231402>....</TD><TD BGCOLOR=#3c1c08>....</TD><TD BGCOLOR=#3a1a06>....</TD><TD BGCOLOR=#482004>....</TD><TD BGCOLOR=#604327>....</TD><TD BGCOLOR=#685f3e>....</TD><TD BGCOLOR=#665838>....</TD><TD BGCOLOR=#5e5730>....</TD><TD BGCOLOR=#64592d>....</TD><TD BGCOLOR=#62451a>....</TD><TD BGCOLOR=#614a1c>....</TD><TD BGCOLOR=#604117>....</TD><TD BGCOLOR=#5f4217>....</TD><TD BGCOLOR=#5e491c>....</TD><TD BGCOLOR=#583c1c>....</TD><TD BGCOLOR=#562a14>....</TD><TD BGCOLOR=#563719>....</TD><TD BGCOLOR=#53350f>....</TD><TD BGCOLOR=#5b3a17>....</TD><TD BGCOLOR=#5a3f21>....</TD><TD BGCOLOR=#5d3d1c>....</TD><TD BGCOLOR=#684924>....</TD><TD BGCOLOR=#7c5c39>....</TD><TD BGCOLOR=#6f4f2d>....</TD><TD BGCOLOR=#78613b>....</TD><TD BGCOLOR=#7a5c36>....</TD><TD BGCOLOR=#87653f>....</TD><TD BGCOLOR=#8f7146>....</TD><TD BGCOLOR=#896f3f>....</TD><TD BGCOLOR=#987d51>....</TD><TD BGCOLOR=#987d52>....</TD><TD BGCOLOR=#8e7348>....</TD><TD BGCOLOR=#8d7247>....</TD><TD BGCOLOR=#826642>....</TD><TD BGCOLOR=#795c3b>....</TD><TD BGCOLOR=#76593b>....</TD><TD BGCOLOR=#876a4c>....</TD><TD BGCOLOR=#8f774e>....</TD><TD BGCOLOR=#91764e>....</TD><TD BGCOLOR=#91734c>....</TD><TD BGCOLOR=#9a7d55>....</TD><TD BGCOLOR=#977f53>....</TD><TD BGCOLOR=#9d8257>....</TD><TD BGCOLOR=#a18259>....</TD><TD BGCOLOR=#a1835b>....</TD><TD BGCOLOR=#9c8058>....</TD><TD BGCOLOR=#967b4f>....</TD><TD BGCOLOR=#94794a>....</TD><TD BGCOLOR=#917944>....</TD><TD BGCOLOR=#957b49>....</TD><TD BGCOLOR=#9d794d>....</TD><TD BGCOLOR=#a67b4c>....</TD><TD BGCOLOR=#aa8454>....</TD><TD BGCOLOR=#a88a58 COLSPAN=2>....</TD><TD BGCOLOR=#a17d4d>....</TD><TD BGCOLOR=#9a7445 COLSPAN=2>....</TD><TD BGCOLOR=#9e7849>....</TD><TD BGCOLOR=#a57f4f>....</TD><TD BGCOLOR=#ac8653>....</TD><TD BGCOLOR=#b18c58>....</TD><TD BGCOLOR=#a47f4b>....</TD><TD BGCOLOR=#9d7b48>....</TD><TD BGCOLOR=#a68a57>....</TD><TD BGCOLOR=#9d7d4c>....</TD><TD BGCOLOR=#9b7646>....</TD><TD BGCOLOR=#9c7546>....</TD><TD BGCOLOR=#a78251>....</TD><TD BGCOLOR=#b08b58>....</TD><TD BGCOLOR=#b18d56>....</TD><TD BGCOLOR=#b38956>....</TD><TD BGCOLOR=#b1894f>....</TD><TD BGCOLOR=#aa8853>....</TD><TD BGCOLOR=#a3864d>....</TD><TD BGCOLOR=#a7895a>....</TD><TD BGCOLOR=#a88559>....</TD><TD BGCOLOR=#ab8352>....</TD><TD BGCOLOR=#ae8350>....</TD><TD BGCOLOR=#a98551>....</TD><TD BGCOLOR=#9b7e4a>....</TD><TD BGCOLOR=#9b7c4d>....</TD><TD BGCOLOR=#9a754a>....</TD><TD BGCOLOR=#9a7b51>....</TD><TD BGCOLOR=#997e53>....</TD><TD BGCOLOR=#967e52>....</TD><TD BGCOLOR=#927c51>....</TD><TD BGCOLOR=#877650>....</TD><TD BGCOLOR=#7d704e>....</TD><TD BGCOLOR=#7b694f>....</TD><TD BGCOLOR=#7b6b55>....</TD><TD BGCOLOR=#80705c>....</TD><TD BGCOLOR=#836a58>....</TD><TD BGCOLOR=#7f6755>....</TD><TD BGCOLOR=#786752>....</TD><TD BGCOLOR=#746b53>....</TD><TD BGCOLOR=#746d54>....</TD><TD BGCOLOR=#72644f>....</TD><TD BGCOLOR=#6a5f4d>....</TD><TD BGCOLOR=#675846>....</TD><TD BGCOLOR=#69523d>....</TD><TD BGCOLOR=#3f230c>....</TD></TR> <TR><TD BGCOLOR=#341a02 COLSPAN=3>....</TD><TD BGCOLOR=#361c03>....</TD><TD BGCOLOR=#321700>....</TD><TD BGCOLOR=#391903>....</TD><TD BGCOLOR=#351c03>....</TD><TD BGCOLOR=#351902>....</TD><TD BGCOLOR=#391701>....</TD><TD BGCOLOR=#391702>....</TD><TD BGCOLOR=#361401>....</TD><TD BGCOLOR=#341202>....</TD><TD BGCOLOR=#331402>....</TD><TD BGCOLOR=#2d1a03>....</TD><TD BGCOLOR=#231400>....</TD><TD BGCOLOR=#371c07>....</TD><TD BGCOLOR=#371904>....</TD><TD BGCOLOR=#442104>....</TD><TD BGCOLOR=#5f4627>....</TD><TD BGCOLOR=#69593b>....</TD><TD BGCOLOR=#675737>....</TD><TD BGCOLOR=#5d5730>....</TD><TD BGCOLOR=#63582c>....</TD><TD BGCOLOR=#614419>....</TD><TD BGCOLOR=#624920>....</TD><TD BGCOLOR=#614315>....</TD><TD BGCOLOR=#5e4114>....</TD><TD BGCOLOR=#5e481d>....</TD><TD BGCOLOR=#5b3d14>....</TD><TD BGCOLOR=#562710>....</TD><TD BGCOLOR=#58341d>....</TD><TD BGCOLOR=#553517>....</TD><TD BGCOLOR=#5d3c19>....</TD><TD BGCOLOR=#5c4022>....</TD><TD BGCOLOR=#5a3a18>....</TD><TD BGCOLOR=#63411f>....</TD><TD BGCOLOR=#684527>....</TD><TD BGCOLOR=#734f31>....</TD><TD BGCOLOR=#6d5231>....</TD><TD BGCOLOR=#7b5f3c>....</TD><TD BGCOLOR=#7e5a37>....</TD><TD BGCOLOR=#8e6c46>....</TD><TD BGCOLOR=#82693c>....</TD><TD BGCOLOR=#8c7347>....</TD><TD BGCOLOR=#93784d>....</TD><TD BGCOLOR=#92774c>....</TD><TD BGCOLOR=#886d42>....</TD><TD BGCOLOR=#846641>....</TD><TD BGCOLOR=#75593a>....</TD><TD BGCOLOR=#715940>....</TD><TD BGCOLOR=#816d54>....</TD><TD BGCOLOR=#887851>....</TD><TD BGCOLOR=#8d7751>....</TD><TD BGCOLOR=#947552>....</TD><TD BGCOLOR=#977853>....</TD><TD BGCOLOR=#967e52>....</TD><TD BGCOLOR=#9a8357>....</TD><TD BGCOLOR=#9c8558>....</TD><TD BGCOLOR=#9c8256>....</TD><TD BGCOLOR=#947850>....</TD><TD BGCOLOR=#92764e>....</TD><TD BGCOLOR=#8f7545>....</TD><TD BGCOLOR=#93783f>....</TD><TD BGCOLOR=#97784a>....</TD><TD BGCOLOR=#9c7951>....</TD><TD BGCOLOR=#a27d4a>....</TD><TD BGCOLOR=#a67d50>....</TD><TD BGCOLOR=#9f8353>....</TD><TD BGCOLOR=#9a8050>....</TD><TD BGCOLOR=#9e764a>....</TD><TD BGCOLOR=#9c7647>....</TD><TD BGCOLOR=#9d7748>....</TD><TD BGCOLOR=#a27c4d>....</TD><TD BGCOLOR=#a78153>....</TD><TD BGCOLOR=#a98355>....</TD><TD BGCOLOR=#ad8853>....</TD><TD BGCOLOR=#ab8554>....</TD><TD BGCOLOR=#9d794c>....</TD><TD BGCOLOR=#9f8152>....</TD><TD BGCOLOR=#9b7c4d>....</TD><TD BGCOLOR=#967749>....</TD><TD BGCOLOR=#987748>....</TD><TD BGCOLOR=#a2814f>....</TD><TD BGCOLOR=#aa8955>....</TD><TD BGCOLOR=#b09058>....</TD><TD BGCOLOR=#b48b56>....</TD><TD BGCOLOR=#b28a4d>....</TD><TD BGCOLOR=#ae8c53>....</TD><TD BGCOLOR=#a6894d>....</TD><TD BGCOLOR=#a6864e>....</TD><TD BGCOLOR=#a48450>....</TD><TD BGCOLOR=#a07e4f>....</TD><TD BGCOLOR=#9a774a>....</TD><TD BGCOLOR=#a17e47>....</TD><TD BGCOLOR=#9d8049>....</TD><TD BGCOLOR=#9a7c49>....</TD><TD BGCOLOR=#9a7649>....</TD><TD BGCOLOR=#97784e>....</TD><TD BGCOLOR=#987d52>....</TD><TD BGCOLOR=#967f53>....</TD><TD BGCOLOR=#917c4e>....</TD><TD BGCOLOR=#8c7c4e>....</TD><TD BGCOLOR=#7d704b>....</TD><TD BGCOLOR=#7e6d54>....</TD><TD BGCOLOR=#75654e>....</TD><TD BGCOLOR=#766a50>....</TD><TD BGCOLOR=#7b6a56>....</TD><TD BGCOLOR=#766a58>....</TD><TD BGCOLOR=#6e6253>....</TD><TD BGCOLOR=#73695d>....</TD><TD BGCOLOR=#706a5b>....</TD><TD BGCOLOR=#6e634c>....</TD><TD BGCOLOR=#695e51>....</TD><TD BGCOLOR=#63523f>....</TD><TD BGCOLOR=#47311e>....</TD><TD BGCOLOR=#230f08>....</TD></TR> <TR><TD BGCOLOR=#331b01 COLSPAN=2>....</TD><TD BGCOLOR=#381701>....</TD><TD BGCOLOR=#391902>....</TD><TD BGCOLOR=#311800>....</TD><TD BGCOLOR=#391802>....</TD><TD BGCOLOR=#381902>....</TD><TD BGCOLOR=#381802>....</TD><TD BGCOLOR=#391601>....</TD><TD BGCOLOR=#371502>....</TD><TD BGCOLOR=#341503>....</TD><TD BGCOLOR=#361406>....</TD><TD BGCOLOR=#341604>....</TD><TD BGCOLOR=#2c1805>....</TD><TD BGCOLOR=#251101>....</TD><TD BGCOLOR=#341805>....</TD><TD BGCOLOR=#381803>....</TD><TD BGCOLOR=#431c05>....</TD><TD BGCOLOR=#61492f>....</TD><TD BGCOLOR=#675a3b>....</TD><TD BGCOLOR=#685939>....</TD><TD BGCOLOR=#605731>....</TD><TD BGCOLOR=#665c30>....</TD><TD BGCOLOR=#614319>....</TD><TD BGCOLOR=#604c1d>....</TD><TD BGCOLOR=#5d4412>....</TD><TD BGCOLOR=#5b4315>....</TD><TD BGCOLOR=#5c4921>....</TD><TD BGCOLOR=#5d4318>....</TD><TD BGCOLOR=#582e13>....</TD><TD BGCOLOR=#502c16>....</TD><TD BGCOLOR=#5c301a>....</TD><TD BGCOLOR=#5a3819>....</TD><TD BGCOLOR=#5d4223>....</TD><TD BGCOLOR=#5d3c1b>....</TD><TD BGCOLOR=#684024>....</TD><TD BGCOLOR=#63401f>....</TD><TD BGCOLOR=#6a4c2c>....</TD><TD BGCOLOR=#714e30>....</TD><TD BGCOLOR=#7d5a39>....</TD><TD BGCOLOR=#775b3a>....</TD><TD BGCOLOR=#82603e>....</TD><TD BGCOLOR=#82623a>....</TD><TD BGCOLOR=#93774b>....</TD><TD BGCOLOR=#96794e>....</TD><TD BGCOLOR=#876d42>....</TD><TD BGCOLOR=#8c764b>....</TD><TD BGCOLOR=#896744>....</TD><TD BGCOLOR=#745236>....</TD><TD BGCOLOR=#735740>....</TD><TD BGCOLOR=#7f6c56>....</TD><TD BGCOLOR=#867858>....</TD><TD BGCOLOR=#8b7551>....</TD><TD BGCOLOR=#8c714c>....</TD><TD BGCOLOR=#957a53>....</TD><TD BGCOLOR=#9b7e53>....</TD><TD BGCOLOR=#9a7d51>....</TD><TD BGCOLOR=#998054>....</TD><TD BGCOLOR=#957a4d>....</TD><TD BGCOLOR=#937348>....</TD><TD BGCOLOR=#8f7247>....</TD><TD BGCOLOR=#8e744a>....</TD><TD BGCOLOR=#917442>....</TD><TD BGCOLOR=#997645>....</TD><TD BGCOLOR=#9b7848>....</TD><TD BGCOLOR=#9d7e49>....</TD><TD BGCOLOR=#9c7a4a>....</TD><TD BGCOLOR=#987a4a>....</TD><TD BGCOLOR=#967848>....</TD><TD BGCOLOR=#987043>....</TD><TD BGCOLOR=#9d7346>....</TD><TD BGCOLOR=#a47d4c>....</TD><TD BGCOLOR=#a58151>....</TD><TD BGCOLOR=#a88659>....</TD><TD BGCOLOR=#aa885a>....</TD><TD BGCOLOR=#ad8756>....</TD><TD BGCOLOR=#a88454>....</TD><TD BGCOLOR=#a58355>....</TD><TD BGCOLOR=#9f7d51>....</TD><TD BGCOLOR=#9f8059>....</TD><TD BGCOLOR=#8f764e>....</TD><TD BGCOLOR=#96784b>....</TD><TD BGCOLOR=#a78353>....</TD><TD BGCOLOR=#b08e5c>....</TD><TD BGCOLOR=#b4945f>....</TD><TD BGCOLOR=#ba8f5d>....</TD><TD BGCOLOR=#b88e59>....</TD><TD BGCOLOR=#b48e5d>....</TD><TD BGCOLOR=#b48e59>....</TD><TD BGCOLOR=#b69157>....</TD><TD BGCOLOR=#b18c53>....</TD><TD BGCOLOR=#a98652>....</TD><TD BGCOLOR=#9e8053>....</TD><TD BGCOLOR=#9e7d41>....</TD><TD BGCOLOR=#9a7c47>....</TD><TD BGCOLOR=#96794b>....</TD><TD BGCOLOR=#95774c>....</TD><TD BGCOLOR=#8e7450>....</TD><TD BGCOLOR=#947953>....</TD><TD BGCOLOR=#987c53>....</TD><TD BGCOLOR=#9b7c53>....</TD><TD BGCOLOR=#8f754a>....</TD><TD BGCOLOR=#86724a>....</TD><TD BGCOLOR=#7d684c>....</TD><TD BGCOLOR=#72654e>....</TD><TD BGCOLOR=#71664f>....</TD><TD BGCOLOR=#706351>....</TD><TD BGCOLOR=#6c6958>....</TD><TD BGCOLOR=#6d6154>....</TD><TD BGCOLOR=#77655c>....</TD><TD BGCOLOR=#726458>....</TD><TD BGCOLOR=#6b6147>....</TD><TD BGCOLOR=#655b46>....</TD><TD BGCOLOR=#57442c>....</TD><TD BGCOLOR=#301e11>....</TD><TD BGCOLOR=#20100d>....</TD></TR> <TR><TD BGCOLOR=#321b01 COLSPAN=2>....</TD><TD BGCOLOR=#391400>....</TD><TD BGCOLOR=#391600>....</TD><TD BGCOLOR=#331b02>....</TD><TD BGCOLOR=#381701>....</TD><TD BGCOLOR=#391801>....</TD><TD BGCOLOR=#391802>....</TD><TD BGCOLOR=#381702>....</TD><TD BGCOLOR=#331502>....</TD><TD BGCOLOR=#2e1403>....</TD><TD BGCOLOR=#2e1003>....</TD><TD BGCOLOR=#2c1303>....</TD><TD BGCOLOR=#281605>....</TD><TD BGCOLOR=#270f02>....</TD><TD BGCOLOR=#341605>....</TD><TD BGCOLOR=#3a1802>....</TD><TD BGCOLOR=#421807>....</TD><TD BGCOLOR=#644c37>....</TD><TD BGCOLOR=#645d3c>....</TD><TD BGCOLOR=#675d38>....</TD><TD BGCOLOR=#655b33>....</TD><TD BGCOLOR=#665f33>....</TD><TD BGCOLOR=#62441c>....</TD><TD BGCOLOR=#5d4c1c>....</TD><TD BGCOLOR=#5c4615>....</TD><TD BGCOLOR=#5a4418>....</TD><TD BGCOLOR=#5c4b25>....</TD><TD BGCOLOR=#5b3f1b>....</TD><TD BGCOLOR=#5b3718>....</TD><TD BGCOLOR=#442a0c>....</TD><TD BGCOLOR=#552c11>....</TD><TD BGCOLOR=#5e3d21>....</TD><TD BGCOLOR=#5c4122>....</TD><TD BGCOLOR=#5e3f1d>....</TD><TD BGCOLOR=#683e26>....</TD><TD BGCOLOR=#623b19>....</TD><TD BGCOLOR=#604221>....</TD><TD BGCOLOR=#70462a>....</TD><TD BGCOLOR=#774d2d>....</TD><TD BGCOLOR=#796543>....</TD><TD BGCOLOR=#7f5d3f>....</TD><TD BGCOLOR=#845d38>....</TD><TD BGCOLOR=#997b51>....</TD><TD BGCOLOR=#916f46>....</TD><TD BGCOLOR=#9c7d53>....</TD><TD BGCOLOR=#978256>....</TD><TD BGCOLOR=#967652>....</TD><TD BGCOLOR=#805e40>....</TD><TD BGCOLOR=#6d5239>....</TD><TD BGCOLOR=#7d6d54>....</TD><TD BGCOLOR=#86765c>....</TD><TD BGCOLOR=#826b47>....</TD><TD BGCOLOR=#8b744b>....</TD><TD BGCOLOR=#907c52>....</TD><TD BGCOLOR=#937a4f>....</TD><TD BGCOLOR=#97754d>....</TD><TD BGCOLOR=#99784f>....</TD><TD BGCOLOR=#937248>....</TD><TD BGCOLOR=#906e41>....</TD><TD BGCOLOR=#8c6f40>....</TD><TD BGCOLOR=#886d46>....</TD><TD BGCOLOR=#8c6f45>....</TD><TD BGCOLOR=#997645>....</TD><TD BGCOLOR=#9c7745>....</TD><TD BGCOLOR=#947445>....</TD><TD BGCOLOR=#937242>....</TD><TD BGCOLOR=#987746>....</TD><TD BGCOLOR=#987847>....</TD><TD BGCOLOR=#9e7d4c>....</TD><TD BGCOLOR=#a3794e>....</TD><TD BGCOLOR=#a6804d>....</TD><TD BGCOLOR=#a2804d>....</TD><TD BGCOLOR=#a48456>....</TD><TD BGCOLOR=#a78756>....</TD><TD BGCOLOR=#af8859>....</TD><TD BGCOLOR=#a98555>....</TD><TD BGCOLOR=#a68952>....</TD><TD BGCOLOR=#a3864b>....</TD><TD BGCOLOR=#a48553>....</TD><TD BGCOLOR=#a58554>....</TD><TD BGCOLOR=#af8d5b>....</TD><TD BGCOLOR=#b08b5c>....</TD><TD BGCOLOR=#b1905f>....</TD><TD BGCOLOR=#ad8f5e>....</TD><TD BGCOLOR=#b68d5b>....</TD><TD BGCOLOR=#b5885c>....</TD><TD BGCOLOR=#b58b60>....</TD><TD BGCOLOR=#ba8c5c>....</TD><TD BGCOLOR=#b68f5c>....</TD><TD BGCOLOR=#b28a54>....</TD><TD BGCOLOR=#b18b57>....</TD><TD BGCOLOR=#ae8e60>....</TD><TD BGCOLOR=#b4955a>....</TD><TD BGCOLOR=#af8e5c>....</TD><TD BGCOLOR=#ad8b5c>....</TD><TD BGCOLOR=#a48452>....</TD><TD BGCOLOR=#947d52>....</TD><TD BGCOLOR=#8c7349>....</TD><TD BGCOLOR=#93744d>....</TD><TD BGCOLOR=#9c7953>....</TD><TD BGCOLOR=#997951>....</TD><TD BGCOLOR=#8b7148>....</TD><TD BGCOLOR=#806647>....</TD><TD BGCOLOR=#6f6049>....</TD><TD BGCOLOR=#6f5f4f>....</TD><TD BGCOLOR=#6c5f51>....</TD><TD BGCOLOR=#686758>....</TD><TD BGCOLOR=#6b624f>....</TD><TD BGCOLOR=#6d604f>....</TD><TD BGCOLOR=#695f51>....</TD><TD BGCOLOR=#635e49>....</TD><TD BGCOLOR=#5a5342>....</TD><TD BGCOLOR=#392a19>....</TD><TD BGCOLOR=#1b0e09>....</TD><TD BGCOLOR=#210d08>....</TD></TR> <TR><TD BGCOLOR=#361a02 COLSPAN=2>....</TD><TD BGCOLOR=#361500>....</TD><TD BGCOLOR=#341400>....</TD><TD BGCOLOR=#341901>....</TD><TD BGCOLOR=#351801>....</TD><TD BGCOLOR=#371a02>....</TD><TD BGCOLOR=#361901>....</TD><TD BGCOLOR=#351902>....</TD><TD BGCOLOR=#311703>....</TD><TD BGCOLOR=#311604>....</TD><TD BGCOLOR=#2e1205>....</TD><TD BGCOLOR=#2b1604>....</TD><TD BGCOLOR=#261502>....</TD><TD BGCOLOR=#270f02>....</TD><TD BGCOLOR=#351606>....</TD><TD BGCOLOR=#391902>....</TD><TD BGCOLOR=#401a08>....</TD><TD BGCOLOR=#624e38>....</TD><TD BGCOLOR=#63603d>....</TD><TD BGCOLOR=#645d33>....</TD><TD BGCOLOR=#635d31>....</TD><TD BGCOLOR=#656236>....</TD><TD BGCOLOR=#5e4420>....</TD><TD BGCOLOR=#5b4923>....</TD><TD BGCOLOR=#5c451a>....</TD><TD BGCOLOR=#5b4519>....</TD><TD BGCOLOR=#5c4a21>....</TD><TD BGCOLOR=#5f3d17>....</TD><TD BGCOLOR=#613f1c>....</TD><TD BGCOLOR=#453611>....</TD><TD BGCOLOR=#4a2f0d>....</TD><TD BGCOLOR=#5b3e21>....</TD><TD BGCOLOR=#624425>....</TD><TD BGCOLOR=#5d411e>....</TD><TD BGCOLOR=#674229>....</TD><TD BGCOLOR=#5d3516>....</TD><TD BGCOLOR=#603b20>....</TD><TD BGCOLOR=#643a22>....</TD><TD BGCOLOR=#6d4525>....</TD><TD BGCOLOR=#715d3b>....</TD><TD BGCOLOR=#795739>....</TD><TD BGCOLOR=#8c6640>....</TD><TD BGCOLOR=#8f704a>....</TD><TD BGCOLOR=#956f49>....</TD><TD BGCOLOR=#ac855c>....</TD><TD BGCOLOR=#a08153>....</TD><TD BGCOLOR=#9a7f56>....</TD><TD BGCOLOR=#8a6b49>....</TD><TD BGCOLOR=#725b3d>....</TD><TD BGCOLOR=#7d7054>....</TD><TD BGCOLOR=#847459>....</TD><TD BGCOLOR=#7c6542>....</TD><TD BGCOLOR=#8c754d>....</TD><TD BGCOLOR=#8a7a50>....</TD><TD BGCOLOR=#89784d>....</TD><TD BGCOLOR=#90714b>....</TD><TD BGCOLOR=#94714c>....</TD><TD BGCOLOR=#8f6f47>....</TD><TD BGCOLOR=#886a40>....</TD><TD BGCOLOR=#8a6a41>....</TD><TD BGCOLOR=#8c6d42>....</TD><TD BGCOLOR=#896b40>....</TD><TD BGCOLOR=#936f41>....</TD><TD BGCOLOR=#987344>....</TD><TD BGCOLOR=#9e7e52>....</TD><TD BGCOLOR=#a47f51>....</TD><TD BGCOLOR=#a78353>....</TD><TD BGCOLOR=#a28352>....</TD><TD BGCOLOR=#a08352>....</TD><TD BGCOLOR=#a47f57>....</TD><TD BGCOLOR=#b08b5a>....</TD><TD BGCOLOR=#b18c57>....</TD><TD BGCOLOR=#b79261>....</TD><TD BGCOLOR=#b69363>....</TD><TD BGCOLOR=#b98f61>....</TD><TD BGCOLOR=#b68f60>....</TD><TD BGCOLOR=#b29260>....</TD><TD BGCOLOR=#b49264>....</TD><TD BGCOLOR=#b79068>....</TD><TD BGCOLOR=#bc9165>....</TD><TD BGCOLOR=#bc9464>....</TD><TD BGCOLOR=#b79363>....</TD><TD BGCOLOR=#b69564>....</TD><TD BGCOLOR=#b99b69>....</TD><TD BGCOLOR=#c39c68>....</TD><TD BGCOLOR=#c79a6b>....</TD><TD BGCOLOR=#c89a6e>....</TD><TD BGCOLOR=#cb9f6d>....</TD><TD BGCOLOR=#c9a272>....</TD><TD BGCOLOR=#c69c6a>....</TD><TD BGCOLOR=#c09969>....</TD><TD BGCOLOR=#b29267>....</TD><TD BGCOLOR=#b39462>....</TD><TD BGCOLOR=#b79365>....</TD><TD BGCOLOR=#b8905e>....</TD><TD BGCOLOR=#ba9358>....</TD><TD BGCOLOR=#ad935d>....</TD><TD BGCOLOR=#a38958>....</TD><TD BGCOLOR=#998053>....</TD><TD BGCOLOR=#95784f>....</TD><TD BGCOLOR=#93774e>....</TD><TD BGCOLOR=#92784f>....</TD><TD BGCOLOR=#846648>....</TD><TD BGCOLOR=#6f5b44>....</TD><TD BGCOLOR=#6e5f4f>....</TD><TD BGCOLOR=#655d53>....</TD><TD BGCOLOR=#626151>....</TD><TD BGCOLOR=#66624a>....</TD><TD BGCOLOR=#5e5e49>....</TD><TD BGCOLOR=#5e5e51>....</TD><TD BGCOLOR=#5e564a>....</TD><TD BGCOLOR=#443431>....</TD><TD BGCOLOR=#24140a>....</TD><TD BGCOLOR=#1b1007>....</TD><TD BGCOLOR=#381e10>....</TD></TR> <TR><TD BGCOLOR=#351700 COLSPAN=2>....</TD><TD BGCOLOR=#341700>....</TD><TD BGCOLOR=#331500>....</TD><TD BGCOLOR=#331600>....</TD><TD BGCOLOR=#321800>....</TD><TD BGCOLOR=#341901>....</TD><TD BGCOLOR=#331800>....</TD><TD BGCOLOR=#301901>....</TD><TD BGCOLOR=#2d1702>....</TD><TD BGCOLOR=#311504>....</TD><TD BGCOLOR=#2e1507>....</TD><TD BGCOLOR=#291803>....</TD><TD BGCOLOR=#271602>....</TD><TD BGCOLOR=#2a1104>....</TD><TD BGCOLOR=#351605>....</TD><TD BGCOLOR=#381a03>....</TD><TD BGCOLOR=#3e1b08>....</TD><TD BGCOLOR=#625139>....</TD><TD BGCOLOR=#62623e>....</TD><TD BGCOLOR=#636031>....</TD><TD BGCOLOR=#636032>....</TD><TD BGCOLOR=#66653a>....</TD><TD BGCOLOR=#5f4627>....</TD><TD BGCOLOR=#5f4c2d>....</TD><TD BGCOLOR=#5b441d>....</TD><TD BGCOLOR=#584218>....</TD><TD BGCOLOR=#59491e>....</TD><TD BGCOLOR=#5c4116>....</TD><TD BGCOLOR=#5f421a>....</TD><TD BGCOLOR=#4a3d13>....</TD><TD BGCOLOR=#452e0a>....</TD><TD BGCOLOR=#4e3617>....</TD><TD BGCOLOR=#5b3d1e>....</TD><TD BGCOLOR=#5f4622>....</TD><TD BGCOLOR=#5b4126>....</TD><TD BGCOLOR=#634325>....</TD><TD BGCOLOR=#604026>....</TD><TD BGCOLOR=#58381f>....</TD><TD BGCOLOR=#6c4727>....</TD><TD BGCOLOR=#65512f>....</TD><TD BGCOLOR=#735133>....</TD><TD BGCOLOR=#845d38>....</TD><TD BGCOLOR=#8b6a48>....</TD><TD BGCOLOR=#a77d5b>....</TD><TD BGCOLOR=#ae7f57>....</TD><TD BGCOLOR=#b38859>....</TD><TD BGCOLOR=#a38157>....</TD><TD BGCOLOR=#9b7854>....</TD><TD BGCOLOR=#816546>....</TD><TD BGCOLOR=#806f52>....</TD><TD BGCOLOR=#7d6e53>....</TD><TD BGCOLOR=#7a6340>....</TD><TD BGCOLOR=#89724a>....</TD><TD BGCOLOR=#847149>....</TD><TD BGCOLOR=#86714b>....</TD><TD BGCOLOR=#8d704d>....</TD><TD BGCOLOR=#8a704c>....</TD><TD BGCOLOR=#826b42>....</TD><TD BGCOLOR=#7f643e>....</TD><TD BGCOLOR=#84653f>....</TD><TD BGCOLOR=#906d3f>....</TD><TD BGCOLOR=#9e7f4d>....</TD><TD BGCOLOR=#ac8957>....</TD><TD BGCOLOR=#b28d59>....</TD><TD BGCOLOR=#af8f5e>....</TD><TD BGCOLOR=#ab8c5b>....</TD><TD BGCOLOR=#ab8a59>....</TD><TD BGCOLOR=#ab8959>....</TD><TD BGCOLOR=#ae8b5c>....</TD><TD BGCOLOR=#b5946f>....</TD><TD BGCOLOR=#bc9969>....</TD><TD BGCOLOR=#caa36d>....</TD><TD BGCOLOR=#cca370>....</TD><TD BGCOLOR=#cca576>....</TD><TD BGCOLOR=#d1a477>....</TD><TD BGCOLOR=#d2a87a>....</TD><TD BGCOLOR=#d0a87a>....</TD><TD BGCOLOR=#cea077>....</TD><TD BGCOLOR=#cb9e75>....</TD><TD BGCOLOR=#cda371>....</TD><TD BGCOLOR=#d3a775>....</TD><TD BGCOLOR=#d2a578>....</TD><TD BGCOLOR=#d1a77a>....</TD><TD BGCOLOR=#d1aa7b>....</TD><TD BGCOLOR=#cfa972>....</TD><TD BGCOLOR=#d4a674>....</TD><TD BGCOLOR=#d8a678>....</TD><TD BGCOLOR=#d7ae77>....</TD><TD BGCOLOR=#d0ab7b>....</TD><TD BGCOLOR=#d3aa7b>....</TD><TD BGCOLOR=#c9a175>....</TD><TD BGCOLOR=#c2a27b>....</TD><TD BGCOLOR=#bf9d73>....</TD><TD BGCOLOR=#bd9b74>....</TD><TD BGCOLOR=#b59569>....</TD><TD BGCOLOR=#b29461>....</TD><TD BGCOLOR=#b09066>....</TD><TD BGCOLOR=#af9366>....</TD><TD BGCOLOR=#aa9464>....</TD><TD BGCOLOR=#a48d5e>....</TD><TD BGCOLOR=#967e54>....</TD><TD BGCOLOR=#937950>....</TD><TD BGCOLOR=#8d6b4e>....</TD><TD BGCOLOR=#715f45>....</TD><TD BGCOLOR=#67624e>....</TD><TD BGCOLOR=#5e5952>....</TD><TD BGCOLOR=#625548>....</TD><TD BGCOLOR=#645949>....</TD><TD BGCOLOR=#5a5a4d>....</TD><TD BGCOLOR=#58584d>....</TD><TD BGCOLOR=#544337>....</TD><TD BGCOLOR=#381a16>....</TD><TD BGCOLOR=#2e1603>....</TD><TD BGCOLOR=#3f2f13>....</TD><TD BGCOLOR=#603b17>....</TD></TR> <TR><TD BGCOLOR=#351200 COLSPAN=2>....</TD><TD BGCOLOR=#351502 COLSPAN=2>....</TD><TD BGCOLOR=#361300>....</TD><TD BGCOLOR=#331500>....</TD><TD BGCOLOR=#321902>....</TD><TD BGCOLOR=#341502>....</TD><TD BGCOLOR=#301905>....</TD><TD BGCOLOR=#281507>....</TD><TD BGCOLOR=#2f1107>....</TD><TD BGCOLOR=#2d1308>....</TD><TD BGCOLOR=#281406>....</TD><TD BGCOLOR=#2a1505>....</TD><TD BGCOLOR=#2e0e04>....</TD><TD BGCOLOR=#351604>....</TD><TD BGCOLOR=#391c05>....</TD><TD BGCOLOR=#3f1d08>....</TD><TD BGCOLOR=#62533c>....</TD><TD BGCOLOR=#61613b>....</TD><TD BGCOLOR=#705b36>....</TD><TD BGCOLOR=#6e623e>....</TD><TD BGCOLOR=#6b6640>....</TD><TD BGCOLOR=#614e27>....</TD><TD BGCOLOR=#5c4a23>....</TD><TD BGCOLOR=#5d411a>....</TD><TD BGCOLOR=#5d3e17>....</TD><TD BGCOLOR=#61451d>....</TD><TD BGCOLOR=#5a3e14>....</TD><TD BGCOLOR=#5f4717>....</TD><TD BGCOLOR=#564114>....</TD><TD BGCOLOR=#4b3410>....</TD><TD BGCOLOR=#3e3010>....</TD><TD BGCOLOR=#53391c>....</TD><TD BGCOLOR=#5d4122>....</TD><TD BGCOLOR=#5e4226>....</TD><TD BGCOLOR=#614227>....</TD><TD BGCOLOR=#603f29>....</TD><TD BGCOLOR=#5f3e29>....</TD><TD BGCOLOR=#5e3c1e>....</TD><TD BGCOLOR=#654a26>....</TD><TD BGCOLOR=#75502d>....</TD><TD BGCOLOR=#754e27>....</TD><TD BGCOLOR=#906e47>....</TD><TD BGCOLOR=#a67a54>....</TD><TD BGCOLOR=#b38359>....</TD><TD BGCOLOR=#b78c5d>....</TD><TD BGCOLOR=#ad8756>....</TD><TD BGCOLOR=#a97f54>....</TD><TD BGCOLOR=#8f6a49>....</TD><TD BGCOLOR=#846851>....</TD><TD BGCOLOR=#75624e>....</TD><TD BGCOLOR=#7b6447>....</TD><TD BGCOLOR=#826943>....</TD><TD BGCOLOR=#836b45>....</TD><TD BGCOLOR=#826f4f>....</TD><TD BGCOLOR=#84704e>....</TD><TD BGCOLOR=#795c3a>....</TD><TD BGCOLOR=#7a5c3c>....</TD><TD BGCOLOR=#8d7453>....</TD><TD BGCOLOR=#a4885f>....</TD><TD BGCOLOR=#ae915b>....</TD><TD BGCOLOR=#b5995e>....</TD><TD BGCOLOR=#b6965d>....</TD><TD BGCOLOR=#b7925e>....</TD><TD BGCOLOR=#b48c5f>....</TD><TD BGCOLOR=#ab915e>....</TD><TD BGCOLOR=#a7915d>....</TD><TD BGCOLOR=#b09562>....</TD><TD BGCOLOR=#b99465>....</TD><TD BGCOLOR=#c39c74>....</TD><TD BGCOLOR=#c9a176>....</TD><TD BGCOLOR=#d3aa7c>....</TD><TD BGCOLOR=#d8af81>....</TD><TD BGCOLOR=#dbb687>....</TD><TD BGCOLOR=#deb386>....</TD><TD BGCOLOR=#e3b287>....</TD><TD BGCOLOR=#ddaf83>....</TD><TD BGCOLOR=#d8ad7d>....</TD><TD BGCOLOR=#e0b17d>....</TD><TD BGCOLOR=#e5b881>....</TD><TD BGCOLOR=#ddb17b>....</TD><TD BGCOLOR=#dcaf83>....</TD><TD BGCOLOR=#d2a87a>....</TD><TD BGCOLOR=#caa477>....</TD><TD BGCOLOR=#d0a274>....</TD><TD BGCOLOR=#d8a278>....</TD><TD BGCOLOR=#d9a37a>....</TD><TD BGCOLOR=#d4a776>....</TD><TD BGCOLOR=#d6ad7f>....</TD><TD BGCOLOR=#d6a779>....</TD><TD BGCOLOR=#d3a475>....</TD><TD BGCOLOR=#cca775>....</TD><TD BGCOLOR=#bea27c>....</TD><TD BGCOLOR=#c19874>....</TD><TD BGCOLOR=#c0966e>....</TD><TD BGCOLOR=#b69869>....</TD><TD BGCOLOR=#ae996c>....</TD><TD BGCOLOR=#b2946e>....</TD><TD BGCOLOR=#b09369>....</TD><TD BGCOLOR=#b39868>....</TD><TD BGCOLOR=#b09367>....</TD><TD BGCOLOR=#a38862>....</TD><TD BGCOLOR=#9d7b62>....</TD><TD BGCOLOR=#836a50>....</TD><TD BGCOLOR=#635641>....</TD><TD BGCOLOR=#5e544e>....</TD><TD BGCOLOR=#5b534d>....</TD><TD BGCOLOR=#565248>....</TD><TD BGCOLOR=#525244>....</TD><TD BGCOLOR=#4d4438>....</TD><TD BGCOLOR=#3e221f>....</TD><TD BGCOLOR=#371c07>....</TD><TD BGCOLOR=#523a18>....</TD><TD BGCOLOR=#5f4923>....</TD><TD BGCOLOR=#71542a>....</TD></TR> </TABLE><TABLE CELLPADDING=0 CELLSPACING=0 BORDER=0> <TR><TD BGCOLOR=#341301>....</TD><TD BGCOLOR=#341301>....</TD><TD BGCOLOR=#371402>....</TD><TD BGCOLOR=#351301>....</TD><TD BGCOLOR=#361401>....</TD><TD BGCOLOR=#341400>....</TD><TD BGCOLOR=#311903>....</TD><TD BGCOLOR=#361403>....</TD><TD BGCOLOR=#321906>....</TD><TD BGCOLOR=#2d170a>....</TD><TD BGCOLOR=#2e1208>....</TD><TD BGCOLOR=#2d1508>....</TD><TD BGCOLOR=#2c1309>....</TD><TD BGCOLOR=#2f1608>....</TD><TD BGCOLOR=#2f0f05>....</TD><TD BGCOLOR=#341703>....</TD><TD BGCOLOR=#371802>....</TD><TD BGCOLOR=#3d1c06>....</TD><TD BGCOLOR=#635742>....</TD><TD BGCOLOR=#636140>....</TD><TD BGCOLOR=#6e5838>....</TD><TD BGCOLOR=#706344>....</TD><TD BGCOLOR=#706a46>....</TD><TD BGCOLOR=#64562c>....</TD><TD BGCOLOR=#5d4f24>....</TD><TD BGCOLOR=#5b421b>....</TD><TD BGCOLOR=#5e3f19>....</TD><TD BGCOLOR=#61421d>....</TD><TD BGCOLOR=#5a3d13>....</TD><TD BGCOLOR=#5a4414>....</TD><TD BGCOLOR=#584012>....</TD><TD BGCOLOR=#513712>....</TD><TD BGCOLOR=#402c0c>....</TD><TD BGCOLOR=#502f14>....</TD><TD BGCOLOR=#613e24>....</TD><TD BGCOLOR=#5e3d22>....</TD><TD BGCOLOR=#654329>....</TD><TD BGCOLOR=#603d29>....</TD><TD BGCOLOR=#5f3c28>....</TD><TD BGCOLOR=#5e3c22>....</TD><TD BGCOLOR=#644827>....</TD><TD BGCOLOR=#6b4522>....</TD><TD BGCOLOR=#805a36>....</TD><TD BGCOLOR=#926f48>....</TD><TD BGCOLOR=#9d724c>....</TD><TD BGCOLOR=#ae8057>....</TD><TD BGCOLOR=#b3885c>....</TD><TD BGCOLOR=#b48a5b>....</TD><TD BGCOLOR=#ac8254>....</TD><TD BGCOLOR=#97734f>....</TD><TD BGCOLOR=#81684d>....</TD><TD BGCOLOR=#6e6144>....</TD><TD BGCOLOR=#776444>....</TD><TD BGCOLOR=#816544>....</TD><TD BGCOLOR=#806441>....</TD><TD BGCOLOR=#705d35>....</TD><TD BGCOLOR=#745f35>....</TD><TD BGCOLOR=#93754b>....</TD><TD BGCOLOR=#aa8a5f>....</TD><TD BGCOLOR=#ae9064>....</TD><TD BGCOLOR=#b79665>....</TD><TD BGCOLOR=#bc9864>....</TD><TD BGCOLOR=#ba9861>....</TD><TD BGCOLOR=#b79560>....</TD><TD BGCOLOR=#b79160>....</TD><TD BGCOLOR=#b88f62>....</TD><TD BGCOLOR=#b19361>....</TD><TD BGCOLOR=#ac9460>....</TD><TD BGCOLOR=#b29865>....</TD><TD BGCOLOR=#c09d6d>....</TD><TD BGCOLOR=#ca9f73>....</TD><TD BGCOLOR=#d1a67b>....</TD><TD BGCOLOR=#d6ab7f>....</TD><TD BGCOLOR=#dcb185>....</TD><TD BGCOLOR=#dfb384>....</TD><TD BGCOLOR=#e2b083>....</TD><TD BGCOLOR=#e4aa80>....</TD><TD BGCOLOR=#dba67d>....</TD><TD BGCOLOR=#cea476>....</TD><TD BGCOLOR=#d3a16e>....</TD><TD BGCOLOR=#d5a371>....</TD><TD BGCOLOR=#d2a470>....</TD><TD BGCOLOR=#d1a174>....</TD><TD BGCOLOR=#cd9b6e>....</TD><TD BGCOLOR=#ce9a70>....</TD><TD BGCOLOR=#d1976f>....</TD><TD BGCOLOR=#d39b74>....</TD><TD BGCOLOR=#d39f77>....</TD><TD BGCOLOR=#d6a578>....</TD><TD BGCOLOR=#d7ac7a>....</TD><TD BGCOLOR=#ddae7e>....</TD><TD BGCOLOR=#daab7d>....</TD><TD BGCOLOR=#d2a87b>....</TD><TD BGCOLOR=#d1ad7d>....</TD><TD BGCOLOR=#d2a378>....</TD><TD BGCOLOR=#c69c71>....</TD><TD BGCOLOR=#b89a6c>....</TD><TD BGCOLOR=#b5996a>....</TD><TD BGCOLOR=#b9946f>....</TD><TD BGCOLOR=#b48e67>....</TD><TD BGCOLOR=#b29065>....</TD><TD BGCOLOR=#b08f6c>....</TD><TD BGCOLOR=#a88d69>....</TD><TD BGCOLOR=#ad8d6c>....</TD><TD BGCOLOR=#a18463>....</TD><TD BGCOLOR=#8b765c>....</TD><TD BGCOLOR=#665648>....</TD><TD BGCOLOR=#4c4136>....</TD><TD BGCOLOR=#483a31>....</TD><TD BGCOLOR=#45392c>....</TD><TD BGCOLOR=#382b1c>....</TD><TD BGCOLOR=#381f18>....</TD><TD BGCOLOR=#503e22>....</TD><TD BGCOLOR=#584625>....</TD><TD BGCOLOR=#644c2d>....</TD><TD BGCOLOR=#806345>....</TD></TR> <TR><TD BGCOLOR=#2f1500 COLSPAN=2>....</TD><TD BGCOLOR=#371502>....</TD><TD BGCOLOR=#351401>....</TD><TD BGCOLOR=#311501>....</TD><TD BGCOLOR=#341500>....</TD><TD BGCOLOR=#2f1601>....</TD><TD BGCOLOR=#361403>....</TD><TD BGCOLOR=#361906>....</TD><TD BGCOLOR=#2f1304>....</TD><TD BGCOLOR=#2b1506>....</TD><TD BGCOLOR=#291605>....</TD><TD BGCOLOR=#2d0e04>....</TD><TD BGCOLOR=#2e1105>....</TD><TD BGCOLOR=#280e02>....</TD><TD BGCOLOR=#321803>....</TD><TD BGCOLOR=#381600>....</TD><TD BGCOLOR=#3a1c06>....</TD><TD BGCOLOR=#625a47>....</TD><TD BGCOLOR=#666049>....</TD><TD BGCOLOR=#675f3e>....</TD><TD BGCOLOR=#6d674a>....</TD><TD BGCOLOR=#726d4c>....</TD><TD BGCOLOR=#625830>....</TD><TD BGCOLOR=#5a532a>....</TD><TD BGCOLOR=#584520>....</TD><TD BGCOLOR=#573e1b>....</TD><TD BGCOLOR=#5a411c>....</TD><TD BGCOLOR=#5a3d12>....</TD><TD BGCOLOR=#5c461a>....</TD><TD BGCOLOR=#563d11>....</TD><TD BGCOLOR=#563910>....</TD><TD BGCOLOR=#4e2f0f>....</TD><TD BGCOLOR=#4b240b>....</TD><TD BGCOLOR=#512b17>....</TD><TD BGCOLOR=#5a3821>....</TD><TD BGCOLOR=#5b391f>....</TD><TD BGCOLOR=#583520>....</TD><TD BGCOLOR=#5a3724>....</TD><TD BGCOLOR=#694832>....</TD><TD BGCOLOR=#5f452a>....</TD><TD BGCOLOR=#704c31>....</TD><TD BGCOLOR=#916d4e>....</TD><TD BGCOLOR=#8e6745>....</TD><TD BGCOLOR=#825a36>....</TD><TD BGCOLOR=#9c714b>....</TD><TD BGCOLOR=#aa7b53>....</TD><TD BGCOLOR=#ab7e56>....</TD><TD BGCOLOR=#a77e52>....</TD><TD BGCOLOR=#9a7e53>....</TD><TD BGCOLOR=#7b6a46>....</TD><TD BGCOLOR=#705d3c>....</TD><TD BGCOLOR=#705837>....</TD><TD BGCOLOR=#6d4e2c>....</TD><TD BGCOLOR=#74552f>....</TD><TD BGCOLOR=#8e7546>....</TD><TD BGCOLOR=#a68a5a>....</TD><TD BGCOLOR=#b19661>....</TD><TD BGCOLOR=#b4975f>....</TD><TD BGCOLOR=#ba9760>....</TD><TD BGCOLOR=#ba9460>....</TD><TD BGCOLOR=#bb9160>....</TD><TD BGCOLOR=#bb9366>....</TD><TD BGCOLOR=#b69063>....</TD><TD BGCOLOR=#b28d5f>....</TD><TD BGCOLOR=#b28f5e>....</TD><TD BGCOLOR=#b99062>....</TD><TD BGCOLOR=#bd9b6b>....</TD><TD BGCOLOR=#c5a674>....</TD><TD BGCOLOR=#cda879>....</TD><TD BGCOLOR=#d8aa7d>....</TD><TD BGCOLOR=#dcae81>....</TD><TD BGCOLOR=#e1b285>....</TD><TD BGCOLOR=#e6b78a>....</TD><TD BGCOLOR=#ebba8a>....</TD><TD BGCOLOR=#eeb789>....</TD><TD BGCOLOR=#f1b287>....</TD><TD BGCOLOR=#e8ad84>....</TD><TD BGCOLOR=#d8ab7e>....</TD><TD BGCOLOR=#d6a16f>....</TD><TD BGCOLOR=#ce9a68>....</TD><TD BGCOLOR=#c99764>....</TD><TD BGCOLOR=#cb9567>....</TD><TD BGCOLOR=#d89c6f>....</TD><TD BGCOLOR=#e0a177>....</TD><TD BGCOLOR=#d99972>....</TD><TD BGCOLOR=#d19c73>....</TD><TD BGCOLOR=#cfa178>....</TD><TD BGCOLOR=#deaa7e>....</TD><TD BGCOLOR=#dbac7c>....</TD><TD BGCOLOR=#d5a97a>....</TD><TD BGCOLOR=#d5a87e>....</TD><TD BGCOLOR=#d6a780>....</TD><TD BGCOLOR=#d7a570>....</TD><TD BGCOLOR=#d4a474>....</TD><TD BGCOLOR=#cba47a>....</TD><TD BGCOLOR=#c0a077>....</TD><TD BGCOLOR=#c69d70>....</TD><TD BGCOLOR=#c39d75>....</TD><TD BGCOLOR=#bf9a6e>....</TD><TD BGCOLOR=#b89269>....</TD><TD BGCOLOR=#b18e73>....</TD><TD BGCOLOR=#aa8f6c>....</TD><TD BGCOLOR=#ad8e66>....</TD><TD BGCOLOR=#aa8b66>....</TD><TD BGCOLOR=#a28866>....</TD><TD BGCOLOR=#957d5e>....</TD><TD BGCOLOR=#6d563d>....</TD><TD BGCOLOR=#422413>....</TD><TD BGCOLOR=#412715>....</TD><TD BGCOLOR=#68543c>....</TD><TD BGCOLOR=#745c3f>....</TD><TD BGCOLOR=#715b37>....</TD><TD BGCOLOR=#6d5434>....</TD><TD BGCOLOR=#705339>....</TD><TD BGCOLOR=#6c4c37>....</TD></TR> <TR><TD BGCOLOR=#2b1700 COLSPAN=2>....</TD><TD BGCOLOR=#371502>....</TD><TD BGCOLOR=#351502>....</TD><TD BGCOLOR=#2d1701>....</TD><TD BGCOLOR=#351600>....</TD><TD BGCOLOR=#2e1500>....</TD><TD BGCOLOR=#361404>....</TD><TD BGCOLOR=#361604>....</TD><TD BGCOLOR=#321201>....</TD><TD BGCOLOR=#291603>....</TD><TD BGCOLOR=#291a05>....</TD><TD BGCOLOR=#310f05>....</TD><TD BGCOLOR=#300f04>....</TD><TD BGCOLOR=#261002>....</TD><TD BGCOLOR=#311b04>....</TD><TD BGCOLOR=#3d1901>....</TD><TD BGCOLOR=#3a1d07>....</TD><TD BGCOLOR=#615c4c>....</TD><TD BGCOLOR=#675e4e>....</TD><TD BGCOLOR=#636444>....</TD><TD BGCOLOR=#6c6b4e>....</TD><TD BGCOLOR=#746f51>....</TD><TD BGCOLOR=#655e38>....</TD><TD BGCOLOR=#5b5931>....</TD><TD BGCOLOR=#584b27>....</TD><TD BGCOLOR=#55421f>....</TD><TD BGCOLOR=#57431e>....</TD><TD BGCOLOR=#583b0e>....</TD><TD BGCOLOR=#5a431b>....</TD><TD BGCOLOR=#573d13>....</TD><TD BGCOLOR=#56390d>....</TD><TD BGCOLOR=#553612>....</TD><TD BGCOLOR=#4b270d>....</TD><TD BGCOLOR=#432310>....</TD><TD BGCOLOR=#4d301a>....</TD><TD BGCOLOR=#57351b>....</TD><TD BGCOLOR=#522f1a>....</TD><TD BGCOLOR=#56331f>....</TD><TD BGCOLOR=#5a3b27>....</TD><TD BGCOLOR=#543c25>....</TD><TD BGCOLOR=#74533c>....</TD><TD BGCOLOR=#87664b>....</TD><TD BGCOLOR=#7d5437>....</TD><TD BGCOLOR=#845e3c>....</TD><TD BGCOLOR=#8c6440>....</TD><TD BGCOLOR=#a3714d>....</TD><TD BGCOLOR=#9c6d49>....</TD><TD BGCOLOR=#966d42>....</TD><TD BGCOLOR=#887042>....</TD><TD BGCOLOR=#807149>....</TD><TD BGCOLOR=#663a25>....</TD><TD BGCOLOR=#6d4528>....</TD><TD BGCOLOR=#906f46>....</TD><TD BGCOLOR=#a6895b>....</TD><TD BGCOLOR=#af9064>....</TD><TD BGCOLOR=#b59163>....</TD><TD BGCOLOR=#b49865>....</TD><TD BGCOLOR=#b09662>....</TD><TD BGCOLOR=#b89765>....</TD><TD BGCOLOR=#ba9766>....</TD><TD BGCOLOR=#b5905e>....</TD><TD BGCOLOR=#b98e66>....</TD><TD BGCOLOR=#af855e>....</TD><TD BGCOLOR=#b59164>....</TD><TD BGCOLOR=#bc9d6a>....</TD><TD BGCOLOR=#cb9b70>....</TD><TD BGCOLOR=#cea477>....</TD><TD BGCOLOR=#cda979>....</TD><TD BGCOLOR=#d2ab7c>....</TD><TD BGCOLOR=#deae7f>....</TD><TD BGCOLOR=#dead7e>....</TD><TD BGCOLOR=#e3b282>....</TD><TD BGCOLOR=#e6b686>....</TD><TD BGCOLOR=#e9bc88>....</TD><TD BGCOLOR=#eebb89>....</TD><TD BGCOLOR=#f0b586>....</TD><TD BGCOLOR=#ebb387>....</TD><TD BGCOLOR=#e2b186>....</TD><TD BGCOLOR=#dba372>....</TD><TD BGCOLOR=#cf9968>....</TD><TD BGCOLOR=#c7905c>....</TD><TD BGCOLOR=#d19567>....</TD><TD BGCOLOR=#d09767>....</TD><TD BGCOLOR=#dca576>....</TD><TD BGCOLOR=#d89a71>....</TD><TD BGCOLOR=#c8946b>....</TD><TD BGCOLOR=#c1966c>....</TD><TD BGCOLOR=#ce996d>....</TD><TD BGCOLOR=#c7946e>....</TD><TD BGCOLOR=#bf946c>....</TD><TD BGCOLOR=#bc9368>....</TD><TD BGCOLOR=#c7956b>....</TD><TD BGCOLOR=#c89369>....</TD><TD BGCOLOR=#ca9b72>....</TD><TD BGCOLOR=#c89d79>....</TD><TD BGCOLOR=#c39875>....</TD><TD BGCOLOR=#c89d6f>....</TD><TD BGCOLOR=#c4a477>....</TD><TD BGCOLOR=#c3a575>....</TD><TD BGCOLOR=#c5a376>....</TD><TD BGCOLOR=#c3a182>....</TD><TD BGCOLOR=#b59a77>....</TD><TD BGCOLOR=#b49570>....</TD><TD BGCOLOR=#b2916d>....</TD><TD BGCOLOR=#a3865c>....</TD><TD BGCOLOR=#85663b>....</TD><TD BGCOLOR=#8a6846>....</TD><TD BGCOLOR=#9e7b5b>....</TD><TD BGCOLOR=#a98a69>....</TD><TD BGCOLOR=#ab8f68>....</TD><TD BGCOLOR=#ac8b57>....</TD><TD BGCOLOR=#a97b53>....</TD><TD BGCOLOR=#956a47>....</TD><TD BGCOLOR=#7f5c40>....</TD><TD BGCOLOR=#785942>....</TD></TR> <TR><TD BGCOLOR=#321501 COLSPAN=2>....</TD><TD BGCOLOR=#361603>....</TD><TD BGCOLOR=#341501>....</TD><TD BGCOLOR=#351803>....</TD><TD BGCOLOR=#351600>....</TD><TD BGCOLOR=#321400>....</TD><TD BGCOLOR=#321302>....</TD><TD BGCOLOR=#331607>....</TD><TD BGCOLOR=#2d1506>....</TD><TD BGCOLOR=#2b1506>....</TD><TD BGCOLOR=#2c1506>....</TD><TD BGCOLOR=#2f0e04>....</TD><TD BGCOLOR=#2d0d04>....</TD><TD BGCOLOR=#290f05>....</TD><TD BGCOLOR=#361706>....</TD><TD BGCOLOR=#3c1b06>....</TD><TD BGCOLOR=#3b1e08>....</TD><TD BGCOLOR=#645b48>....</TD><TD BGCOLOR=#636346>....</TD><TD BGCOLOR=#675f3c>....</TD><TD BGCOLOR=#716b4a>....</TD><TD BGCOLOR=#777053>....</TD><TD BGCOLOR=#6a5d42>....</TD><TD BGCOLOR=#625c3e>....</TD><TD BGCOLOR=#5a4f2a>....</TD><TD BGCOLOR=#564520>....</TD><TD BGCOLOR=#5c4522>....</TD><TD BGCOLOR=#5c3f11>....</TD><TD BGCOLOR=#604222>....</TD><TD BGCOLOR=#5b3c16>....</TD><TD BGCOLOR=#583909>....</TD><TD BGCOLOR=#5c3914>....</TD><TD BGCOLOR=#563215>....</TD><TD BGCOLOR=#502614>....</TD><TD BGCOLOR=#4f2a19>....</TD><TD BGCOLOR=#4a2a17>....</TD><TD BGCOLOR=#4d2613>....</TD><TD BGCOLOR=#573513>....</TD><TD BGCOLOR=#543511>....</TD><TD BGCOLOR=#522d14>....</TD><TD BGCOLOR=#685035>....</TD><TD BGCOLOR=#775536>....</TD><TD BGCOLOR=#795031>....</TD><TD BGCOLOR=#825a37>....</TD><TD BGCOLOR=#8b6038>....</TD><TD BGCOLOR=#95683d>....</TD><TD BGCOLOR=#997551>....</TD><TD BGCOLOR=#a77b53>....</TD><TD BGCOLOR=#9b7d4f>....</TD><TD BGCOLOR=#936741>....</TD><TD BGCOLOR=#875730>....</TD><TD BGCOLOR=#9e805b>....</TD><TD BGCOLOR=#a78b64>....</TD><TD BGCOLOR=#ae8f61>....</TD><TD BGCOLOR=#b09361>....</TD><TD BGCOLOR=#b99464>....</TD><TD BGCOLOR=#b69866>....</TD><TD BGCOLOR=#b59666>....</TD><TD BGCOLOR=#bc926b>....</TD><TD BGCOLOR=#b58e6a>....</TD><TD BGCOLOR=#ab9264>....</TD><TD BGCOLOR=#b2905d>....</TD><TD BGCOLOR=#bb9565>....</TD><TD BGCOLOR=#bd9c70>....</TD><TD BGCOLOR=#bda079>....</TD><TD BGCOLOR=#c79872>....</TD><TD BGCOLOR=#cfa378>....</TD><TD BGCOLOR=#d3a678>....</TD><TD BGCOLOR=#dca679>....</TD><TD BGCOLOR=#d8ac81>....</TD><TD BGCOLOR=#dcac7c>....</TD><TD BGCOLOR=#daab7c>....</TD><TD BGCOLOR=#d6ac81>....</TD><TD BGCOLOR=#d0aa78>....</TD><TD BGCOLOR=#d2a577>....</TD><TD BGCOLOR=#daa87e>....</TD><TD BGCOLOR=#d8a47a>....</TD><TD BGCOLOR=#d8a775>....</TD><TD BGCOLOR=#d19a6b>....</TD><TD BGCOLOR=#c19163>....</TD><TD BGCOLOR=#b28856>....</TD><TD BGCOLOR=#b48761>....</TD><TD BGCOLOR=#c29769>....</TD><TD BGCOLOR=#c99f70>....</TD><TD BGCOLOR=#c98f67>....</TD><TD BGCOLOR=#b4825b>....</TD><TD BGCOLOR=#ad8965>....</TD><TD BGCOLOR=#b18664>....</TD><TD BGCOLOR=#ac7e62>....</TD><TD BGCOLOR=#b08966>....</TD><TD BGCOLOR=#b78f64>....</TD><TD BGCOLOR=#c69467>....</TD><TD BGCOLOR=#d29874>....</TD><TD BGCOLOR=#cf9f74>....</TD><TD BGCOLOR=#d6a57c>....</TD><TD BGCOLOR=#dea584>....</TD><TD BGCOLOR=#d2a380>....</TD><TD BGCOLOR=#ccaa81>....</TD><TD BGCOLOR=#cda37b>....</TD><TD BGCOLOR=#cda37a>....</TD><TD BGCOLOR=#d1a884>....</TD><TD BGCOLOR=#cbac8c>....</TD><TD BGCOLOR=#c1a98f>....</TD><TD BGCOLOR=#baa384>....</TD><TD BGCOLOR=#886c44>....</TD><TD BGCOLOR=#87653e>....</TD><TD BGCOLOR=#b0856a>....</TD><TD BGCOLOR=#c7a184>....</TD><TD BGCOLOR=#c59e7e>....</TD><TD BGCOLOR=#c39475>....</TD><TD BGCOLOR=#d19b79>....</TD><TD BGCOLOR=#d39779>....</TD><TD BGCOLOR=#af8761>....</TD><TD BGCOLOR=#906847>....</TD><TD BGCOLOR=#766044>....</TD></TR> <TR><TD BGCOLOR=#321300 COLSPAN=2>....</TD><TD BGCOLOR=#341501>....</TD><TD BGCOLOR=#331400 COLSPAN=2>....</TD><TD BGCOLOR=#351600>....</TD><TD BGCOLOR=#341501>....</TD><TD BGCOLOR=#331302>....</TD><TD BGCOLOR=#2f1406>....</TD><TD BGCOLOR=#271405>....</TD><TD BGCOLOR=#2b1305>....</TD><TD BGCOLOR=#2e1206>....</TD><TD BGCOLOR=#321208>....</TD><TD BGCOLOR=#2d0c04>....</TD><TD BGCOLOR=#2d0f07>....</TD><TD BGCOLOR=#361606>....</TD><TD BGCOLOR=#3a1b07>....</TD><TD BGCOLOR=#3d1f09>....</TD><TD BGCOLOR=#675d49>....</TD><TD BGCOLOR=#606243>....</TD><TD BGCOLOR=#6b623f>....</TD><TD BGCOLOR=#736e4c>....</TD><TD BGCOLOR=#736e50>....</TD><TD BGCOLOR=#6b6045>....</TD><TD BGCOLOR=#656145>....</TD><TD BGCOLOR=#5d5433>....</TD><TD BGCOLOR=#594928>....</TD><TD BGCOLOR=#5d4725>....</TD><TD BGCOLOR=#5b3c14>....</TD><TD BGCOLOR=#5a3e1f>....</TD><TD BGCOLOR=#55411b>....</TD><TD BGCOLOR=#533e0d>....</TD><TD BGCOLOR=#5d3c0e>....</TD><TD BGCOLOR=#5c3b18>....</TD><TD BGCOLOR=#4e2410>....</TD><TD BGCOLOR=#492415>....</TD><TD BGCOLOR=#432416>....</TD><TD BGCOLOR=#482312>....</TD><TD BGCOLOR=#4a280e>....</TD><TD BGCOLOR=#583717>....</TD><TD BGCOLOR=#5f3017>....</TD><TD BGCOLOR=#634327>....</TD><TD BGCOLOR=#6c4427>....</TD><TD BGCOLOR=#683e21>....</TD><TD BGCOLOR=#7a5130>....</TD><TD BGCOLOR=#976b45>....</TD><TD BGCOLOR=#a2744a>....</TD><TD BGCOLOR=#ae7a51>....</TD><TD BGCOLOR=#b98255>....</TD><TD BGCOLOR=#b29461>....</TD><TD BGCOLOR=#a0784d>....</TD><TD BGCOLOR=#9b784a>....</TD><TD BGCOLOR=#a0865c>....</TD><TD BGCOLOR=#aa8c65>....</TD><TD BGCOLOR=#b69068>....</TD><TD BGCOLOR=#b59064>....</TD><TD BGCOLOR=#c0976d>....</TD><TD BGCOLOR=#ba956a>....</TD><TD BGCOLOR=#b08e60>....</TD><TD BGCOLOR=#b28c62>....</TD><TD BGCOLOR=#b48a67>....</TD><TD BGCOLOR=#bb956a>....</TD><TD BGCOLOR=#bb9664>....</TD><TD BGCOLOR=#c09a6a>....</TD><TD BGCOLOR=#c6a277>....</TD><TD BGCOLOR=#c7a47d>....</TD><TD BGCOLOR=#d4a175>....</TD><TD BGCOLOR=#d9a87b>....</TD><TD BGCOLOR=#d7aa7f>....</TD><TD BGCOLOR=#dcac84>....</TD><TD BGCOLOR=#dcae81>....</TD><TD BGCOLOR=#dfab7d>....</TD><TD BGCOLOR=#dca97a>....</TD><TD BGCOLOR=#d4a77a>....</TD><TD BGCOLOR=#d1a478>....</TD><TD BGCOLOR=#c99a71>....</TD><TD BGCOLOR=#c79572>....</TD><TD BGCOLOR=#c68f6a>....</TD><TD BGCOLOR=#c58b5e>....</TD><TD BGCOLOR=#be8a5d>....</TD><TD BGCOLOR=#b38b5e>....</TD><TD BGCOLOR=#b4905d>....</TD><TD BGCOLOR=#b68d64>....</TD><TD BGCOLOR=#b28a59>....</TD><TD BGCOLOR=#be9662>....</TD><TD BGCOLOR=#c08b61>....</TD><TD BGCOLOR=#b2825a>....</TD><TD BGCOLOR=#af8866>....</TD><TD BGCOLOR=#ad8161>....</TD><TD BGCOLOR=#b58466>....</TD><TD BGCOLOR=#bf916f>....</TD><TD BGCOLOR=#cb9c74>....</TD><TD BGCOLOR=#d79f77>....</TD><TD BGCOLOR=#dfa97f>....</TD><TD BGCOLOR=#dfad7c>....</TD><TD BGCOLOR=#e3b080>....</TD><TD BGCOLOR=#e6ad86>....</TD><TD BGCOLOR=#e4ad8a>....</TD><TD BGCOLOR=#dbad88>....</TD><TD BGCOLOR=#d7a683>....</TD><TD BGCOLOR=#cca37f>....</TD><TD BGCOLOR=#c4a17e>....</TD><TD BGCOLOR=#caab8c>....</TD><TD BGCOLOR=#b59b80>....</TD><TD BGCOLOR=#97755d>....</TD><TD BGCOLOR=#8b6145>....</TD><TD BGCOLOR=#b68d69>....</TD><TD BGCOLOR=#d9af8d>....</TD><TD BGCOLOR=#e2b296>....</TD><TD BGCOLOR=#dda68d>....</TD><TD BGCOLOR=#dda18a>....</TD><TD BGCOLOR=#de9b88>....</TD><TD BGCOLOR=#dd9582>....</TD><TD BGCOLOR=#c29071>....</TD><TD BGCOLOR=#a06c50>....</TD><TD BGCOLOR=#806046>....</TD></TR> <TR><TD BGCOLOR=#331400 COLSPAN=2>....</TD><TD BGCOLOR=#351602 COLSPAN=2>....</TD><TD BGCOLOR=#331401>....</TD><TD BGCOLOR=#351700>....</TD><TD BGCOLOR=#321300>....</TD><TD BGCOLOR=#301000>....</TD><TD BGCOLOR=#2e1506>....</TD><TD BGCOLOR=#251606>....</TD><TD BGCOLOR=#2a1306>....</TD><TD BGCOLOR=#331208>....</TD><TD BGCOLOR=#300f05>....</TD><TD BGCOLOR=#2d0c04>....</TD><TD BGCOLOR=#2f0c05>....</TD><TD BGCOLOR=#321404>....</TD><TD BGCOLOR=#3b1e09>....</TD><TD BGCOLOR=#3e1f0c>....</TD><TD BGCOLOR=#635a46>....</TD><TD BGCOLOR=#616343>....</TD><TD BGCOLOR=#68623e>....</TD><TD BGCOLOR=#6f6e4b>....</TD><TD BGCOLOR=#717051>....</TD><TD BGCOLOR=#696246>....</TD><TD BGCOLOR=#666547>....</TD><TD BGCOLOR=#5d573d>....</TD><TD BGCOLOR=#5a4d31>....</TD><TD BGCOLOR=#594623>....</TD><TD BGCOLOR=#593a11>....</TD><TD BGCOLOR=#583e15>....</TD><TD BGCOLOR=#554316>....</TD><TD BGCOLOR=#533f0d>....</TD><TD BGCOLOR=#5e410f>....</TD><TD BGCOLOR=#593d11>....</TD><TD BGCOLOR=#5b3615>....</TD><TD BGCOLOR=#503019>....</TD><TD BGCOLOR=#462b16>....</TD><TD BGCOLOR=#4f2e18>....</TD><TD BGCOLOR=#40210c>....</TD><TD BGCOLOR=#4f3117>....</TD><TD BGCOLOR=#5b2910>....</TD><TD BGCOLOR=#5e391a>....</TD><TD BGCOLOR=#532d12>....</TD><TD BGCOLOR=#673d24>....</TD><TD BGCOLOR=#875d40>....</TD><TD BGCOLOR=#9f7250>....</TD><TD BGCOLOR=#b5865e>....</TD><TD BGCOLOR=#b77f53>....</TD><TD BGCOLOR=#bb8355>....</TD><TD BGCOLOR=#a28654>....</TD><TD BGCOLOR=#a28059>....</TD><TD BGCOLOR=#9f8154>....</TD><TD BGCOLOR=#a18657>....</TD><TD BGCOLOR=#b1956c>....</TD><TD BGCOLOR=#b3916d>....</TD><TD BGCOLOR=#b68f6b>....</TD><TD BGCOLOR=#b6926d>....</TD><TD BGCOLOR=#b6906c>....</TD><TD BGCOLOR=#b58c62>....</TD><TD BGCOLOR=#bd9569>....</TD><TD BGCOLOR=#be926b>....</TD><TD BGCOLOR=#cb976e>....</TD><TD BGCOLOR=#cba174>....</TD><TD BGCOLOR=#cda77b>....</TD><TD BGCOLOR=#d3aa80>....</TD><TD BGCOLOR=#d8ae85>....</TD><TD BGCOLOR=#e4b385>....</TD><TD BGCOLOR=#e3af83>....</TD><TD BGCOLOR=#e5b389>....</TD><TD BGCOLOR=#e2b68d>....</TD><TD BGCOLOR=#e7b383>....</TD><TD BGCOLOR=#eaae83>....</TD><TD BGCOLOR=#e4a97d>....</TD><TD BGCOLOR=#e3af7f>....</TD><TD BGCOLOR=#e0ab7f>....</TD><TD BGCOLOR=#d9a57b>....</TD><TD BGCOLOR=#d19f78>....</TD><TD BGCOLOR=#cc966f>....</TD><TD BGCOLOR=#cb8f66>....</TD><TD BGCOLOR=#be8f64>....</TD><TD BGCOLOR=#b88f66>....</TD><TD BGCOLOR=#b79062>....</TD><TD BGCOLOR=#bc916c>....</TD><TD BGCOLOR=#bc9365>....</TD><TD BGCOLOR=#b08758>....</TD><TD BGCOLOR=#b88a5e>....</TD><TD BGCOLOR=#a97b53>....</TD><TD BGCOLOR=#b58868>....</TD><TD BGCOLOR=#ca9a7b>....</TD><TD BGCOLOR=#d2a17f>....</TD><TD BGCOLOR=#daac89>....</TD><TD BGCOLOR=#e0b08b>....</TD><TD BGCOLOR=#e0a885>....</TD><TD BGCOLOR=#e2ae83>....</TD><TD BGCOLOR=#e6b080>....</TD><TD BGCOLOR=#e4af80>....</TD><TD BGCOLOR=#e7b288>....</TD><TD BGCOLOR=#e8ae87>....</TD><TD BGCOLOR=#e0ac87>....</TD><TD BGCOLOR=#daaa8a>....</TD><TD BGCOLOR=#c9a887>....</TD><TD BGCOLOR=#b99979>....</TD><TD BGCOLOR=#997558>....</TD><TD BGCOLOR=#92694e>....</TD><TD BGCOLOR=#b4836e>....</TD><TD BGCOLOR=#cb957d>....</TD><TD BGCOLOR=#deaa8a>....</TD><TD BGCOLOR=#eab597>....</TD><TD BGCOLOR=#edb096>....</TD><TD BGCOLOR=#f9b8a2>....</TD><TD BGCOLOR=#f4b0a1>....</TD><TD BGCOLOR=#f1aca2>....</TD><TD BGCOLOR=#e79691>....</TD><TD BGCOLOR=#cc907c>....</TD><TD BGCOLOR=#b0745c>....</TD><TD BGCOLOR=#815a40>....</TD></TR> <TR><TD BGCOLOR=#311400 COLSPAN=2>....</TD><TD BGCOLOR=#341602>....</TD><TD BGCOLOR=#351602>....</TD><TD BGCOLOR=#331401>....</TD><TD BGCOLOR=#351600>....</TD><TD BGCOLOR=#321300>....</TD><TD BGCOLOR=#311201>....</TD><TD BGCOLOR=#2d1506>....</TD><TD BGCOLOR=#231706>....</TD><TD BGCOLOR=#2b1306>....</TD><TD BGCOLOR=#351108>....</TD><TD BGCOLOR=#2c0c03>....</TD><TD BGCOLOR=#2d0d05>....</TD><TD BGCOLOR=#310b06>....</TD><TD BGCOLOR=#361707>....</TD><TD BGCOLOR=#371a05>....</TD><TD BGCOLOR=#43250f>....</TD><TD BGCOLOR=#625946>....</TD><TD BGCOLOR=#656646>....</TD><TD BGCOLOR=#66623d>....</TD><TD BGCOLOR=#6e714d>....</TD><TD BGCOLOR=#6f7051>....</TD><TD BGCOLOR=#6c674a>....</TD><TD BGCOLOR=#696a4c>....</TD><TD BGCOLOR=#615c45>....</TD><TD BGCOLOR=#5d533a>....</TD><TD BGCOLOR=#5b4b27>....</TD><TD BGCOLOR=#5c4010>....</TD><TD BGCOLOR=#5e410f>....</TD><TD BGCOLOR=#5d400e>....</TD><TD BGCOLOR=#5a3c0c>....</TD><TD BGCOLOR=#5c4012>....</TD><TD BGCOLOR=#574010>....</TD><TD BGCOLOR=#5f3f0f>....</TD><TD BGCOLOR=#462a07>....</TD><TD BGCOLOR=#3f2909>....</TD><TD BGCOLOR=#412606>....</TD><TD BGCOLOR=#41260d>....</TD><TD BGCOLOR=#3f280f>....</TD><TD BGCOLOR=#562a0e>....</TD><TD BGCOLOR=#5b3a18>....</TD><TD BGCOLOR=#5d3e22>....</TD><TD BGCOLOR=#7f5840>....</TD><TD BGCOLOR=#896044>....</TD><TD BGCOLOR=#936645>....</TD><TD BGCOLOR=#9e704a>....</TD><TD BGCOLOR=#b18156>....</TD><TD BGCOLOR=#af7e54>....</TD><TD BGCOLOR=#876e44>....</TD><TD BGCOLOR=#866547>....</TD><TD BGCOLOR=#947349>....</TD><TD BGCOLOR=#9a7e4d>....</TD><TD BGCOLOR=#927c50>....</TD><TD BGCOLOR=#917855>....</TD><TD BGCOLOR=#957251>....</TD><TD BGCOLOR=#b19471>....</TD><TD BGCOLOR=#ae8d6b>....</TD><TD BGCOLOR=#b78a62>....</TD><TD BGCOLOR=#c09065>....</TD><TD BGCOLOR=#c99d74>....</TD><TD BGCOLOR=#d8a379>....</TD><TD BGCOLOR=#d2a77d>....</TD><TD BGCOLOR=#d2ae84>....</TD><TD BGCOLOR=#ddb086>....</TD><TD BGCOLOR=#e4b389>....</TD><TD BGCOLOR=#e3b78e>....</TD><TD BGCOLOR=#edb892>....</TD><TD BGCOLOR=#efb78e>....</TD><TD BGCOLOR=#ebb98a>....</TD><TD BGCOLOR=#f1ba87>....</TD><TD BGCOLOR=#f6b78e>....</TD><TD BGCOLOR=#fabe93>....</TD><TD BGCOLOR=#f4bc89>....</TD><TD BGCOLOR=#f5bb88>....</TD><TD BGCOLOR=#efb787>....</TD><TD BGCOLOR=#e4b283>....</TD><TD BGCOLOR=#e0ab7f>....</TD><TD BGCOLOR=#d8a177>....</TD><TD BGCOLOR=#cfa278>....</TD><TD BGCOLOR=#c59570>....</TD><TD BGCOLOR=#c1916b>....</TD><TD BGCOLOR=#b98c6f>....</TD><TD BGCOLOR=#b78b66>....</TD><TD BGCOLOR=#b98f69>....</TD><TD BGCOLOR=#b68c63>....</TD><TD BGCOLOR=#ba8c65>....</TD><TD BGCOLOR=#c08e70>....</TD><TD BGCOLOR=#c69576>....</TD><TD BGCOLOR=#c39973>....</TD><TD BGCOLOR=#c39d74>....</TD><TD BGCOLOR=#c29975>....</TD><TD BGCOLOR=#c89776>....</TD><TD BGCOLOR=#cd9d77>....</TD><TD BGCOLOR=#d8a179>....</TD><TD BGCOLOR=#d69f78>....</TD><TD BGCOLOR=#d4a27c>....</TD><TD BGCOLOR=#daa57a>....</TD><TD BGCOLOR=#d6a57e>....</TD><TD BGCOLOR=#bb9271>....</TD><TD BGCOLOR=#a18667>....</TD><TD BGCOLOR=#a98165>....</TD><TD BGCOLOR=#c39278>....</TD><TD BGCOLOR=#d39980>....</TD><TD BGCOLOR=#d9a187>....</TD><TD BGCOLOR=#e7b394>....</TD><TD BGCOLOR=#edb194>....</TD><TD BGCOLOR=#f7b6a3>....</TD><TD BGCOLOR=#f9b7a2>....</TD><TD BGCOLOR=#f0ac97>....</TD><TD BGCOLOR=#df9b8e>....</TD><TD BGCOLOR=#f2b1ab>....</TD><TD BGCOLOR=#f0a2a2>....</TD><TD BGCOLOR=#d5998a>....</TD><TD BGCOLOR=#bb816a>....</TD><TD BGCOLOR=#845e42>....</TD></TR> <TR><TD BGCOLOR=#241802 COLSPAN=2>....</TD><TD BGCOLOR=#2e1604>....</TD><TD BGCOLOR=#311103>....</TD><TD BGCOLOR=#331304>....</TD><TD BGCOLOR=#301101>....</TD><TD BGCOLOR=#331304 COLSPAN=2>....</TD><TD BGCOLOR=#2f1304>....</TD><TD BGCOLOR=#241605>....</TD><TD BGCOLOR=#2f1307>....</TD><TD BGCOLOR=#341207>....</TD><TD BGCOLOR=#2b1106>....</TD><TD BGCOLOR=#300e07>....</TD><TD BGCOLOR=#321407>....</TD><TD BGCOLOR=#360f03>....</TD><TD BGCOLOR=#401905>....</TD><TD BGCOLOR=#442914>....</TD><TD BGCOLOR=#5d5b49>....</TD><TD BGCOLOR=#666442>....</TD><TD BGCOLOR=#6b6241>....</TD><TD BGCOLOR=#6e7657>....</TD><TD BGCOLOR=#736c53>....</TD><TD BGCOLOR=#696546>....</TD><TD BGCOLOR=#706749>....</TD><TD BGCOLOR=#695f41>....</TD><TD BGCOLOR=#62573a>....</TD><TD BGCOLOR=#605231>....</TD><TD BGCOLOR=#5c4419>....</TD><TD BGCOLOR=#574114>....</TD><TD BGCOLOR=#5a3e0c>....</TD><TD BGCOLOR=#5c3601>....</TD><TD BGCOLOR=#5b3b0d>....</TD><TD BGCOLOR=#524213>....</TD><TD BGCOLOR=#5a3d0e>....</TD><TD BGCOLOR=#5c330c>....</TD><TD BGCOLOR=#462d0f>....</TD><TD BGCOLOR=#403619>....</TD><TD BGCOLOR=#372808>....</TD><TD BGCOLOR=#412811>....</TD><TD BGCOLOR=#5d2f15>....</TD><TD BGCOLOR=#5f3a26>....</TD><TD BGCOLOR=#603e20>....</TD><TD BGCOLOR=#80603e>....</TD><TD BGCOLOR=#866340>....</TD><TD BGCOLOR=#885c38>....</TD><TD BGCOLOR=#9a6743>....</TD><TD BGCOLOR=#ad7b53>....</TD><TD BGCOLOR=#a0704a>....</TD><TD BGCOLOR=#8a6741>....</TD><TD BGCOLOR=#876e46>....</TD><TD BGCOLOR=#8b6640>....</TD><TD BGCOLOR=#876c3f>....</TD><TD BGCOLOR=#6d532b>....</TD><TD BGCOLOR=#816041>....</TD><TD BGCOLOR=#7a522f>....</TD><TD BGCOLOR=#9f734e>....</TD><TD BGCOLOR=#b28e62>....</TD><TD BGCOLOR=#c8a273>....</TD><TD BGCOLOR=#c5956d>....</TD><TD BGCOLOR=#bd8c6a>....</TD><TD BGCOLOR=#c29269>....</TD><TD BGCOLOR=#daaf8b>....</TD><TD BGCOLOR=#d8ba90>....</TD><TD BGCOLOR=#e6b388>....</TD><TD BGCOLOR=#ebb58d>....</TD><TD BGCOLOR=#edb395>....</TD><TD BGCOLOR=#f5b19c>....</TD><TD BGCOLOR=#f3b89c>....</TD><TD BGCOLOR=#fcc09d>....</TD><TD BGCOLOR=#f8c6a3>....</TD><TD BGCOLOR=#fbc8a1>....</TD><TD BGCOLOR=#fec6a3>....</TD><TD BGCOLOR=#fac1a1>....</TD><TD BGCOLOR=#fdc491>....</TD><TD BGCOLOR=#fcb88e>....</TD><TD BGCOLOR=#f9b590>....</TD><TD BGCOLOR=#f0ae89>....</TD><TD BGCOLOR=#e2a473>....</TD><TD BGCOLOR=#d6a26f>....</TD><TD BGCOLOR=#ce9a72>....</TD><TD BGCOLOR=#c8956e>....</TD><TD BGCOLOR=#c49366>....</TD><TD BGCOLOR=#c28c66>....</TD><TD BGCOLOR=#ba8966>....</TD><TD BGCOLOR=#b8876a>....</TD><TD BGCOLOR=#b78368>....</TD><TD BGCOLOR=#ba866a>....</TD><TD BGCOLOR=#c08c6e>....</TD><TD BGCOLOR=#b58e76>....</TD><TD BGCOLOR=#b18d68>....</TD><TD BGCOLOR=#ac866f>....</TD><TD BGCOLOR=#ac8966>....</TD><TD BGCOLOR=#b18e62>....</TD><TD BGCOLOR=#ab8965>....</TD><TD BGCOLOR=#b18b6d>....</TD><TD BGCOLOR=#c09173>....</TD><TD BGCOLOR=#c58f6e>....</TD><TD BGCOLOR=#b3805b>....</TD><TD BGCOLOR=#b28061>....</TD><TD BGCOLOR=#bc8b6f>....</TD><TD BGCOLOR=#d99c7c>....</TD><TD BGCOLOR=#eeae90>....</TD><TD BGCOLOR=#eeb999>....</TD><TD BGCOLOR=#ecb8a2>....</TD><TD BGCOLOR=#f3c5a7>....</TD><TD BGCOLOR=#fbc3a4>....</TD><TD BGCOLOR=#fbc2a5>....</TD><TD BGCOLOR=#f8b89c>....</TD><TD BGCOLOR=#f4a794>....</TD><TD BGCOLOR=#e8988b>....</TD><TD BGCOLOR=#f8b9ac>....</TD><TD BGCOLOR=#f2a7a6>....</TD><TD BGCOLOR=#e49995>....</TD><TD BGCOLOR=#cb917e>....</TD><TD BGCOLOR=#976e4f>....</TD></TR> <TR><TD BGCOLOR=#2a1502 COLSPAN=2>....</TD><TD BGCOLOR=#341304>....</TD><TD BGCOLOR=#340f03>....</TD><TD BGCOLOR=#341204>....</TD><TD BGCOLOR=#311102>....</TD><TD BGCOLOR=#331305>....</TD><TD BGCOLOR=#331304>....</TD><TD BGCOLOR=#301204>....</TD><TD BGCOLOR=#251605>....</TD><TD BGCOLOR=#2a1204>....</TD><TD BGCOLOR=#351409>....</TD><TD BGCOLOR=#2d0f05>....</TD><TD BGCOLOR=#300b06>....</TD><TD BGCOLOR=#321407>....</TD><TD BGCOLOR=#321505>....</TD><TD BGCOLOR=#3d1b08>....</TD><TD BGCOLOR=#422712>....</TD><TD BGCOLOR=#5d5d47>....</TD><TD BGCOLOR=#666343>....</TD><TD BGCOLOR=#6b5e40>....</TD><TD BGCOLOR=#6c7254>....</TD><TD BGCOLOR=#71674f>....</TD><TD BGCOLOR=#6a6446>....</TD><TD BGCOLOR=#726849>....</TD><TD BGCOLOR=#6e6345>....</TD><TD BGCOLOR=#675c3e>....</TD><TD BGCOLOR=#615333>....</TD><TD BGCOLOR=#624824>....</TD><TD BGCOLOR=#56421b>....</TD><TD BGCOLOR=#594213>....</TD><TD BGCOLOR=#563603>....</TD><TD BGCOLOR=#5b3b0f>....</TD><TD BGCOLOR=#554016>....</TD><TD BGCOLOR=#583b0f>....</TD><TD BGCOLOR=#623e16>....</TD><TD BGCOLOR=#513d1a>....</TD><TD BGCOLOR=#312809>....</TD><TD BGCOLOR=#352a0d>....</TD><TD BGCOLOR=#44331e>....</TD><TD BGCOLOR=#4f2609>....</TD><TD BGCOLOR=#633c25>....</TD><TD BGCOLOR=#62371e>....</TD><TD BGCOLOR=#75482a>....</TD><TD BGCOLOR=#845536>....</TD><TD BGCOLOR=#905c3b>....</TD><TD BGCOLOR=#a46d4a>....</TD><TD BGCOLOR=#a6774c>....</TD><TD BGCOLOR=#a8744d>....</TD><TD BGCOLOR=#a4704d>....</TD><TD BGCOLOR=#9e724e>....</TD><TD BGCOLOR=#976c47>....</TD><TD BGCOLOR=#8d6c44>....</TD><TD BGCOLOR=#856440>....</TD><TD BGCOLOR=#886343>....</TD><TD BGCOLOR=#8f6844>....</TD><TD BGCOLOR=#895e38>....</TD><TD BGCOLOR=#a2784e>....</TD><TD BGCOLOR=#b5895e>....</TD><TD BGCOLOR=#c3946b>....</TD><TD BGCOLOR=#c89973>....</TD><TD BGCOLOR=#bd8e66>....</TD><TD BGCOLOR=#b98c6a>....</TD><TD BGCOLOR=#bd9d74>....</TD><TD BGCOLOR=#dba982>....</TD><TD BGCOLOR=#e7b492>....</TD><TD BGCOLOR=#ebb798>....</TD><TD BGCOLOR=#f6b7a1>....</TD><TD BGCOLOR=#f7c1a4>....</TD><TD BGCOLOR=#fcc6a2>....</TD><TD BGCOLOR=#fed3b0>....</TD><TD BGCOLOR=#fbcea4>....</TD><TD BGCOLOR=#fdcca3>....</TD><TD BGCOLOR=#fdcaa5>....</TD><TD BGCOLOR=#fec69b>....</TD><TD BGCOLOR=#fdc196>....</TD><TD BGCOLOR=#fcbd92>....</TD><TD BGCOLOR=#f2b388>....</TD><TD BGCOLOR=#e4ac7d>....</TD><TD BGCOLOR=#daa977>....</TD><TD BGCOLOR=#ce9973>....</TD><TD BGCOLOR=#c1916a>....</TD><TD BGCOLOR=#c89c6c>....</TD><TD BGCOLOR=#ca976b>....</TD><TD BGCOLOR=#be8d62>....</TD><TD BGCOLOR=#b68663>....</TD><TD BGCOLOR=#ba886b>....</TD><TD BGCOLOR=#be8c70>....</TD><TD BGCOLOR=#c39277>....</TD><TD BGCOLOR=#b08771>....</TD><TD BGCOLOR=#b69572>....</TD><TD BGCOLOR=#bc9787>....</TD><TD BGCOLOR=#c39b83>....</TD><TD BGCOLOR=#c79870>....</TD><TD BGCOLOR=#c59e79>....</TD><TD BGCOLOR=#dbb893>....</TD><TD BGCOLOR=#d6b089>....</TD><TD BGCOLOR=#be8e71>....</TD><TD BGCOLOR=#c18669>....</TD><TD BGCOLOR=#bc7764>....</TD><TD BGCOLOR=#d59788>....</TD><TD BGCOLOR=#ebad9b>....</TD><TD BGCOLOR=#f8b8a6>....</TD><TD BGCOLOR=#f9c9b0>....</TD><TD BGCOLOR=#fcc9b3>....</TD><TD BGCOLOR=#fac8a5>....</TD><TD BGCOLOR=#f5b898>....</TD><TD BGCOLOR=#f2b096>....</TD><TD BGCOLOR=#e0a289>....</TD><TD BGCOLOR=#de9a87>....</TD><TD BGCOLOR=#fbb6a6>....</TD><TD BGCOLOR=#fbc0ad>....</TD><TD BGCOLOR=#f4afa1>....</TD><TD BGCOLOR=#f0a395>....</TD><TD BGCOLOR=#e09a84>....</TD><TD BGCOLOR=#a87353>....</TD></TR> <TR><TD BGCOLOR=#2e1302 COLSPAN=2>....</TD><TD BGCOLOR=#341304>....</TD><TD BGCOLOR=#311102>....</TD><TD BGCOLOR=#2f1404>....</TD><TD BGCOLOR=#311102>....</TD><TD BGCOLOR=#331304>....</TD><TD BGCOLOR=#321203>....</TD><TD BGCOLOR=#331205>....</TD><TD BGCOLOR=#281707>....</TD><TD BGCOLOR=#271506>....</TD><TD BGCOLOR=#331107>....</TD><TD BGCOLOR=#2a1004>....</TD><TD BGCOLOR=#2d0d06>....</TD><TD BGCOLOR=#331206>....</TD><TD BGCOLOR=#301605>....</TD><TD BGCOLOR=#391807>....</TD><TD BGCOLOR=#422710>....</TD><TD BGCOLOR=#5c5c42>....</TD><TD BGCOLOR=#636043>....</TD><TD BGCOLOR=#6c5c40>....</TD><TD BGCOLOR=#6d6f53>....</TD><TD BGCOLOR=#766851>....</TD><TD BGCOLOR=#6e6548>....</TD><TD BGCOLOR=#706647>....</TD><TD BGCOLOR=#6d6244>....</TD><TD BGCOLOR=#6a5f41>....</TD><TD BGCOLOR=#635738>....</TD><TD BGCOLOR=#5e4e2d>....</TD><TD BGCOLOR=#544323>....</TD><TD BGCOLOR=#573e17>....</TD><TD BGCOLOR=#583509>....</TD><TD BGCOLOR=#5a3a11>....</TD><TD BGCOLOR=#583d18>....</TD><TD BGCOLOR=#563710>....</TD><TD BGCOLOR=#5e3c15>....</TD><TD BGCOLOR=#553b15>....</TD><TD BGCOLOR=#3f2b0d>....</TD><TD BGCOLOR=#33230f>....</TD><TD BGCOLOR=#4b3729>....</TD><TD BGCOLOR=#552c0c>....</TD><TD BGCOLOR=#613b1f>....</TD><TD BGCOLOR=#673e27>....</TD><TD BGCOLOR=#79452b>....</TD><TD BGCOLOR=#814d30>....</TD><TD BGCOLOR=#9e6a49>....</TD><TD BGCOLOR=#a6734e>....</TD><TD BGCOLOR=#a17546>....</TD><TD BGCOLOR=#a57046>....</TD><TD BGCOLOR=#ad7751>....</TD><TD BGCOLOR=#9e6b45>....</TD><TD BGCOLOR=#9c6b45>....</TD><TD BGCOLOR=#9b7251>....</TD><TD BGCOLOR=#987050>....</TD><TD BGCOLOR=#9e7452>....</TD><TD BGCOLOR=#9f7854>....</TD><TD BGCOLOR=#99714a>....</TD><TD BGCOLOR=#ad7b54>....</TD><TD BGCOLOR=#ba825d>....</TD><TD BGCOLOR=#b47b56>....</TD><TD BGCOLOR=#c68e66>....</TD><TD BGCOLOR=#cc936f>....</TD><TD BGCOLOR=#d19774>....</TD><TD BGCOLOR=#ca9f72>....</TD><TD BGCOLOR=#d79d75>....</TD><TD BGCOLOR=#cc9575>....</TD><TD BGCOLOR=#e2b392>....</TD><TD BGCOLOR=#f4bca4>....</TD><TD BGCOLOR=#f9cbac>....</TD><TD BGCOLOR=#fccea8>....</TD><TD BGCOLOR=#fcd7b3>....</TD><TD BGCOLOR=#fddbad>....</TD><TD BGCOLOR=#fdd5a3>....</TD><TD BGCOLOR=#fdd0a1>....</TD><TD BGCOLOR=#fdc89a>....</TD><TD BGCOLOR=#f6c193>....</TD><TD BGCOLOR=#f2b68c>....</TD><TD BGCOLOR=#e8ab82>....</TD><TD BGCOLOR=#d7a878>....</TD><TD BGCOLOR=#cea071>....</TD><TD BGCOLOR=#af7856>....</TD><TD BGCOLOR=#b37d5e>....</TD><TD BGCOLOR=#c59570>....</TD><TD BGCOLOR=#c6966e>....</TD><TD BGCOLOR=#bb9667>....</TD><TD BGCOLOR=#b99167>....</TD><TD BGCOLOR=#ba8e6b>....</TD><TD BGCOLOR=#b7896d>....</TD><TD BGCOLOR=#b98b75>....</TD><TD BGCOLOR=#bb8e7c>....</TD><TD BGCOLOR=#be9e80>....</TD><TD BGCOLOR=#bb9a92>....</TD><TD BGCOLOR=#c79a90>....</TD><TD BGCOLOR=#b38871>....</TD><TD BGCOLOR=#a9866f>....</TD><TD BGCOLOR=#a38267>....</TD><TD BGCOLOR=#977454>....</TD><TD BGCOLOR=#b78e75>....</TD><TD BGCOLOR=#bf816c>....</TD><TD BGCOLOR=#bf766b>....</TD><TD BGCOLOR=#db9f98>....</TD><TD BGCOLOR=#f1b6ae>....</TD><TD BGCOLOR=#f1b3a5>....</TD><TD BGCOLOR=#f3c4ab>....</TD><TD BGCOLOR=#eeb49e>....</TD><TD BGCOLOR=#e8ab8c>....</TD><TD BGCOLOR=#dd9f84>....</TD><TD BGCOLOR=#c48e79>....</TD><TD BGCOLOR=#cb9a84>....</TD><TD BGCOLOR=#f7c6b0>....</TD><TD BGCOLOR=#fecab3>....</TD><TD BGCOLOR=#f9c2a8>....</TD><TD BGCOLOR=#f8c5a9>....</TD><TD BGCOLOR=#fbb6a0>....</TD><TD BGCOLOR=#f4a793>....</TD><TD BGCOLOR=#bf8369>....</TD></TR> <TR><TD BGCOLOR=#2c1403 COLSPAN=2>....</TD><TD BGCOLOR=#311403>....</TD><TD BGCOLOR=#301504>....</TD><TD BGCOLOR=#2e1907>....</TD><TD BGCOLOR=#2e1001>....</TD><TD BGCOLOR=#2e1002>....</TD><TD BGCOLOR=#311203>....</TD><TD BGCOLOR=#361507>....</TD><TD BGCOLOR=#2c1708>....</TD><TD BGCOLOR=#271607>....</TD><TD BGCOLOR=#2d0e03>....</TD><TD BGCOLOR=#281305>....</TD><TD BGCOLOR=#271006>....</TD><TD BGCOLOR=#321107>....</TD><TD BGCOLOR=#321303>....</TD><TD BGCOLOR=#3c1709>....</TD><TD BGCOLOR=#462911>....</TD><TD BGCOLOR=#59593a>....</TD><TD BGCOLOR=#686045>....</TD><TD BGCOLOR=#6c5c40>....</TD><TD BGCOLOR=#717255>....</TD><TD BGCOLOR=#71674f>....</TD><TD BGCOLOR=#6b6244>....</TD><TD BGCOLOR=#72684b>....</TD><TD BGCOLOR=#6d6346>....</TD><TD BGCOLOR=#6c6145>....</TD><TD BGCOLOR=#645b3e>....</TD><TD BGCOLOR=#5c583b>....</TD><TD BGCOLOR=#55492c>....</TD><TD BGCOLOR=#5a3b19>....</TD><TD BGCOLOR=#5c340d>....</TD><TD BGCOLOR=#593914>....</TD><TD BGCOLOR=#583a18>....</TD><TD BGCOLOR=#563711>....</TD><TD BGCOLOR=#5c3b12>....</TD><TD BGCOLOR=#5a3812>....</TD><TD BGCOLOR=#543615>....</TD><TD BGCOLOR=#37200f>....</TD><TD BGCOLOR=#3b2117>....</TD><TD BGCOLOR=#603519>....</TD><TD BGCOLOR=#6b4728>....</TD><TD BGCOLOR=#6d4c32>....</TD><TD BGCOLOR=#79482d>....</TD><TD BGCOLOR=#895b3d>....</TD><TD BGCOLOR=#9c704d>....</TD><TD BGCOLOR=#9b6d46>....</TD><TD BGCOLOR=#946838>....</TD><TD BGCOLOR=#a07041>....</TD><TD BGCOLOR=#9c6e42>....</TD><TD BGCOLOR=#9e7247>....</TD><TD BGCOLOR=#9f6a43>....</TD><TD BGCOLOR=#a37256>....</TD><TD BGCOLOR=#9d6e51>....</TD><TD BGCOLOR=#aa7b5a>....</TD><TD BGCOLOR=#9f7653>....</TD><TD BGCOLOR=#b08560>....</TD><TD BGCOLOR=#ba845f>....</TD><TD BGCOLOR=#c88968>....</TD><TD BGCOLOR=#d59571>....</TD><TD BGCOLOR=#da986f>....</TD><TD BGCOLOR=#e8a080>....</TD><TD BGCOLOR=#eca17d>....</TD><TD BGCOLOR=#edb283>....</TD><TD BGCOLOR=#efaf84>....</TD><TD BGCOLOR=#e9ac88>....</TD><TD BGCOLOR=#cf9d7a>....</TD><TD BGCOLOR=#dda88b>....</TD><TD BGCOLOR=#f0c4a5>....</TD><TD BGCOLOR=#f8cba8>....</TD><TD BGCOLOR=#fee2bd>....</TD><TD BGCOLOR=#fddfae>....</TD><TD BGCOLOR=#fbd59f>....</TD><TD BGCOLOR=#f7cb96>....</TD><TD BGCOLOR=#f2bc8a>....</TD><TD BGCOLOR=#daa577>....</TD><TD BGCOLOR=#d59971>....</TD><TD BGCOLOR=#d4966f>....</TD><TD BGCOLOR=#c69b69>....</TD><TD BGCOLOR=#cba070>....</TD><TD BGCOLOR=#be8967>....</TD><TD BGCOLOR=#ba8168>....</TD><TD BGCOLOR=#b57e64>....</TD><TD BGCOLOR=#b28565>....</TD><TD BGCOLOR=#b3936e>....</TD><TD BGCOLOR=#af8762>....</TD><TD BGCOLOR=#af8663>....</TD><TD BGCOLOR=#a67a5e>....</TD><TD BGCOLOR=#a27560>....</TD><TD BGCOLOR=#a67568>....</TD><TD BGCOLOR=#a28468>....</TD><TD BGCOLOR=#9f7d7a>....</TD><TD BGCOLOR=#b07f80>....</TD><TD BGCOLOR=#9c7874>....</TD><TD BGCOLOR=#8a6f68>....</TD><TD BGCOLOR=#6c4d41>....</TD><TD BGCOLOR=#987360>....</TD><TD BGCOLOR=#b8927c>....</TD><TD BGCOLOR=#c18673>....</TD><TD BGCOLOR=#c4857a>....</TD><TD BGCOLOR=#d6a09a>....</TD><TD BGCOLOR=#f0b0aa>....</TD><TD BGCOLOR=#f1afa2>....</TD><TD BGCOLOR=#e6b197>....</TD><TD BGCOLOR=#e5a48e>....</TD><TD BGCOLOR=#cf9277>....</TD><TD BGCOLOR=#cc9f83>....</TD><TD BGCOLOR=#e1c2ab>....</TD><TD BGCOLOR=#fbdac2>....</TD><TD BGCOLOR=#fdd4ba>....</TD><TD BGCOLOR=#faccb0>....</TD><TD BGCOLOR=#f7c1a4>....</TD><TD BGCOLOR=#fdd7b9>....</TD><TD BGCOLOR=#fdc4af>....</TD><TD BGCOLOR=#efa495>....</TD><TD BGCOLOR=#bf806d>....</TD></TR> <TR><TD BGCOLOR=#2f1305 COLSPAN=2>....</TD><TD BGCOLOR=#341200>....</TD><TD BGCOLOR=#351403>....</TD><TD BGCOLOR=#301408>....</TD><TD BGCOLOR=#2f1203>....</TD><TD BGCOLOR=#2a1202>....</TD><TD BGCOLOR=#2f1504>....</TD><TD BGCOLOR=#351404>....</TD><TD BGCOLOR=#311105>....</TD><TD BGCOLOR=#291207>....</TD><TD BGCOLOR=#2a1204>....</TD><TD BGCOLOR=#271101>....</TD><TD BGCOLOR=#271207>....</TD><TD BGCOLOR=#2f120b>....</TD><TD BGCOLOR=#361304>....</TD><TD BGCOLOR=#421305>....</TD><TD BGCOLOR=#4e2b14>....</TD><TD BGCOLOR=#5c5c35>....</TD><TD BGCOLOR=#6f5941>....</TD><TD BGCOLOR=#685e3e>....</TD><TD BGCOLOR=#6f7353>....</TD><TD BGCOLOR=#676d4d>....</TD><TD BGCOLOR=#686743>....</TD><TD BGCOLOR=#6b634b>....</TD><TD BGCOLOR=#69614a>....</TD><TD BGCOLOR=#686049>....</TD><TD BGCOLOR=#655d48>....</TD><TD BGCOLOR=#5e5748>....</TD><TD BGCOLOR=#5b4e34>....</TD><TD BGCOLOR=#5a3d1a>....</TD><TD BGCOLOR=#5b3410>....</TD><TD BGCOLOR=#5a3a16>....</TD><TD BGCOLOR=#5a3a17>....</TD><TD BGCOLOR=#583811>....</TD><TD BGCOLOR=#5a3d0d>....</TD><TD BGCOLOR=#56360d>....</TD><TD BGCOLOR=#533613>....</TD><TD BGCOLOR=#493821>....</TD><TD BGCOLOR=#3c240e>....</TD><TD BGCOLOR=#583322>....</TD><TD BGCOLOR=#6d482b>....</TD><TD BGCOLOR=#725433>....</TD><TD BGCOLOR=#6c3e23>....</TD><TD BGCOLOR=#755134>....</TD><TD BGCOLOR=#896746>....</TD><TD BGCOLOR=#8a5b34>....</TD><TD BGCOLOR=#97683f>....</TD><TD BGCOLOR=#9e7242>....</TD><TD BGCOLOR=#a87b4c>....</TD><TD BGCOLOR=#a4754b>....</TD><TD BGCOLOR=#a47144>....</TD><TD BGCOLOR=#b27759>....</TD><TD BGCOLOR=#a76e54>....</TD><TD BGCOLOR=#af7e5d>....</TD><TD BGCOLOR=#a87b59>....</TD><TD BGCOLOR=#ae7c59>....</TD><TD BGCOLOR=#bb8560>....</TD><TD BGCOLOR=#c5916a>....</TD><TD BGCOLOR=#ca946a>....</TD><TD BGCOLOR=#dd976e>....</TD><TD BGCOLOR=#ef9a7b>....</TD><TD BGCOLOR=#fca483>....</TD><TD BGCOLOR=#fbaf8f>....</TD><TD BGCOLOR=#f8b99a>....</TD><TD BGCOLOR=#f0ad8c>....</TD><TD BGCOLOR=#f3b18b>....</TD><TD BGCOLOR=#dd9f7c>....</TD><TD BGCOLOR=#c28a6c>....</TD><TD BGCOLOR=#cd9a7e>....</TD><TD BGCOLOR=#e0b68f>....</TD><TD BGCOLOR=#e7bf93>....</TD><TD BGCOLOR=#e2aa7e>....</TD><TD BGCOLOR=#ce9a6c>....</TD><TD BGCOLOR=#c9946d>....</TD><TD BGCOLOR=#cf976f>....</TD><TD BGCOLOR=#d89d73>....</TD><TD BGCOLOR=#d4986d>....</TD><TD BGCOLOR=#c9976a>....</TD><TD BGCOLOR=#ba8a63>....</TD><TD BGCOLOR=#b48161>....</TD><TD BGCOLOR=#af8464>....</TD><TD BGCOLOR=#a5785d>....</TD><TD BGCOLOR=#a07863>....</TD><TD BGCOLOR=#a3756a>....</TD><TD BGCOLOR=#a46e65>....</TD><TD BGCOLOR=#93735a>....</TD><TD BGCOLOR=#997057>....</TD><TD BGCOLOR=#976c58>....</TD><TD BGCOLOR=#9c6865>....</TD><TD BGCOLOR=#917159>....</TD><TD BGCOLOR=#916666>....</TD><TD BGCOLOR=#9f676c>....</TD><TD BGCOLOR=#9f6f70>....</TD><TD BGCOLOR=#92776c>....</TD><TD BGCOLOR=#745041>....</TD><TD BGCOLOR=#a17867>....</TD><TD BGCOLOR=#b8907c>....</TD><TD BGCOLOR=#bf8c73>....</TD><TD BGCOLOR=#c38b76>....</TD><TD BGCOLOR=#c48e80>....</TD><TD BGCOLOR=#d9a090>....</TD><TD BGCOLOR=#dfaa92>....</TD><TD BGCOLOR=#eec2a3>....</TD><TD BGCOLOR=#fad2ac>....</TD><TD BGCOLOR=#fce9bd>....</TD><TD BGCOLOR=#fcf4c4>....</TD><TD BGCOLOR=#fee8c4>....</TD><TD BGCOLOR=#fed2b2>....</TD><TD BGCOLOR=#f9c5a4>....</TD><TD BGCOLOR=#f7c0a2>....</TD><TD BGCOLOR=#fabba3>....</TD><TD BGCOLOR=#fac5b0>....</TD><TD BGCOLOR=#f6b9a8>....</TD><TD BGCOLOR=#eea99a>....</TD><TD BGCOLOR=#bc7665>....</TD></TR> <TR><TD BGCOLOR=#2f1305 COLSPAN=2>....</TD><TD BGCOLOR=#351201>....</TD><TD BGCOLOR=#341301>....</TD><TD BGCOLOR=#301407>....</TD><TD BGCOLOR=#301303>....</TD><TD BGCOLOR=#2b1302>....</TD><TD BGCOLOR=#2f1504>....</TD><TD BGCOLOR=#311303>....</TD><TD BGCOLOR=#2d1003>....</TD><TD BGCOLOR=#280f06>....</TD><TD BGCOLOR=#281305>....</TD><TD BGCOLOR=#281604>....</TD><TD BGCOLOR=#251006>....</TD><TD BGCOLOR=#32150d>....</TD><TD BGCOLOR=#351204>....</TD><TD BGCOLOR=#441504>....</TD><TD BGCOLOR=#4a3118>....</TD><TD BGCOLOR=#5e5d3b>....</TD><TD BGCOLOR=#6c5a3e>....</TD><TD BGCOLOR=#64603d>....</TD><TD BGCOLOR=#717354>....</TD><TD BGCOLOR=#6a6c4d>....</TD><TD BGCOLOR=#686945>....</TD><TD BGCOLOR=#6b634c>....</TD><TD BGCOLOR=#686049>....</TD><TD BGCOLOR=#6b634c>....</TD><TD BGCOLOR=#685e49>....</TD><TD BGCOLOR=#685a49>....</TD><TD BGCOLOR=#5f4e35>....</TD><TD BGCOLOR=#5f4222>....</TD><TD BGCOLOR=#593410>....</TD><TD BGCOLOR=#5b3c10>....</TD><TD BGCOLOR=#5b3b15>....</TD><TD BGCOLOR=#573711>....</TD><TD BGCOLOR=#593d0d>....</TD><TD BGCOLOR=#55370a>....</TD><TD BGCOLOR=#53350c>....</TD><TD BGCOLOR=#4d3617>....</TD><TD BGCOLOR=#4a2c11>....</TD><TD BGCOLOR=#441f0b>....</TD><TD BGCOLOR=#6a452a>....</TD><TD BGCOLOR=#775338>....</TD><TD BGCOLOR=#7b5035>....</TD><TD BGCOLOR=#78543a>....</TD><TD BGCOLOR=#77543a>....</TD><TD BGCOLOR=#7f5536>....</TD><TD BGCOLOR=#8f633f>....</TD><TD BGCOLOR=#9f6e46>....</TD><TD BGCOLOR=#ae7e56>....</TD><TD BGCOLOR=#a27650>....</TD><TD BGCOLOR=#af7c4e>....</TD><TD BGCOLOR=#b37954>....</TD><TD BGCOLOR=#b67e5f>....</TD><TD BGCOLOR=#af7c5b>....</TD><TD BGCOLOR=#aa7851>....</TD><TD BGCOLOR=#b7865c>....</TD><TD BGCOLOR=#c49265>....</TD><TD BGCOLOR=#c08c62>....</TD><TD BGCOLOR=#cb9168>....</TD><TD BGCOLOR=#d8926a>....</TD><TD BGCOLOR=#f3a282>....</TD><TD BGCOLOR=#fbad8e>....</TD><TD BGCOLOR=#fdb296>....</TD><TD BGCOLOR=#fab29b>....</TD><TD BGCOLOR=#f0aa8f>....</TD><TD BGCOLOR=#eea58b>....</TD><TD BGCOLOR=#eaa587>....</TD><TD BGCOLOR=#dfa27e>....</TD><TD BGCOLOR=#dea57c>....</TD><TD BGCOLOR=#dd9b79>....</TD><TD BGCOLOR=#e0a580>....</TD><TD BGCOLOR=#dfa07c>....</TD><TD BGCOLOR=#cf9a72>....</TD><TD BGCOLOR=#cb9a6f>....</TD><TD BGCOLOR=#b78f65>....</TD><TD BGCOLOR=#a8835d>....</TD><TD BGCOLOR=#a57c5e>....</TD><TD BGCOLOR=#98715b>....</TD><TD BGCOLOR=#966e5f>....</TD><TD BGCOLOR=#91675f>....</TD><TD BGCOLOR=#926c63>....</TD><TD BGCOLOR=#8e6d60>....</TD><TD BGCOLOR=#8d6b62>....</TD><TD BGCOLOR=#956868>....</TD><TD BGCOLOR=#936460>....</TD><TD BGCOLOR=#886a5a>....</TD><TD BGCOLOR=#926157>....</TD><TD BGCOLOR=#946060>....</TD><TD BGCOLOR=#956164>....</TD><TD BGCOLOR=#9f7362>....</TD><TD BGCOLOR=#a36569>....</TD><TD BGCOLOR=#915254>....</TD><TD BGCOLOR=#865752>....</TD><TD BGCOLOR=#8b695b>....</TD><TD BGCOLOR=#875a48>....</TD><TD BGCOLOR=#ac7f6a>....</TD><TD BGCOLOR=#bc917d>....</TD><TD BGCOLOR=#c38e75>....</TD><TD BGCOLOR=#cc9375>....</TD><TD BGCOLOR=#deb08e>....</TD><TD BGCOLOR=#f2d2aa>....</TD><TD BGCOLOR=#fde7ba>....</TD><TD BGCOLOR=#fcf1c0>....</TD><TD BGCOLOR=#fbe3b2>....</TD><TD BGCOLOR=#f9dbaf>....</TD><TD BGCOLOR=#eac69e>....</TD><TD BGCOLOR=#edb69e>....</TD><TD BGCOLOR=#f2b095>....</TD><TD BGCOLOR=#f0af8f>....</TD><TD BGCOLOR=#f6b497>....</TD><TD BGCOLOR=#fcb19a>....</TD><TD BGCOLOR=#f3ab9d>....</TD><TD BGCOLOR=#e2988e>....</TD><TD BGCOLOR=#dd958d>....</TD><TD BGCOLOR=#b87a70>....</TD></TR> <TR><TD BGCOLOR=#2f1305 COLSPAN=2>....</TD><TD BGCOLOR=#351301>....</TD><TD BGCOLOR=#341301>....</TD><TD BGCOLOR=#2f1205>....</TD><TD BGCOLOR=#301303>....</TD><TD BGCOLOR=#2c1403>....</TD><TD BGCOLOR=#301605>....</TD><TD BGCOLOR=#2f1402>....</TD><TD BGCOLOR=#2a1204>....</TD><TD BGCOLOR=#290f06>....</TD><TD BGCOLOR=#241205>....</TD><TD BGCOLOR=#251604>....</TD><TD BGCOLOR=#271205>....</TD><TD BGCOLOR=#32150d>....</TD><TD BGCOLOR=#351204>....</TD><TD BGCOLOR=#451402>....</TD><TD BGCOLOR=#45361c>....</TD><TD BGCOLOR=#5d5a3d>....</TD><TD BGCOLOR=#695a3c>....</TD><TD BGCOLOR=#63643e>....</TD><TD BGCOLOR=#737253>....</TD><TD BGCOLOR=#6b694c>....</TD><TD BGCOLOR=#666944>....</TD><TD BGCOLOR=#6b644c>....</TD><TD BGCOLOR=#686049>....</TD><TD BGCOLOR=#6b634c>....</TD><TD BGCOLOR=#695f49>....</TD><TD BGCOLOR=#685c45>....</TD><TD BGCOLOR=#5d5336>....</TD><TD BGCOLOR=#5b4828>....</TD><TD BGCOLOR=#583c15>....</TD><TD BGCOLOR=#5b3d09>....</TD><TD BGCOLOR=#5d3d14>....</TD><TD BGCOLOR=#553510>....</TD><TD BGCOLOR=#583c0d>....</TD><TD BGCOLOR=#553809>....</TD><TD BGCOLOR=#573607>....</TD><TD BGCOLOR=#563810>....</TD><TD BGCOLOR=#563110>....</TD><TD BGCOLOR=#48220b>....</TD><TD BGCOLOR=#5b371c>....</TD><TD BGCOLOR=#734834>....</TD><TD BGCOLOR=#855738>....</TD><TD BGCOLOR=#87593d>....</TD><TD BGCOLOR=#83553d>....</TD><TD BGCOLOR=#8a5c41>....</TD><TD BGCOLOR=#875d3f>....</TD><TD BGCOLOR=#935d3d>....</TD><TD BGCOLOR=#a06b4b>....</TD><TD BGCOLOR=#a17756>....</TD><TD BGCOLOR=#b68454>....</TD><TD BGCOLOR=#c0895b>....</TD><TD BGCOLOR=#b8815c>....</TD><TD BGCOLOR=#bd8866>....</TD><TD BGCOLOR=#b37f52>....</TD><TD BGCOLOR=#b68555>....</TD><TD BGCOLOR=#bb8f5a>....</TD><TD BGCOLOR=#b78356>....</TD><TD BGCOLOR=#c88962>....</TD><TD BGCOLOR=#d38e66>....</TD><TD BGCOLOR=#f4a987>....</TD><TD BGCOLOR=#feba95>....</TD><TD BGCOLOR=#fcb495>....</TD><TD BGCOLOR=#fab098>....</TD><TD BGCOLOR=#f8b093>....</TD><TD BGCOLOR=#fcaf94>....</TD><TD BGCOLOR=#f4aa8b>....</TD><TD BGCOLOR=#e4a07a>....</TD><TD BGCOLOR=#e4a57a>....</TD><TD BGCOLOR=#e49d7b>....</TD><TD BGCOLOR=#e2a381>....</TD><TD BGCOLOR=#e8a689>....</TD><TD BGCOLOR=#da9e7e>....</TD><TD BGCOLOR=#dc9b72>....</TD><TD BGCOLOR=#b78e68>....</TD><TD BGCOLOR=#9a785f>....</TD><TD BGCOLOR=#7f5b4b>....</TD><TD BGCOLOR=#895e54>....</TD><TD BGCOLOR=#8c5f5c>....</TD><TD BGCOLOR=#8b5f61>....</TD><TD BGCOLOR=#905961>....</TD><TD BGCOLOR=#976669>....</TD><TD BGCOLOR=#986a6d>....</TD><TD BGCOLOR=#9b676b>....</TD><TD BGCOLOR=#a36364>....</TD><TD BGCOLOR=#ad746d>....</TD><TD BGCOLOR=#af6467>....</TD><TD BGCOLOR=#bd7a87>....</TD><TD BGCOLOR=#a4696d>....</TD><TD BGCOLOR=#a25e4e>....</TD><TD BGCOLOR=#9f4446>....</TD><TD BGCOLOR=#82322b>....</TD><TD BGCOLOR=#8d5a4f>....</TD><TD BGCOLOR=#a8836f>....</TD><TD BGCOLOR=#cba58b>....</TD><TD BGCOLOR=#d7ba97>....</TD><TD BGCOLOR=#e2b696>....</TD><TD BGCOLOR=#e2a98f>....</TD><TD BGCOLOR=#f0b393>....</TD><TD BGCOLOR=#fcc7a4>....</TD><TD BGCOLOR=#f8bfa2>....</TD><TD BGCOLOR=#f7c2a5>....</TD><TD BGCOLOR=#efc2a6>....</TD><TD BGCOLOR=#f9c3a9>....</TD><TD BGCOLOR=#f9bda3>....</TD><TD BGCOLOR=#f4b695>....</TD><TD BGCOLOR=#ecaa8e>....</TD><TD BGCOLOR=#e9a383>....</TD><TD BGCOLOR=#f1ad8b>....</TD><TD BGCOLOR=#f8b394>....</TD><TD BGCOLOR=#f6a88f>....</TD><TD BGCOLOR=#f3a994>....</TD><TD BGCOLOR=#ec9f90>....</TD><TD BGCOLOR=#dc9289>....</TD><TD BGCOLOR=#be7d77>....</TD></TR> <TR><TD BGCOLOR=#311305 COLSPAN=2>....</TD><TD BGCOLOR=#381203>....</TD><TD BGCOLOR=#341202>....</TD><TD BGCOLOR=#2c1404>....</TD><TD BGCOLOR=#311304>....</TD><TD BGCOLOR=#2f1504>....</TD><TD BGCOLOR=#301504>....</TD><TD BGCOLOR=#2f1302>....</TD><TD BGCOLOR=#2a1403>....</TD><TD BGCOLOR=#291105>....</TD><TD BGCOLOR=#261105>....</TD><TD BGCOLOR=#261405>....</TD><TD BGCOLOR=#281105>....</TD><TD BGCOLOR=#33140a>....</TD><TD BGCOLOR=#331203>....</TD><TD BGCOLOR=#401203>....</TD><TD BGCOLOR=#44371e>....</TD><TD BGCOLOR=#5c593c>....</TD><TD BGCOLOR=#675d3e>....</TD><TD BGCOLOR=#6b6240>....</TD><TD BGCOLOR=#767054>....</TD><TD BGCOLOR=#6d6a4f>....</TD><TD BGCOLOR=#636b47>....</TD><TD BGCOLOR=#675f47>....</TD><TD BGCOLOR=#686149>....</TD><TD BGCOLOR=#68644b>....</TD><TD BGCOLOR=#6c614b>....</TD><TD BGCOLOR=#6a6246>....</TD><TD BGCOLOR=#5e5a39>....</TD><TD BGCOLOR=#594c2d>....</TD><TD BGCOLOR=#583f15>....</TD><TD BGCOLOR=#5a3b0c>....</TD><TD BGCOLOR=#5d3e14>....</TD><TD BGCOLOR=#56360d>....</TD><TD BGCOLOR=#563f13>....</TD><TD BGCOLOR=#51380c>....</TD><TD BGCOLOR=#583908>....</TD><TD BGCOLOR=#553c0e>....</TD><TD BGCOLOR=#573311>....</TD><TD BGCOLOR=#4a1f09>....</TD><TD BGCOLOR=#4b230d>....</TD><TD BGCOLOR=#653f2b>....</TD><TD BGCOLOR=#825737>....</TD><TD BGCOLOR=#88583b>....</TD><TD BGCOLOR=#834f37>....</TD><TD BGCOLOR=#855239>....</TD><TD BGCOLOR=#8a6446>....</TD><TD BGCOLOR=#9a6647>....</TD><TD BGCOLOR=#a77354>....</TD><TD BGCOLOR=#92694a>....</TD><TD BGCOLOR=#9f6c41>....</TD><TD BGCOLOR=#c79360>....</TD><TD BGCOLOR=#be8b5d>....</TD><TD BGCOLOR=#c18e64>....</TD><TD BGCOLOR=#b37e4c>....</TD><TD BGCOLOR=#b1824f>....</TD><TD BGCOLOR=#a77a47>....</TD><TD BGCOLOR=#ac784e>....</TD><TD BGCOLOR=#cf906e>....</TD><TD BGCOLOR=#db9570>....</TD><TD BGCOLOR=#eea681>....</TD><TD BGCOLOR=#fdbd94>....</TD><TD BGCOLOR=#f7ac8a>....</TD><TD BGCOLOR=#faac90>....</TD><TD BGCOLOR=#fcb595>....</TD><TD BGCOLOR=#f6af8f>....</TD><TD BGCOLOR=#fbb38f>....</TD><TD BGCOLOR=#f2a981>....</TD><TD BGCOLOR=#eea57c>....</TD><TD BGCOLOR=#e7a17f>....</TD><TD BGCOLOR=#de9e7d>....</TD><TD BGCOLOR=#e5a288>....</TD><TD BGCOLOR=#efae95>....</TD><TD BGCOLOR=#e4a280>....</TD><TD BGCOLOR=#c68d6d>....</TD><TD BGCOLOR=#bd9a88>....</TD><TD BGCOLOR=#925b58>....</TD><TD BGCOLOR=#ad6865>....</TD><TD BGCOLOR=#c1726f>....</TD><TD BGCOLOR=#c67c80>....</TD><TD BGCOLOR=#b46167>....</TD><TD BGCOLOR=#ae6168>....</TD><TD BGCOLOR=#ba7d80>....</TD><TD BGCOLOR=#bf8588>....</TD><TD BGCOLOR=#b66b67>....</TD><TD BGCOLOR=#c07677>....</TD><TD BGCOLOR=#be6b78>....</TD><TD BGCOLOR=#af6068>....</TD><TD BGCOLOR=#9d5554>....</TD><TD BGCOLOR=#bf6255>....</TD><TD BGCOLOR=#af3f3c>....</TD><TD BGCOLOR=#8f362d>....</TD><TD BGCOLOR=#946051>....</TD><TD BGCOLOR=#a7836b>....</TD><TD BGCOLOR=#cfad90>....</TD><TD BGCOLOR=#c8b18b>....</TD><TD BGCOLOR=#c79b77>....</TD><TD BGCOLOR=#cd917a>....</TD><TD BGCOLOR=#e3a490>....</TD><TD BGCOLOR=#f2b79c>....</TD><TD BGCOLOR=#f3baa6>....</TD><TD BGCOLOR=#eeb5a2>....</TD><TD BGCOLOR=#f3beac>....</TD><TD BGCOLOR=#e7b39f>....</TD><TD BGCOLOR=#edbba3>....</TD><TD BGCOLOR=#e0a788>....</TD><TD BGCOLOR=#e2a17f>....</TD><TD BGCOLOR=#d89a78>....</TD><TD BGCOLOR=#e3a584>....</TD><TD BGCOLOR=#df997b>....</TD><TD BGCOLOR=#e59a82>....</TD><TD BGCOLOR=#f0ab94>....</TD><TD BGCOLOR=#eea58e>....</TD><TD BGCOLOR=#eb9e8c>....</TD><TD BGCOLOR=#db9286>....</TD></TR> </TABLE><TABLE CELLPADDING=0 CELLSPACING=0 BORDER=0> <TR><TD BGCOLOR=#311102>....</TD><TD BGCOLOR=#311102>....</TD><TD BGCOLOR=#3a1105>....</TD><TD BGCOLOR=#311102>....</TD><TD BGCOLOR=#281703>....</TD><TD BGCOLOR=#331405>....</TD><TD BGCOLOR=#311303>....</TD><TD BGCOLOR=#321304>....</TD><TD BGCOLOR=#301202>....</TD><TD BGCOLOR=#291100>....</TD><TD BGCOLOR=#261403>....</TD><TD BGCOLOR=#291005>....</TD><TD BGCOLOR=#2a0f06>....</TD><TD BGCOLOR=#2a0e04>....</TD><TD BGCOLOR=#351508>....</TD><TD BGCOLOR=#301504>....</TD><TD BGCOLOR=#3b1305>....</TD><TD BGCOLOR=#473820>....</TD><TD BGCOLOR=#5c5b3d>....</TD><TD BGCOLOR=#625d41>....</TD><TD BGCOLOR=#6e583b>....</TD><TD BGCOLOR=#766f54>....</TD><TD BGCOLOR=#68664e>....</TD><TD BGCOLOR=#64694a>....</TD><TD BGCOLOR=#696049>....</TD><TD BGCOLOR=#676049>....</TD><TD BGCOLOR=#64644a>....</TD><TD BGCOLOR=#6f614c>....</TD><TD BGCOLOR=#6e6345>....</TD><TD BGCOLOR=#5f5b3a>....</TD><TD BGCOLOR=#5f4e38>....</TD><TD BGCOLOR=#5c3e17>....</TD><TD BGCOLOR=#593813>....</TD><TD BGCOLOR=#5c3c12>....</TD><TD BGCOLOR=#553608>....</TD><TD BGCOLOR=#553e15>....</TD><TD BGCOLOR=#4d340c>....</TD><TD BGCOLOR=#563706>....</TD><TD BGCOLOR=#543f10>....</TD><TD BGCOLOR=#52381b>....</TD><TD BGCOLOR=#492212>....</TD><TD BGCOLOR=#461c0d>....</TD><TD BGCOLOR=#613f24>....</TD><TD BGCOLOR=#785435>....</TD><TD BGCOLOR=#896142>....</TD><TD BGCOLOR=#7f5235>....</TD><TD BGCOLOR=#7f4f34>....</TD><TD BGCOLOR=#896342>....</TD><TD BGCOLOR=#9f6a48>....</TD><TD BGCOLOR=#a6704f>....</TD><TD BGCOLOR=#a87a5b>....</TD><TD BGCOLOR=#91603c>....</TD><TD BGCOLOR=#bd8b5a>....</TD><TD BGCOLOR=#cb9663>....</TD><TD BGCOLOR=#bf8757>....</TD><TD BGCOLOR=#b27b4a>....</TD><TD BGCOLOR=#b78455>....</TD><TD BGCOLOR=#b27750>....</TD><TD BGCOLOR=#b97b58>....</TD><TD BGCOLOR=#d1896a>....</TD><TD BGCOLOR=#e99679>....</TD><TD BGCOLOR=#fcbd9a>....</TD><TD BGCOLOR=#fdc29d>....</TD><TD BGCOLOR=#fbb191>....</TD><TD BGCOLOR=#f8ad8f>....</TD><TD BGCOLOR=#eaa485>....</TD><TD BGCOLOR=#ebae95>....</TD><TD BGCOLOR=#f1ab8a>....</TD><TD BGCOLOR=#fbae84>....</TD><TD BGCOLOR=#faaf84>....</TD><TD BGCOLOR=#f5aa84>....</TD><TD BGCOLOR=#e49a77>....</TD><TD BGCOLOR=#eba684>....</TD><TD BGCOLOR=#eaa88c>....</TD><TD BGCOLOR=#d5a286>....</TD><TD BGCOLOR=#c48366>....</TD><TD BGCOLOR=#b19680>....</TD><TD BGCOLOR=#bc7871>....</TD><TD BGCOLOR=#c37d78>....</TD><TD BGCOLOR=#dc7f86>....</TD><TD BGCOLOR=#d67e85>....</TD><TD BGCOLOR=#c66f62>....</TD><TD BGCOLOR=#b85751>....</TD><TD BGCOLOR=#c06f68>....</TD><TD BGCOLOR=#c87b77>....</TD><TD BGCOLOR=#c9695d>....</TD><TD BGCOLOR=#d18383>....</TD><TD BGCOLOR=#b36e78>....</TD><TD BGCOLOR=#ab5650>....</TD><TD BGCOLOR=#b85953>....</TD><TD BGCOLOR=#b7413b>....</TD><TD BGCOLOR=#be4442>....</TD><TD BGCOLOR=#96383c>....</TD><TD BGCOLOR=#925649>....</TD><TD BGCOLOR=#9c745e>....</TD><TD BGCOLOR=#b89278>....</TD><TD BGCOLOR=#b79578>....</TD><TD BGCOLOR=#b28265>....</TD><TD BGCOLOR=#c58874>....</TD><TD BGCOLOR=#e3a8a3>....</TD><TD BGCOLOR=#dea28c>....</TD><TD BGCOLOR=#e1a492>....</TD><TD BGCOLOR=#e0a58f>....</TD><TD BGCOLOR=#dea88d>....</TD><TD BGCOLOR=#da9f83>....</TD><TD BGCOLOR=#d08e73>....</TD><TD BGCOLOR=#c7856a>....</TD><TD BGCOLOR=#c48267>....</TD><TD BGCOLOR=#c68d70>....</TD><TD BGCOLOR=#d4977d>....</TD><TD BGCOLOR=#e5a08b>....</TD><TD BGCOLOR=#f1ae9c>....</TD><TD BGCOLOR=#f6b2a1>....</TD><TD BGCOLOR=#f9b39b>....</TD><TD BGCOLOR=#fcb498>....</TD><TD BGCOLOR=#f3a791>....</TD></TR> <TR><TD BGCOLOR=#2f0e01 COLSPAN=2>....</TD><TD BGCOLOR=#351304>....</TD><TD BGCOLOR=#2f1604>....</TD><TD BGCOLOR=#291804>....</TD><TD BGCOLOR=#321505>....</TD><TD BGCOLOR=#330f01>....</TD><TD BGCOLOR=#321103>....</TD><TD BGCOLOR=#321504>....</TD><TD BGCOLOR=#2d1101>....</TD><TD BGCOLOR=#271404>....</TD><TD BGCOLOR=#261205>....</TD><TD BGCOLOR=#280c04>....</TD><TD BGCOLOR=#2d0c04>....</TD><TD BGCOLOR=#36160a>....</TD><TD BGCOLOR=#2c1705>....</TD><TD BGCOLOR=#381404>....</TD><TD BGCOLOR=#4a3927>....</TD><TD BGCOLOR=#5b5a44>....</TD><TD BGCOLOR=#605b40>....</TD><TD BGCOLOR=#6a5e3d>....</TD><TD BGCOLOR=#777659>....</TD><TD BGCOLOR=#69614b>....</TD><TD BGCOLOR=#6a6449>....</TD><TD BGCOLOR=#68624a>....</TD><TD BGCOLOR=#6a5f48>....</TD><TD BGCOLOR=#656249>....</TD><TD BGCOLOR=#6c614a>....</TD><TD BGCOLOR=#6d6143>....</TD><TD BGCOLOR=#5e593d>....</TD><TD BGCOLOR=#5f4d41>....</TD><TD BGCOLOR=#5b3c1c>....</TD><TD BGCOLOR=#57370d>....</TD><TD BGCOLOR=#5b3b12>....</TD><TD BGCOLOR=#55350b>....</TD><TD BGCOLOR=#573a11>....</TD><TD BGCOLOR=#513205>....</TD><TD BGCOLOR=#593803>....</TD><TD BGCOLOR=#583a0d>....</TD><TD BGCOLOR=#5a4630>....</TD><TD BGCOLOR=#5f4d40>....</TD><TD BGCOLOR=#402113>....</TD><TD BGCOLOR=#54230f>....</TD><TD BGCOLOR=#724826>....</TD><TD BGCOLOR=#78512d>....</TD><TD BGCOLOR=#77502c>....</TD><TD BGCOLOR=#805835>....</TD><TD BGCOLOR=#8d6041>....</TD><TD BGCOLOR=#9f6243>....</TD><TD BGCOLOR=#a36547>....</TD><TD BGCOLOR=#a37054>....</TD><TD BGCOLOR=#885a38>....</TD><TD BGCOLOR=#b37f5a>....</TD><TD BGCOLOR=#d2966d>....</TD><TD BGCOLOR=#c18158>....</TD><TD BGCOLOR=#b67a52>....</TD><TD BGCOLOR=#bc7f58>....</TD><TD BGCOLOR=#c67e5b>....</TD><TD BGCOLOR=#d48661>....</TD><TD BGCOLOR=#f29a78>....</TD><TD BGCOLOR=#fea991>....</TD><TD BGCOLOR=#fecaad>....</TD><TD BGCOLOR=#fbc4a5>....</TD><TD BGCOLOR=#f0af8f>....</TD><TD BGCOLOR=#e2a17e>....</TD><TD BGCOLOR=#d2926c>....</TD><TD BGCOLOR=#cf8e7a>....</TD><TD BGCOLOR=#eba78b>....</TD><TD BGCOLOR=#eca87f>....</TD><TD BGCOLOR=#cd9062>....</TD><TD BGCOLOR=#e09d6f>....</TD><TD BGCOLOR=#e8a57a>....</TD><TD BGCOLOR=#f1ac85>....</TD><TD BGCOLOR=#f1ad8d>....</TD><TD BGCOLOR=#e2ad95>....</TD><TD BGCOLOR=#ba7d63>....</TD><TD BGCOLOR=#ae967d>....</TD><TD BGCOLOR=#ca9678>....</TD><TD BGCOLOR=#e8dcc3>....</TD><TD BGCOLOR=#b07283>....</TD><TD BGCOLOR=#c06069>....</TD><TD BGCOLOR=#b25243>....</TD><TD BGCOLOR=#ba4c3f>....</TD><TD BGCOLOR=#c4584a>....</TD><TD BGCOLOR=#c15648>....</TD><TD BGCOLOR=#c54235>....</TD><TD BGCOLOR=#ad3e35>....</TD><TD BGCOLOR=#ae5d54>....</TD><TD BGCOLOR=#bc5d51>....</TD><TD BGCOLOR=#b94e48>....</TD><TD BGCOLOR=#c94c45>....</TD><TD BGCOLOR=#c44642>....</TD><TD BGCOLOR=#ae434a>....</TD><TD BGCOLOR=#8f3d3b>....</TD><TD BGCOLOR=#9f6f5f>....</TD><TD BGCOLOR=#b48f77>....</TD><TD BGCOLOR=#b59479>....</TD><TD BGCOLOR=#b07e5d>....</TD><TD BGCOLOR=#b67b63>....</TD><TD BGCOLOR=#e2afa4>....</TD><TD BGCOLOR=#e7b296>....</TD><TD BGCOLOR=#e6a990>....</TD><TD BGCOLOR=#d49b7e>....</TD><TD BGCOLOR=#d09b79>....</TD><TD BGCOLOR=#d9a07b>....</TD><TD BGCOLOR=#da9c77>....</TD><TD BGCOLOR=#d59b7a>....</TD><TD BGCOLOR=#dea88a>....</TD><TD BGCOLOR=#eaae8c>....</TD><TD BGCOLOR=#e7a791>....</TD><TD BGCOLOR=#e9ada2>....</TD><TD BGCOLOR=#f4bdaa>....</TD><TD BGCOLOR=#fcc0ab>....</TD><TD BGCOLOR=#fdc7ae>....</TD><TD BGCOLOR=#fdc8ac>....</TD><TD BGCOLOR=#eaad90>....</TD></TR> <TR><TD BGCOLOR=#321203 COLSPAN=2>....</TD><TD BGCOLOR=#2f1504>....</TD><TD BGCOLOR=#2a1603>....</TD><TD BGCOLOR=#271702>....</TD><TD BGCOLOR=#301504>....</TD><TD BGCOLOR=#350d01>....</TD><TD BGCOLOR=#321003>....</TD><TD BGCOLOR=#311505>....</TD><TD BGCOLOR=#311002>....</TD><TD BGCOLOR=#281405>....</TD><TD BGCOLOR=#231204>....</TD><TD BGCOLOR=#261106>....</TD><TD BGCOLOR=#270b02>....</TD><TD BGCOLOR=#341408>....</TD><TD BGCOLOR=#2d1305>....</TD><TD BGCOLOR=#391203>....</TD><TD BGCOLOR=#4c3b2e>....</TD><TD BGCOLOR=#5c584b>....</TD><TD BGCOLOR=#605b41>....</TD><TD BGCOLOR=#6a5d3c>....</TD><TD BGCOLOR=#777558>....</TD><TD BGCOLOR=#6b654e>....</TD><TD BGCOLOR=#6b674b>....</TD><TD BGCOLOR=#656249>....</TD><TD BGCOLOR=#6d5e49>....</TD><TD BGCOLOR=#6b654d>....</TD><TD BGCOLOR=#6a624b>....</TD><TD BGCOLOR=#6d6245>....</TD><TD BGCOLOR=#605c3b>....</TD><TD BGCOLOR=#5c4b36>....</TD><TD BGCOLOR=#57390f>....</TD><TD BGCOLOR=#553607>....</TD><TD BGCOLOR=#5a3a0f>....</TD><TD BGCOLOR=#563510>....</TD><TD BGCOLOR=#593914>....</TD><TD BGCOLOR=#513406>....</TD><TD BGCOLOR=#553906>....</TD><TD BGCOLOR=#5a3b18>....</TD><TD BGCOLOR=#735f4d>....</TD><TD BGCOLOR=#787264>....</TD><TD BGCOLOR=#56453a>....</TD><TD BGCOLOR=#4f1a13>....</TD><TD BGCOLOR=#613219>....</TD><TD BGCOLOR=#663f20>....</TD><TD BGCOLOR=#6a4727>....</TD><TD BGCOLOR=#7c5c3b>....</TD><TD BGCOLOR=#926747>....</TD><TD BGCOLOR=#a16646>....</TD><TD BGCOLOR=#a06344>....</TD><TD BGCOLOR=#9a684c>....</TD><TD BGCOLOR=#916447>....</TD><TD BGCOLOR=#95664a>....</TD><TD BGCOLOR=#c4936e>....</TD><TD BGCOLOR=#c59269>....</TD><TD BGCOLOR=#ba8462>....</TD><TD BGCOLOR=#b27753>....</TD><TD BGCOLOR=#c67c58>....</TD><TD BGCOLOR=#dc815f>....</TD><TD BGCOLOR=#fca886>....</TD><TD BGCOLOR=#fdc29f>....</TD><TD BGCOLOR=#fdcaaa>....</TD><TD BGCOLOR=#fdc1a7>....</TD><TD BGCOLOR=#fcc6a7>....</TD><TD BGCOLOR=#ebb58d>....</TD><TD BGCOLOR=#dfa377>....</TD><TD BGCOLOR=#e2a07e>....</TD><TD BGCOLOR=#f7b992>....</TD><TD BGCOLOR=#fbca9c>....</TD><TD BGCOLOR=#dfb689>....</TD><TD BGCOLOR=#b6825b>....</TD><TD BGCOLOR=#d39a78>....</TD><TD BGCOLOR=#db9d7f>....</TD><TD BGCOLOR=#d18d77>....</TD><TD BGCOLOR=#b8806c>....</TD><TD BGCOLOR=#b9806a>....</TD><TD BGCOLOR=#b39c81>....</TD><TD BGCOLOR=#c6926d>....</TD><TD BGCOLOR=#ebe7cf>....</TD><TD BGCOLOR=#ac7776>....</TD><TD BGCOLOR=#b75047>....</TD><TD BGCOLOR=#b6524b>....</TD><TD BGCOLOR=#bd4946>....</TD><TD BGCOLOR=#b43f37>....</TD><TD BGCOLOR=#ac4031>....</TD><TD BGCOLOR=#b03c34>....</TD><TD BGCOLOR=#b63c36>....</TD><TD BGCOLOR=#ba4739>....</TD><TD BGCOLOR=#be5340>....</TD><TD BGCOLOR=#d07571>....</TD><TD BGCOLOR=#cd6459>....</TD><TD BGCOLOR=#c24f40>....</TD><TD BGCOLOR=#ba4c45>....</TD><TD BGCOLOR=#913539>....</TD><TD BGCOLOR=#885649>....</TD><TD BGCOLOR=#996f5c>....</TD><TD BGCOLOR=#a07863>....</TD><TD BGCOLOR=#a3795d>....</TD><TD BGCOLOR=#b88268>....</TD><TD BGCOLOR=#ddab95>....</TD><TD BGCOLOR=#ebbc92>....</TD><TD BGCOLOR=#f2cea8>....</TD><TD BGCOLOR=#f7d6ab>....</TD><TD BGCOLOR=#fbdeaf>....</TD><TD BGCOLOR=#fcd9ad>....</TD><TD BGCOLOR=#fdcda7>....</TD><TD BGCOLOR=#fbc9a2>....</TD><TD BGCOLOR=#f9c69f>....</TD><TD BGCOLOR=#f0b588>....</TD><TD BGCOLOR=#edb39e>....</TD><TD BGCOLOR=#e9b1b2>....</TD><TD BGCOLOR=#f0b9aa>....</TD><TD BGCOLOR=#fbbbad>....</TD><TD BGCOLOR=#fac7bb>....</TD><TD BGCOLOR=#eec1b0>....</TD><TD BGCOLOR=#cc947d>....</TD></TR> <TR><TD BGCOLOR=#330e03 COLSPAN=2>....</TD><TD BGCOLOR=#2c1505>....</TD><TD BGCOLOR=#2e1305>....</TD><TD BGCOLOR=#2c1304>....</TD><TD BGCOLOR=#2d1506>....</TD><TD BGCOLOR=#350f04>....</TD><TD BGCOLOR=#311105>....</TD><TD BGCOLOR=#2f1505>....</TD><TD BGCOLOR=#301001>....</TD><TD BGCOLOR=#251202>....</TD><TD BGCOLOR=#231204>....</TD><TD BGCOLOR=#200d03>....</TD><TD BGCOLOR=#250d02>....</TD><TD BGCOLOR=#37190a>....</TD><TD BGCOLOR=#2d1204>....</TD><TD BGCOLOR=#390e02>....</TD><TD BGCOLOR=#52392a>....</TD><TD BGCOLOR=#5a5a49>....</TD><TD BGCOLOR=#5e5e44>....</TD><TD BGCOLOR=#695b3d>....</TD><TD BGCOLOR=#6f745b>....</TD><TD BGCOLOR=#6e674c>....</TD><TD BGCOLOR=#686750>....</TD><TD BGCOLOR=#6a5f4c>....</TD><TD BGCOLOR=#6a5e4b>....</TD><TD BGCOLOR=#64644d>....</TD><TD BGCOLOR=#65664e>....</TD><TD BGCOLOR=#6b5f47>....</TD><TD BGCOLOR=#575333>....</TD><TD BGCOLOR=#594721>....</TD><TD BGCOLOR=#563907>....</TD><TD BGCOLOR=#53360b>....</TD><TD BGCOLOR=#5e3a0f>....</TD><TD BGCOLOR=#58350c>....</TD><TD BGCOLOR=#5f3614>....</TD><TD BGCOLOR=#543607>....</TD><TD BGCOLOR=#573604>....</TD><TD BGCOLOR=#604121>....</TD><TD BGCOLOR=#87705c>....</TD><TD BGCOLOR=#9f917b>....</TD><TD BGCOLOR=#988a83>....</TD><TD BGCOLOR=#684a44>....</TD><TD BGCOLOR=#492615>....</TD><TD BGCOLOR=#5d3122>....</TD><TD BGCOLOR=#643824>....</TD><TD BGCOLOR=#765736>....</TD><TD BGCOLOR=#96734b>....</TD><TD BGCOLOR=#9d6947>....</TD><TD BGCOLOR=#a46c4f>....</TD><TD BGCOLOR=#99664b>....</TD><TD BGCOLOR=#a06b4b>....</TD><TD BGCOLOR=#885c3f>....</TD><TD BGCOLOR=#a57d5f>....</TD><TD BGCOLOR=#b58965>....</TD><TD BGCOLOR=#b58661>....</TD><TD BGCOLOR=#ae8061>....</TD><TD BGCOLOR=#b97555>....</TD><TD BGCOLOR=#cf7b5b>....</TD><TD BGCOLOR=#f4b192>....</TD><TD BGCOLOR=#fad4b1>....</TD><TD BGCOLOR=#fac39f>....</TD><TD BGCOLOR=#fdb8a1>....</TD><TD BGCOLOR=#fdbe9f>....</TD><TD BGCOLOR=#f6b999>....</TD><TD BGCOLOR=#f3b58d>....</TD><TD BGCOLOR=#f6b68c>....</TD><TD BGCOLOR=#f4b687>....</TD><TD BGCOLOR=#efb47f>....</TD><TD BGCOLOR=#e5a976>....</TD><TD BGCOLOR=#cdb198>....</TD><TD BGCOLOR=#cd9c80>....</TD><TD BGCOLOR=#dcaf8b>....</TD><TD BGCOLOR=#e2a78e>....</TD><TD BGCOLOR=#bd8673>....</TD><TD BGCOLOR=#b88874>....</TD><TD BGCOLOR=#be9180>....</TD><TD BGCOLOR=#9f5a45>....</TD><TD BGCOLOR=#a35e50>....</TD><TD BGCOLOR=#ae584b>....</TD><TD BGCOLOR=#c55641>....</TD><TD BGCOLOR=#bb4c3f>....</TD><TD BGCOLOR=#ba493d>....</TD><TD BGCOLOR=#b85847>....</TD><TD BGCOLOR=#bd7268>....</TD><TD BGCOLOR=#c8766e>....</TD><TD BGCOLOR=#ba453b>....</TD><TD BGCOLOR=#c44936>....</TD><TD BGCOLOR=#bd4b35>....</TD><TD BGCOLOR=#bc6860>....</TD><TD BGCOLOR=#c05f58>....</TD><TD BGCOLOR=#bb5045>....</TD><TD BGCOLOR=#b74f41>....</TD><TD BGCOLOR=#9e443e>....</TD><TD BGCOLOR=#805344>....</TD><TD BGCOLOR=#7f453b>....</TD><TD BGCOLOR=#9b6153>....</TD><TD BGCOLOR=#d19580>....</TD><TD BGCOLOR=#f0ae93>....</TD><TD BGCOLOR=#fcc9ac>....</TD><TD BGCOLOR=#fdc7a4>....</TD><TD BGCOLOR=#fbd3aa>....</TD><TD BGCOLOR=#fedbb7>....</TD><TD BGCOLOR=#fcd6ab>....</TD><TD BGCOLOR=#fbcea6>....</TD><TD BGCOLOR=#fdc6a9>....</TD><TD BGCOLOR=#f3b69b>....</TD><TD BGCOLOR=#f5bca0>....</TD><TD BGCOLOR=#e6ae90>....</TD><TD BGCOLOR=#dfa58d>....</TD><TD BGCOLOR=#d7a09d>....</TD><TD BGCOLOR=#d49b91>....</TD><TD BGCOLOR=#df9a94>....</TD><TD BGCOLOR=#d49c99>....</TD><TD BGCOLOR=#bf9086>....</TD><TD BGCOLOR=#a7725d>....</TD></TR> <TR><TD BGCOLOR=#320e05 COLSPAN=2>....</TD><TD BGCOLOR=#2c1406>....</TD><TD BGCOLOR=#331208>....</TD><TD BGCOLOR=#301207>....</TD><TD BGCOLOR=#2c1104>....</TD><TD BGCOLOR=#360e06>....</TD><TD BGCOLOR=#351208>....</TD><TD BGCOLOR=#2f1304>....</TD><TD BGCOLOR=#2e0e00>....</TD><TD BGCOLOR=#241001>....</TD><TD BGCOLOR=#210f02>....</TD><TD BGCOLOR=#210e05>....</TD><TD BGCOLOR=#250e03>....</TD><TD BGCOLOR=#351908>....</TD><TD BGCOLOR=#2f1404>....</TD><TD BGCOLOR=#3c1002>....</TD><TD BGCOLOR=#543927>....</TD><TD BGCOLOR=#595c46>....</TD><TD BGCOLOR=#5d5f46>....</TD><TD BGCOLOR=#695b3d>....</TD><TD BGCOLOR=#6b745d>....</TD><TD BGCOLOR=#6d6447>....</TD><TD BGCOLOR=#676653>....</TD><TD BGCOLOR=#6c5c4d>....</TD><TD BGCOLOR=#69604d>....</TD><TD BGCOLOR=#63664f>....</TD><TD BGCOLOR=#5f654c>....</TD><TD BGCOLOR=#645d44>....</TD><TD BGCOLOR=#555231>....</TD><TD BGCOLOR=#554417>....</TD><TD BGCOLOR=#4f3606>....</TD><TD BGCOLOR=#553812>....</TD><TD BGCOLOR=#5f380d>....</TD><TD BGCOLOR=#593509>....</TD><TD BGCOLOR=#623513>....</TD><TD BGCOLOR=#563406>....</TD><TD BGCOLOR=#5b3704>....</TD><TD BGCOLOR=#715333>....</TD><TD BGCOLOR=#9c836e>....</TD><TD BGCOLOR=#b9a689>....</TD><TD BGCOLOR=#bcaba4>....</TD><TD BGCOLOR=#927f74>....</TD><TD BGCOLOR=#6d5d4a>....</TD><TD BGCOLOR=#59392f>....</TD><TD BGCOLOR=#5e3528>....</TD><TD BGCOLOR=#603f22>....</TD><TD BGCOLOR=#835f37>....</TD><TD BGCOLOR=#a27351>....</TD><TD BGCOLOR=#aa7457>....</TD><TD BGCOLOR=#a66f53>....</TD><TD BGCOLOR=#a26943>....</TD><TD BGCOLOR=#8e6341>....</TD><TD BGCOLOR=#a38068>....</TD><TD BGCOLOR=#aa8167>....</TD><TD BGCOLOR=#a0724d>....</TD><TD BGCOLOR=#a67d5c>....</TD><TD BGCOLOR=#bc7e57>....</TD><TD BGCOLOR=#d4835f>....</TD><TD BGCOLOR=#ea9f87>....</TD><TD BGCOLOR=#f8c7ad>....</TD><TD BGCOLOR=#f9bb97>....</TD><TD BGCOLOR=#fcaf96>....</TD><TD BGCOLOR=#f9ac88>....</TD><TD BGCOLOR=#f0a086>....</TD><TD BGCOLOR=#f4a482>....</TD><TD BGCOLOR=#efa67b>....</TD><TD BGCOLOR=#ebab7d>....</TD><TD BGCOLOR=#ebad7b>....</TD><TD BGCOLOR=#d79767>....</TD><TD BGCOLOR=#d0bea8>....</TD><TD BGCOLOR=#ac7c64>....</TD><TD BGCOLOR=#d4b28c>....</TD><TD BGCOLOR=#d6a082>....</TD><TD BGCOLOR=#daaa93>....</TD><TD BGCOLOR=#b48571>....</TD><TD BGCOLOR=#9a4e47>....</TD><TD BGCOLOR=#9d4c45>....</TD><TD BGCOLOR=#aa5147>....</TD><TD BGCOLOR=#aa5045>....</TD><TD BGCOLOR=#b04938>....</TD><TD BGCOLOR=#b74a38>....</TD><TD BGCOLOR=#b84a39>....</TD><TD BGCOLOR=#af533f>....</TD><TD BGCOLOR=#ab5c57>....</TD><TD BGCOLOR=#ae5a54>....</TD><TD BGCOLOR=#b03c33>....</TD><TD BGCOLOR=#ac3e2d>....</TD><TD BGCOLOR=#ab4434>....</TD><TD BGCOLOR=#ad4137>....</TD><TD BGCOLOR=#b24845>....</TD><TD BGCOLOR=#b14545>....</TD><TD BGCOLOR=#b4433e>....</TD><TD BGCOLOR=#a3463d>....</TD><TD BGCOLOR=#774435>....</TD><TD BGCOLOR=#7f3b35>....</TD><TD BGCOLOR=#b17568>....</TD><TD BGCOLOR=#d68f7f>....</TD><TD BGCOLOR=#f5af98>....</TD><TD BGCOLOR=#fbc3aa>....</TD><TD BGCOLOR=#f7b9a2>....</TD><TD BGCOLOR=#f0b79a>....</TD><TD BGCOLOR=#f9c4b1>....</TD><TD BGCOLOR=#f9c4a8>....</TD><TD BGCOLOR=#f9bda2>....</TD><TD BGCOLOR=#fec1af>....</TD><TD BGCOLOR=#eba896>....</TD><TD BGCOLOR=#dfa58e>....</TD><TD BGCOLOR=#d3a08e>....</TD><TD BGCOLOR=#d59d84>....</TD><TD BGCOLOR=#d8a59a>....</TD><TD BGCOLOR=#c89287>....</TD><TD BGCOLOR=#ba7a76>....</TD><TD BGCOLOR=#ab7271>....</TD><TD BGCOLOR=#a06e64>....</TD><TD BGCOLOR=#895641>....</TD></TR> <TR><TD BGCOLOR=#2e1206 COLSPAN=2>....</TD><TD BGCOLOR=#2a1204>....</TD><TD BGCOLOR=#341409>....</TD><TD BGCOLOR=#2d1608>....</TD><TD BGCOLOR=#290e02>....</TD><TD BGCOLOR=#340c04>....</TD><TD BGCOLOR=#36130a>....</TD><TD BGCOLOR=#2c1203>....</TD><TD BGCOLOR=#301101>....</TD><TD BGCOLOR=#260d01>....</TD><TD BGCOLOR=#221003>....</TD><TD BGCOLOR=#241208>....</TD><TD BGCOLOR=#250f03>....</TD><TD BGCOLOR=#371b0a>....</TD><TD BGCOLOR=#341004>....</TD><TD BGCOLOR=#421406>....</TD><TD BGCOLOR=#513b29>....</TD><TD BGCOLOR=#585a44>....</TD><TD BGCOLOR=#625e47>....</TD><TD BGCOLOR=#68593c>....</TD><TD BGCOLOR=#6c765e>....</TD><TD BGCOLOR=#6d6447>....</TD><TD BGCOLOR=#676653>....</TD><TD BGCOLOR=#675d4b>....</TD><TD BGCOLOR=#68614d>....</TD><TD BGCOLOR=#65654f>....</TD><TD BGCOLOR=#5e6049>....</TD><TD BGCOLOR=#5f5a3e>....</TD><TD BGCOLOR=#564e29>....</TD><TD BGCOLOR=#513f14>....</TD><TD BGCOLOR=#4d350b>....</TD><TD BGCOLOR=#533710>....</TD><TD BGCOLOR=#5e380d>....</TD><TD BGCOLOR=#593509>....</TD><TD BGCOLOR=#5c3513>....</TD><TD BGCOLOR=#593409>....</TD><TD BGCOLOR=#583807>....</TD><TD BGCOLOR=#816a4b>....</TD><TD BGCOLOR=#a9907a>....</TD><TD BGCOLOR=#b9a686>....</TD><TD BGCOLOR=#b7a299>....</TD><TD BGCOLOR=#94786c>....</TD><TD BGCOLOR=#b1a994>....</TD><TD BGCOLOR=#9f9587>....</TD><TD BGCOLOR=#6d584c>....</TD><TD BGCOLOR=#553523>....</TD><TD BGCOLOR=#6b4422>....</TD><TD BGCOLOR=#906543>....</TD><TD BGCOLOR=#a2704f>....</TD><TD BGCOLOR=#a87050>....</TD><TD BGCOLOR=#a67049>....</TD><TD BGCOLOR=#a37454>....</TD><TD BGCOLOR=#8c674f>....</TD><TD BGCOLOR=#b48d75>....</TD><TD BGCOLOR=#a06d4e>....</TD><TD BGCOLOR=#8e603c>....</TD><TD BGCOLOR=#c1885c>....</TD><TD BGCOLOR=#eda37d>....</TD><TD BGCOLOR=#f5a992>....</TD><TD BGCOLOR=#f5c2a9>....</TD><TD BGCOLOR=#f6c099>....</TD><TD BGCOLOR=#f5a787>....</TD><TD BGCOLOR=#faa77e>....</TD><TD BGCOLOR=#fead93>....</TD><TD BGCOLOR=#f8a486>....</TD><TD BGCOLOR=#f2a77c>....</TD><TD BGCOLOR=#eea87f>....</TD><TD BGCOLOR=#e4a780>....</TD><TD BGCOLOR=#d39f7a>....</TD><TD BGCOLOR=#9b8263>....</TD><TD BGCOLOR=#a27160>....</TD><TD BGCOLOR=#d6b295>....</TD><TD BGCOLOR=#dca383>....</TD><TD BGCOLOR=#d0a88c>....</TD><TD BGCOLOR=#b88670>....</TD><TD BGCOLOR=#a94d48>....</TD><TD BGCOLOR=#a44242>....</TD><TD BGCOLOR=#9e3f41>....</TD><TD BGCOLOR=#993d3c>....</TD><TD BGCOLOR=#98332b>....</TD><TD BGCOLOR=#952f25>....</TD><TD BGCOLOR=#9a312a>....</TD><TD BGCOLOR=#9a3028>....</TD><TD BGCOLOR=#932826>....</TD><TD BGCOLOR=#993532>....</TD><TD BGCOLOR=#a32b2a>....</TD><TD BGCOLOR=#922921>....</TD><TD BGCOLOR=#983b36>....</TD><TD BGCOLOR=#95442d>....</TD><TD BGCOLOR=#9c473d>....</TD><TD BGCOLOR=#b86562>....</TD><TD BGCOLOR=#b56958>....</TD><TD BGCOLOR=#a13a37>....</TD><TD BGCOLOR=#6f291d>....</TD><TD BGCOLOR=#7e332c>....</TD><TD BGCOLOR=#a57466>....</TD><TD BGCOLOR=#d09686>....</TD><TD BGCOLOR=#eab0a1>....</TD><TD BGCOLOR=#efb1a3>....</TD><TD BGCOLOR=#e9b09c>....</TD><TD BGCOLOR=#e0a893>....</TD><TD BGCOLOR=#e1a393>....</TD><TD BGCOLOR=#f5b4a2>....</TD><TD BGCOLOR=#f0ae9c>....</TD><TD BGCOLOR=#f3b4a3>....</TD><TD BGCOLOR=#e3a994>....</TD><TD BGCOLOR=#d1997d>....</TD><TD BGCOLOR=#c79786>....</TD><TD BGCOLOR=#c18c75>....</TD><TD BGCOLOR=#c18c81>....</TD><TD BGCOLOR=#bb8173>....</TD><TD BGCOLOR=#b07971>....</TD><TD BGCOLOR=#a46e65>....</TD><TD BGCOLOR=#9b6554>....</TD><TD BGCOLOR=#8c5843>....</TD></TR> <TR><TD BGCOLOR=#271204 COLSPAN=2>....</TD><TD BGCOLOR=#280f02>....</TD><TD BGCOLOR=#301106>....</TD><TD BGCOLOR=#261606>....</TD><TD BGCOLOR=#241203>....</TD><TD BGCOLOR=#301106>....</TD><TD BGCOLOR=#2e1508>....</TD><TD BGCOLOR=#281604>....</TD><TD BGCOLOR=#2c0e00>....</TD><TD BGCOLOR=#2a0d00>....</TD><TD BGCOLOR=#251306>....</TD><TD BGCOLOR=#231208>....</TD><TD BGCOLOR=#210d01>....</TD><TD BGCOLOR=#361c0a>....</TD><TD BGCOLOR=#380b02>....</TD><TD BGCOLOR=#46180a>....</TD><TD BGCOLOR=#503c29>....</TD><TD BGCOLOR=#585944>....</TD><TD BGCOLOR=#655c47>....</TD><TD BGCOLOR=#6a5a3d>....</TD><TD BGCOLOR=#6b745d>....</TD><TD BGCOLOR=#6d6448>....</TD><TD BGCOLOR=#666653>....</TD><TD BGCOLOR=#655f4c>....</TD><TD BGCOLOR=#645f4b>....</TD><TD BGCOLOR=#67644f>....</TD><TD BGCOLOR=#5c5843>....</TD><TD BGCOLOR=#605537>....</TD><TD BGCOLOR=#58451e>....</TD><TD BGCOLOR=#543611>....</TD><TD BGCOLOR=#513412>....</TD><TD BGCOLOR=#52360f>....</TD><TD BGCOLOR=#5f380d>....</TD><TD BGCOLOR=#5c370b>....</TD><TD BGCOLOR=#5c3a17>....</TD><TD BGCOLOR=#5b340d>....</TD><TD BGCOLOR=#624615>....</TD><TD BGCOLOR=#917f61>....</TD><TD BGCOLOR=#b39b84>....</TD><TD BGCOLOR=#b9a683>....</TD><TD BGCOLOR=#a88f84>....</TD><TD BGCOLOR=#a78479>....</TD><TD BGCOLOR=#ceb9a9>....</TD><TD BGCOLOR=#d2ccc0>....</TD><TD BGCOLOR=#ccc2ba>....</TD><TD BGCOLOR=#4b2d26>....</TD><TD BGCOLOR=#5c3117>....</TD><TD BGCOLOR=#7b5332>....</TD><TD BGCOLOR=#946441>....</TD><TD BGCOLOR=#a46b49>....</TD><TD BGCOLOR=#a47155>....</TD><TD BGCOLOR=#a2684f>....</TD><TD BGCOLOR=#9c644a>....</TD><TD BGCOLOR=#a87458>....</TD><TD BGCOLOR=#b47d62>....</TD><TD BGCOLOR=#9d6a4b>....</TD><TD BGCOLOR=#a66e50>....</TD><TD BGCOLOR=#d69476>....</TD><TD BGCOLOR=#eea38b>....</TD><TD BGCOLOR=#fbbea8>....</TD><TD BGCOLOR=#fcbc99>....</TD><TD BGCOLOR=#fcab8e>....</TD><TD BGCOLOR=#faaa84>....</TD><TD BGCOLOR=#eba28a>....</TD><TD BGCOLOR=#e4a78b>....</TD><TD BGCOLOR=#df9f79>....</TD><TD BGCOLOR=#df9a77>....</TD><TD BGCOLOR=#d89877>....</TD><TD BGCOLOR=#c99773>....</TD><TD BGCOLOR=#947042>....</TD><TD BGCOLOR=#c78d7b>....</TD><TD BGCOLOR=#d1a388>....</TD><TD BGCOLOR=#de9974>....</TD><TD BGCOLOR=#cca987>....</TD><TD BGCOLOR=#a97b61>....</TD><TD BGCOLOR=#a34941>....</TD><TD BGCOLOR=#a54643>....</TD><TD BGCOLOR=#943c3c>....</TD><TD BGCOLOR=#812526>....</TD><TD BGCOLOR=#9a2f2a>....</TD><TD BGCOLOR=#922a25>....</TD><TD BGCOLOR=#9d373a>....</TD><TD BGCOLOR=#a33837>....</TD><TD BGCOLOR=#af3f39>....</TD><TD BGCOLOR=#a23b32>....</TD><TD BGCOLOR=#b63a37>....</TD><TD BGCOLOR=#a2322d>....</TD><TD BGCOLOR=#a43d3f>....</TD><TD BGCOLOR=#a44d3c>....</TD><TD BGCOLOR=#b9605f>....</TD><TD BGCOLOR=#d77f81>....</TD><TD BGCOLOR=#b65743>....</TD><TD BGCOLOR=#a73437>....</TD><TD BGCOLOR=#883128>....</TD><TD BGCOLOR=#6d1d17>....</TD><TD BGCOLOR=#966f61>....</TD><TD BGCOLOR=#c59685>....</TD><TD BGCOLOR=#daa89f>....</TD><TD BGCOLOR=#e8a6a0>....</TD><TD BGCOLOR=#e1ad99>....</TD><TD BGCOLOR=#dca68e>....</TD><TD BGCOLOR=#de9985>....</TD><TD BGCOLOR=#de9684>....</TD><TD BGCOLOR=#d99681>....</TD><TD BGCOLOR=#cb9079>....</TD><TD BGCOLOR=#be8b74>....</TD><TD BGCOLOR=#c38c77>....</TD><TD BGCOLOR=#c08b82>....</TD><TD BGCOLOR=#c68978>....</TD><TD BGCOLOR=#ca8b81>....</TD><TD BGCOLOR=#d38c7e>....</TD><TD BGCOLOR=#d39789>....</TD><TD BGCOLOR=#d69481>....</TD><TD BGCOLOR=#c17b60>....</TD><TD BGCOLOR=#ae6c53>....</TD></TR> <TR><TD BGCOLOR=#231507 COLSPAN=2>....</TD><TD BGCOLOR=#2c1004>....</TD><TD BGCOLOR=#2e1304>....</TD><TD BGCOLOR=#241802>....</TD><TD BGCOLOR=#271402>....</TD><TD BGCOLOR=#2b1002>....</TD><TD BGCOLOR=#2c1906>....</TD><TD BGCOLOR=#251704>....</TD><TD BGCOLOR=#2e1105>....</TD><TD BGCOLOR=#290a01>....</TD><TD BGCOLOR=#261309>....</TD><TD BGCOLOR=#1c1208>....</TD><TD BGCOLOR=#1f0a02>....</TD><TD BGCOLOR=#31170a>....</TD><TD BGCOLOR=#2b1104>....</TD><TD BGCOLOR=#3e1809>....</TD><TD BGCOLOR=#523d2b>....</TD><TD BGCOLOR=#5c5a43>....</TD><TD BGCOLOR=#605943>....</TD><TD BGCOLOR=#675d40>....</TD><TD BGCOLOR=#6e735d>....</TD><TD BGCOLOR=#6d634b>....</TD><TD BGCOLOR=#68674d>....</TD><TD BGCOLOR=#69604d>....</TD><TD BGCOLOR=#665d4a>....</TD><TD BGCOLOR=#6b6551>....</TD><TD BGCOLOR=#5b5842>....</TD><TD BGCOLOR=#5e4f34>....</TD><TD BGCOLOR=#583e1a>....</TD><TD BGCOLOR=#57320f>....</TD><TD BGCOLOR=#54320e>....</TD><TD BGCOLOR=#503809>....</TD><TD BGCOLOR=#5b3c0e>....</TD><TD BGCOLOR=#573408>....</TD><TD BGCOLOR=#5d3916>....</TD><TD BGCOLOR=#583110>....</TD><TD BGCOLOR=#6f532e>....</TD><TD BGCOLOR=#9c8770>....</TD><TD BGCOLOR=#b79d85>....</TD><TD BGCOLOR=#b0a485>....</TD><TD BGCOLOR=#998072>....</TD><TD BGCOLOR=#b49c93>....</TD><TD BGCOLOR=#dab7a6>....</TD><TD BGCOLOR=#ebcec8>....</TD><TD BGCOLOR=#dee9da>....</TD><TD BGCOLOR=#73483d>....</TD><TD BGCOLOR=#674a2f>....</TD><TD BGCOLOR=#693d21>....</TD><TD BGCOLOR=#845532>....</TD><TD BGCOLOR=#99724d>....</TD><TD BGCOLOR=#9e6d61>....</TD><TD BGCOLOR=#9a634e>....</TD><TD BGCOLOR=#8f5c3f>....</TD><TD BGCOLOR=#946b4b>....</TD><TD BGCOLOR=#a97d5b>....</TD><TD BGCOLOR=#a87953>....</TD><TD BGCOLOR=#a96e54>....</TD><TD BGCOLOR=#d2806a>....</TD><TD BGCOLOR=#eb9579>....</TD><TD BGCOLOR=#fbaa8d>....</TD><TD BGCOLOR=#fcb391>....</TD><TD BGCOLOR=#fdbda0>....</TD><TD BGCOLOR=#f7b692>....</TD><TD BGCOLOR=#f0ab87>....</TD><TD BGCOLOR=#d29278>....</TD><TD BGCOLOR=#c68d62>....</TD><TD BGCOLOR=#d2926c>....</TD><TD BGCOLOR=#dd9d7b>....</TD><TD BGCOLOR=#cc936c>....</TD><TD BGCOLOR=#ca8f61>....</TD><TD BGCOLOR=#e6a883>....</TD><TD BGCOLOR=#e09f7e>....</TD><TD BGCOLOR=#de9475>....</TD><TD BGCOLOR=#c6997a>....</TD><TD BGCOLOR=#a17a60>....</TD><TD BGCOLOR=#b97063>....</TD><TD BGCOLOR=#a1463a>....</TD><TD BGCOLOR=#9b473e>....</TD><TD BGCOLOR=#983038>....</TD><TD BGCOLOR=#ae3f38>....</TD><TD BGCOLOR=#ad3d2e>....</TD><TD BGCOLOR=#9f3838>....</TD><TD BGCOLOR=#a13c41>....</TD><TD BGCOLOR=#ad413d>....</TD><TD BGCOLOR=#b04435>....</TD><TD BGCOLOR=#b53b36>....</TD><TD BGCOLOR=#b53636>....</TD><TD BGCOLOR=#ad3a32>....</TD><TD BGCOLOR=#9c4230>....</TD><TD BGCOLOR=#a84b48>....</TD><TD BGCOLOR=#b64f50>....</TD><TD BGCOLOR=#b3493b>....</TD><TD BGCOLOR=#a23d34>....</TD><TD BGCOLOR=#a04034>....</TD><TD BGCOLOR=#782e23>....</TD><TD BGCOLOR=#865249>....</TD><TD BGCOLOR=#b48a72>....</TD><TD BGCOLOR=#d1a297>....</TD><TD BGCOLOR=#e7ad9f>....</TD><TD BGCOLOR=#e8a992>....</TD><TD BGCOLOR=#d69e8b>....</TD><TD BGCOLOR=#cf907f>....</TD><TD BGCOLOR=#c5816e>....</TD><TD BGCOLOR=#c38374>....</TD><TD BGCOLOR=#bd856e>....</TD><TD BGCOLOR=#c68c74>....</TD><TD BGCOLOR=#d59486>....</TD><TD BGCOLOR=#dd9c99>....</TD><TD BGCOLOR=#dda095>....</TD><TD BGCOLOR=#dfa18c>....</TD><TD BGCOLOR=#f2aa8c>....</TD><TD BGCOLOR=#f1ad95>....</TD><TD BGCOLOR=#f2a58b>....</TD><TD BGCOLOR=#e08f74>....</TD><TD BGCOLOR=#cb866d>....</TD></TR> <TR><TD BGCOLOR=#241307 COLSPAN=2>....</TD><TD BGCOLOR=#2c0f04>....</TD><TD BGCOLOR=#2e1404>....</TD><TD BGCOLOR=#261601>....</TD><TD BGCOLOR=#291302>....</TD><TD BGCOLOR=#2a0e00>....</TD><TD BGCOLOR=#301304>....</TD><TD BGCOLOR=#2c1304>....</TD><TD BGCOLOR=#2c1107>....</TD><TD BGCOLOR=#2a0d04>....</TD><TD BGCOLOR=#29120b>....</TD><TD BGCOLOR=#201109>....</TD><TD BGCOLOR=#220a03>....</TD><TD BGCOLOR=#2e150a>....</TD><TD BGCOLOR=#281104>....</TD><TD BGCOLOR=#462619>....</TD><TD BGCOLOR=#4f3c29>....</TD><TD BGCOLOR=#5e5b40>....</TD><TD BGCOLOR=#5f5940>....</TD><TD BGCOLOR=#635b3e>....</TD><TD BGCOLOR=#6e725d>....</TD><TD BGCOLOR=#695e48>....</TD><TD BGCOLOR=#666549>....</TD><TD BGCOLOR=#675c4a>....</TD><TD BGCOLOR=#675f4c>....</TD><TD BGCOLOR=#67624e>....</TD><TD BGCOLOR=#5e5843>....</TD><TD BGCOLOR=#5d4d33>....</TD><TD BGCOLOR=#593b1a>....</TD><TD BGCOLOR=#593310>....</TD><TD BGCOLOR=#51300a>....</TD><TD BGCOLOR=#513406>....</TD><TD BGCOLOR=#5d3d10>....</TD><TD BGCOLOR=#58360a>....</TD><TD BGCOLOR=#5b3913>....</TD><TD BGCOLOR=#543010>....</TD><TD BGCOLOR=#7b6242>....</TD><TD BGCOLOR=#a18d75>....</TD><TD BGCOLOR=#b69982>....</TD><TD BGCOLOR=#af9b81>....</TD><TD BGCOLOR=#97816e>....</TD><TD BGCOLOR=#baaa9b>....</TD><TD BGCOLOR=#debdaa>....</TD><TD BGCOLOR=#ecc6be>....</TD><TD BGCOLOR=#dde0cf>....</TD><TD BGCOLOR=#9f7e73>....</TD><TD BGCOLOR=#714c36>....</TD><TD BGCOLOR=#74462d>....</TD><TD BGCOLOR=#754626>....</TD><TD BGCOLOR=#8f6847>....</TD><TD BGCOLOR=#a5806e>....</TD><TD BGCOLOR=#9c6d53>....</TD><TD BGCOLOR=#905f42>....</TD><TD BGCOLOR=#8c6447>....</TD><TD BGCOLOR=#966d4d>....</TD><TD BGCOLOR=#a37653>....</TD><TD BGCOLOR=#a87154>....</TD><TD BGCOLOR=#c8775e>....</TD><TD BGCOLOR=#e59375>....</TD><TD BGCOLOR=#fdb393>....</TD><TD BGCOLOR=#fbbe9a>....</TD><TD BGCOLOR=#fbb99b>....</TD><TD BGCOLOR=#fab693>....</TD><TD BGCOLOR=#eba57d>....</TD><TD BGCOLOR=#e8a787>....</TD><TD BGCOLOR=#e3a87e>....</TD><TD BGCOLOR=#ecab85>....</TD><TD BGCOLOR=#e4a27a>....</TD><TD BGCOLOR=#e0a573>....</TD><TD BGCOLOR=#eda478>....</TD><TD BGCOLOR=#e9a87c>....</TD><TD BGCOLOR=#f3b48b>....</TD><TD BGCOLOR=#f4b38c>....</TD><TD BGCOLOR=#eab98f>....</TD><TD BGCOLOR=#dcbb94>....</TD><TD BGCOLOR=#d29f7f>....</TD><TD BGCOLOR=#97452f>....</TD><TD BGCOLOR=#ad4d45>....</TD><TD BGCOLOR=#aa5052>....</TD><TD BGCOLOR=#ad483f>....</TD><TD BGCOLOR=#b23c31>....</TD><TD BGCOLOR=#af4443>....</TD><TD BGCOLOR=#c7686a>....</TD><TD BGCOLOR=#ac584d>....</TD><TD BGCOLOR=#a85a46>....</TD><TD BGCOLOR=#ab4e44>....</TD><TD BGCOLOR=#a53b38>....</TD><TD BGCOLOR=#a7483c>....</TD><TD BGCOLOR=#9b3f2d>....</TD><TD BGCOLOR=#ab4845>....</TD><TD BGCOLOR=#b14949>....</TD><TD BGCOLOR=#a83b31>....</TD><TD BGCOLOR=#af4a42>....</TD><TD BGCOLOR=#82261d>....</TD><TD BGCOLOR=#a66a5d>....</TD><TD BGCOLOR=#996c5f>....</TD><TD BGCOLOR=#9b735e>....</TD><TD BGCOLOR=#ba8579>....</TD><TD BGCOLOR=#d79886>....</TD><TD BGCOLOR=#e59980>....</TD><TD BGCOLOR=#dc9a87>....</TD><TD BGCOLOR=#dd9a86>....</TD><TD BGCOLOR=#e39e87>....</TD><TD BGCOLOR=#e5a38c>....</TD><TD BGCOLOR=#f0b696>....</TD><TD BGCOLOR=#f7b79a>....</TD><TD BGCOLOR=#f9b6a2>....</TD><TD BGCOLOR=#f2b3a0>....</TD><TD BGCOLOR=#ecb39c>....</TD><TD BGCOLOR=#f0b69b>....</TD><TD BGCOLOR=#f4b498>....</TD><TD BGCOLOR=#edb099>....</TD><TD BGCOLOR=#f3ab93>....</TD><TD BGCOLOR=#e69d84>....</TD><TD BGCOLOR=#be816b>....</TD></TR> <TR><TD BGCOLOR=#260d03 COLSPAN=2>....</TD><TD BGCOLOR=#2b1004>....</TD><TD BGCOLOR=#2a0f01>....</TD><TD BGCOLOR=#2b1403>....</TD><TD BGCOLOR=#270f02>....</TD><TD BGCOLOR=#270e02>....</TD><TD BGCOLOR=#2d0e03>....</TD><TD BGCOLOR=#2f1005>....</TD><TD BGCOLOR=#281204>....</TD><TD BGCOLOR=#250e03>....</TD><TD BGCOLOR=#290e08>....</TD><TD BGCOLOR=#28100a>....</TD><TD BGCOLOR=#210601>....</TD><TD BGCOLOR=#2d160a>....</TD><TD BGCOLOR=#2d1206>....</TD><TD BGCOLOR=#462d25>....</TD><TD BGCOLOR=#4a3e2c>....</TD><TD BGCOLOR=#5d5838>....</TD><TD BGCOLOR=#5f5a3f>....</TD><TD BGCOLOR=#635c3f>....</TD><TD BGCOLOR=#6d715c>....</TD><TD BGCOLOR=#6b604a>....</TD><TD BGCOLOR=#67664a>....</TD><TD BGCOLOR=#6a5b4b>....</TD><TD BGCOLOR=#635e4a>....</TD><TD BGCOLOR=#63614c>....</TD><TD BGCOLOR=#5d5440>....</TD><TD BGCOLOR=#5e4b31>....</TD><TD BGCOLOR=#5b3617>....</TD><TD BGCOLOR=#54310d>....</TD><TD BGCOLOR=#4e310b>....</TD><TD BGCOLOR=#57310b>....</TD><TD BGCOLOR=#5b3710>....</TD><TD BGCOLOR=#56340c>....</TD><TD BGCOLOR=#5b3c15>....</TD><TD BGCOLOR=#563616>....</TD><TD BGCOLOR=#877155>....</TD><TD BGCOLOR=#a19178>....</TD><TD BGCOLOR=#ae977e>....</TD><TD BGCOLOR=#ac9079>....</TD><TD BGCOLOR=#a7927a>....</TD><TD BGCOLOR=#c6b19b>....</TD><TD BGCOLOR=#d6bda7>....</TD><TD BGCOLOR=#eec7b6>....</TD><TD BGCOLOR=#e5d1c2>....</TD><TD BGCOLOR=#bab2a9>....</TD><TD BGCOLOR=#683522>....</TD><TD BGCOLOR=#845f45>....</TD><TD BGCOLOR=#744f33>....</TD><TD BGCOLOR=#74452c>....</TD><TD BGCOLOR=#8f6b50>....</TD><TD BGCOLOR=#a77759>....</TD><TD BGCOLOR=#ab765a>....</TD><TD BGCOLOR=#8d6148>....</TD><TD BGCOLOR=#80543c>....</TD><TD BGCOLOR=#966a4f>....</TD><TD BGCOLOR=#ab7d5c>....</TD><TD BGCOLOR=#c07a5b>....</TD><TD BGCOLOR=#d98f70>....</TD><TD BGCOLOR=#f8ab8e>....</TD><TD BGCOLOR=#f9b394>....</TD><TD BGCOLOR=#f9ac91>....</TD><TD BGCOLOR=#f4a689>....</TD><TD BGCOLOR=#e49a7b>....</TD><TD BGCOLOR=#e0987a>....</TD><TD BGCOLOR=#e2a17b>....</TD><TD BGCOLOR=#eaa482>....</TD><TD BGCOLOR=#e8a17c>....</TD><TD BGCOLOR=#dfa170>....</TD><TD BGCOLOR=#ea9e7b>....</TD><TD BGCOLOR=#e6a37c>....</TD><TD BGCOLOR=#e5a67c>....</TD><TD BGCOLOR=#d7966b>....</TD><TD BGCOLOR=#d6a075>....</TD><TD BGCOLOR=#d8b48c>....</TD><TD BGCOLOR=#d2ac85>....</TD><TD BGCOLOR=#b26c4d>....</TD><TD BGCOLOR=#a84037>....</TD><TD BGCOLOR=#bb6763>....</TD><TD BGCOLOR=#ab4a43>....</TD><TD BGCOLOR=#b2433d>....</TD><TD BGCOLOR=#ae4543>....</TD><TD BGCOLOR=#a23e3d>....</TD><TD BGCOLOR=#b46a5d>....</TD><TD BGCOLOR=#b86459>....</TD><TD BGCOLOR=#b24641>....</TD><TD BGCOLOR=#ac3834>....</TD><TD BGCOLOR=#a63c38>....</TD><TD BGCOLOR=#a93a30>....</TD><TD BGCOLOR=#aa403f>....</TD><TD BGCOLOR=#b4484a>....</TD><TD BGCOLOR=#b34138>....</TD><TD BGCOLOR=#a64541>....</TD><TD BGCOLOR=#7e2f2a>....</TD><TD BGCOLOR=#9a6d5e>....</TD><TD BGCOLOR=#ad8773>....</TD><TD BGCOLOR=#a06f5c>....</TD><TD BGCOLOR=#b37165>....</TD><TD BGCOLOR=#d79182>....</TD><TD BGCOLOR=#f1a793>....</TD><TD BGCOLOR=#fabca6>....</TD><TD BGCOLOR=#fdc2ab>....</TD><TD BGCOLOR=#fcc4a7>....</TD><TD BGCOLOR=#fcc2a8>....</TD><TD BGCOLOR=#fcc1a5>....</TD><TD BGCOLOR=#fabda4>....</TD><TD BGCOLOR=#f4b99f>....</TD><TD BGCOLOR=#f4bd9d>....</TD><TD BGCOLOR=#f4be9f>....</TD><TD BGCOLOR=#e9b29b>....</TD><TD BGCOLOR=#e7b3a2>....</TD><TD BGCOLOR=#e4b2a0>....</TD><TD BGCOLOR=#e8ab96>....</TD><TD BGCOLOR=#d2937e>....</TD><TD BGCOLOR=#a16e5c>....</TD></TR> <TR><TD BGCOLOR=#290b03 COLSPAN=2>....</TD><TD BGCOLOR=#2b1004>....</TD><TD BGCOLOR=#2b1002>....</TD><TD BGCOLOR=#2c1002>....</TD><TD BGCOLOR=#290d04>....</TD><TD BGCOLOR=#211004>....</TD><TD BGCOLOR=#231205>....</TD><TD BGCOLOR=#270f03>....</TD><TD BGCOLOR=#271304>....</TD><TD BGCOLOR=#210f02>....</TD><TD BGCOLOR=#290c07>....</TD><TD BGCOLOR=#2d0c0a>....</TD><TD BGCOLOR=#210401>....</TD><TD BGCOLOR=#2b1509>....</TD><TD BGCOLOR=#321309>....</TD><TD BGCOLOR=#48322e>....</TD><TD BGCOLOR=#473f2d>....</TD><TD BGCOLOR=#5f5935>....</TD><TD BGCOLOR=#615d3f>....</TD><TD BGCOLOR=#615a3d>....</TD><TD BGCOLOR=#6b6f5a>....</TD><TD BGCOLOR=#6a6049>....</TD><TD BGCOLOR=#68664a>....</TD><TD BGCOLOR=#6d5b4b>....</TD><TD BGCOLOR=#615f4a>....</TD><TD BGCOLOR=#5e5e48>....</TD><TD BGCOLOR=#5d513e>....</TD><TD BGCOLOR=#5b462d>....</TD><TD BGCOLOR=#592f12>....</TD><TD BGCOLOR=#54320d>....</TD><TD BGCOLOR=#4e340d>....</TD><TD BGCOLOR=#5a2f0d>....</TD><TD BGCOLOR=#5a3310>....</TD><TD BGCOLOR=#56330e>....</TD><TD BGCOLOR=#593c14>....</TD><TD BGCOLOR=#553716>....</TD><TD BGCOLOR=#8b765e>....</TD><TD BGCOLOR=#9d8f74>....</TD><TD BGCOLOR=#a19579>....</TD><TD BGCOLOR=#b0957e>....</TD><TD BGCOLOR=#b7a085>....</TD><TD BGCOLOR=#ceac93>....</TD><TD BGCOLOR=#cfb8a2>....</TD><TD BGCOLOR=#e9c0aa>....</TD><TD BGCOLOR=#edc6b9>....</TD><TD BGCOLOR=#cad4cd>....</TD><TD BGCOLOR=#673220>....</TD><TD BGCOLOR=#6d5436>....</TD><TD BGCOLOR=#866f52>....</TD><TD BGCOLOR=#905f4a>....</TD><TD BGCOLOR=#7b482c>....</TD><TD BGCOLOR=#985e41>....</TD><TD BGCOLOR=#ab7359>....</TD><TD BGCOLOR=#a0735c>....</TD><TD BGCOLOR=#825542>....</TD><TD BGCOLOR=#7a503b>....</TD><TD BGCOLOR=#a17956>....</TD><TD BGCOLOR=#bd825f>....</TD><TD BGCOLOR=#c68265>....</TD><TD BGCOLOR=#e7917a>....</TD><TD BGCOLOR=#f29581>....</TD><TD BGCOLOR=#eb9481>....</TD><TD BGCOLOR=#d48573>....</TD><TD BGCOLOR=#ce7f6d>....</TD><TD BGCOLOR=#d9806f>....</TD><TD BGCOLOR=#dc9573>....</TD><TD BGCOLOR=#dc9377>....</TD><TD BGCOLOR=#e29880>....</TD><TD BGCOLOR=#d59274>....</TD><TD BGCOLOR=#d28c74>....</TD><TD BGCOLOR=#e09e82>....</TD><TD BGCOLOR=#d5906f>....</TD><TD BGCOLOR=#d9906f>....</TD><TD BGCOLOR=#d2977a>....</TD><TD BGCOLOR=#d1a48b>....</TD><TD BGCOLOR=#cda088>....</TD><TD BGCOLOR=#b2735b>....</TD><TD BGCOLOR=#ab4a3d>....</TD><TD BGCOLOR=#a23a36>....</TD><TD BGCOLOR=#a23d3a>....</TD><TD BGCOLOR=#9e3f3b>....</TD><TD BGCOLOR=#ae4d48>....</TD><TD BGCOLOR=#a63836>....</TD><TD BGCOLOR=#a0453f>....</TD><TD BGCOLOR=#b24c47>....</TD><TD BGCOLOR=#b53d34>....</TD><TD BGCOLOR=#ab3729>....</TD><TD BGCOLOR=#9d3b30>....</TD><TD BGCOLOR=#ae3b32>....</TD><TD BGCOLOR=#a03635>....</TD><TD BGCOLOR=#b14c4b>....</TD><TD BGCOLOR=#a93a32>....</TD><TD BGCOLOR=#a04d49>....</TD><TD BGCOLOR=#72302e>....</TD><TD BGCOLOR=#8c6356>....</TD><TD BGCOLOR=#a27860>....</TD><TD BGCOLOR=#9a5b42>....</TD><TD BGCOLOR=#ca7f70>....</TD><TD BGCOLOR=#f0aca3>....</TD><TD BGCOLOR=#f3aca5>....</TD><TD BGCOLOR=#fdb8ac>....</TD><TD BGCOLOR=#f7b6a8>....</TD><TD BGCOLOR=#fbc0ab>....</TD><TD BGCOLOR=#fabfb5>....</TD><TD BGCOLOR=#ebaea9>....</TD><TD BGCOLOR=#e7b0a8>....</TD><TD BGCOLOR=#ddae94>....</TD><TD BGCOLOR=#ce9e80>....</TD><TD BGCOLOR=#d29c86>....</TD><TD BGCOLOR=#d6a193>....</TD><TD BGCOLOR=#c99f93>....</TD><TD BGCOLOR=#c49b8d>....</TD><TD BGCOLOR=#bd8876>....</TD><TD BGCOLOR=#a36c5a>....</TD><TD BGCOLOR=#7f5545>....</TD></TR> <TR><TD BGCOLOR=#280d04 COLSPAN=2>....</TD><TD BGCOLOR=#2e1005>....</TD><TD BGCOLOR=#2c0d08>....</TD><TD BGCOLOR=#221411>....</TD><TD BGCOLOR=#250f05>....</TD><TD BGCOLOR=#210f03>....</TD><TD BGCOLOR=#2b1107>....</TD><TD BGCOLOR=#300b05>....</TD><TD BGCOLOR=#250d03>....</TD><TD BGCOLOR=#250f05>....</TD><TD BGCOLOR=#2b0f06>....</TD><TD BGCOLOR=#260f09>....</TD><TD BGCOLOR=#1f0604>....</TD><TD BGCOLOR=#291b11>....</TD><TD BGCOLOR=#320d08>....</TD><TD BGCOLOR=#584542>....</TD><TD BGCOLOR=#434331>....</TD><TD BGCOLOR=#625738>....</TD><TD BGCOLOR=#615b39>....</TD><TD BGCOLOR=#665944>....</TD><TD BGCOLOR=#6d6f5b>....</TD><TD BGCOLOR=#656243>....</TD><TD BGCOLOR=#6d6247>....</TD><TD BGCOLOR=#6a5b47>....</TD><TD BGCOLOR=#5f5e4b>....</TD><TD BGCOLOR=#5f5e4a>....</TD><TD BGCOLOR=#594e39>....</TD><TD BGCOLOR=#584531>....</TD><TD BGCOLOR=#573116>....</TD><TD BGCOLOR=#55310f>....</TD><TD BGCOLOR=#4e3310>....</TD><TD BGCOLOR=#4d3511>....</TD><TD BGCOLOR=#563916>....</TD><TD BGCOLOR=#553312>....</TD><TD BGCOLOR=#603913>....</TD><TD BGCOLOR=#5c391e>....</TD><TD BGCOLOR=#8d7669>....</TD><TD BGCOLOR=#a08973>....</TD><TD BGCOLOR=#aa9475>....</TD><TD BGCOLOR=#b19c7f>....</TD><TD BGCOLOR=#b8a68c>....</TD><TD BGCOLOR=#caaf99>....</TD><TD BGCOLOR=#dab9a8>....</TD><TD BGCOLOR=#e9bba6>....</TD><TD BGCOLOR=#f6c8b6>....</TD><TD BGCOLOR=#e0d5c7>....</TD><TD BGCOLOR=#703f3d>....</TD><TD BGCOLOR=#654024>....</TD><TD BGCOLOR=#8b6a43>....</TD><TD BGCOLOR=#966f50>....</TD><TD BGCOLOR=#966d4f>....</TD><TD BGCOLOR=#9a634e>....</TD><TD BGCOLOR=#946251>....</TD><TD BGCOLOR=#957058>....</TD><TD BGCOLOR=#815a39>....</TD><TD BGCOLOR=#8b5e42>....</TD><TD BGCOLOR=#95664d>....</TD><TD BGCOLOR=#b17e61>....</TD><TD BGCOLOR=#b87d61>....</TD><TD BGCOLOR=#c17d68>....</TD><TD BGCOLOR=#cc8774>....</TD><TD BGCOLOR=#c6856f>....</TD><TD BGCOLOR=#c6836e>....</TD><TD BGCOLOR=#d88f7a>....</TD><TD BGCOLOR=#e79883>....</TD><TD BGCOLOR=#e29f7a>....</TD><TD BGCOLOR=#de9c7a>....</TD><TD BGCOLOR=#da9877>....</TD><TD BGCOLOR=#d08f69>....</TD><TD BGCOLOR=#d49173>....</TD><TD BGCOLOR=#d89477>....</TD><TD BGCOLOR=#c7896b>....</TD><TD BGCOLOR=#c59070>....</TD><TD BGCOLOR=#c48c72>....</TD><TD BGCOLOR=#ca9e8c>....</TD><TD BGCOLOR=#c09684>....</TD><TD BGCOLOR=#a05553>....</TD><TD BGCOLOR=#973940>....</TD><TD BGCOLOR=#a63d31>....</TD><TD BGCOLOR=#9f3730>....</TD><TD BGCOLOR=#a13439>....</TD><TD BGCOLOR=#a34334>....</TD><TD BGCOLOR=#a45045>....</TD><TD BGCOLOR=#c7786d>....</TD><TD BGCOLOR=#bd6361>....</TD><TD BGCOLOR=#b03f35>....</TD><TD BGCOLOR=#9d3728>....</TD><TD BGCOLOR=#993c3a>....</TD><TD BGCOLOR=#ad3630>....</TD><TD BGCOLOR=#a53b33>....</TD><TD BGCOLOR=#b1625b>....</TD><TD BGCOLOR=#b25a5e>....</TD><TD BGCOLOR=#ad5e62>....</TD><TD BGCOLOR=#864243>....</TD><TD BGCOLOR=#824e4a>....</TD><TD BGCOLOR=#8b7360>....</TD><TD BGCOLOR=#8e5e45>....</TD><TD BGCOLOR=#bc806d>....</TD><TD BGCOLOR=#f3c2b1>....</TD><TD BGCOLOR=#edb1a7>....</TD><TD BGCOLOR=#f2b5b3>....</TD><TD BGCOLOR=#edb5b2>....</TD><TD BGCOLOR=#e5b1a3>....</TD><TD BGCOLOR=#e3ae98>....</TD><TD BGCOLOR=#dca99a>....</TD><TD BGCOLOR=#d2a29b>....</TD><TD BGCOLOR=#be8c78>....</TD><TD BGCOLOR=#c19079>....</TD><TD BGCOLOR=#c39588>....</TD><TD BGCOLOR=#c29791>....</TD><TD BGCOLOR=#b18a82>....</TD><TD BGCOLOR=#95746c>....</TD><TD BGCOLOR=#875e58>....</TD><TD BGCOLOR=#804c49>....</TD><TD BGCOLOR=#76554d>....</TD></TR> <TR><TD BGCOLOR=#260d04 COLSPAN=2>....</TD><TD BGCOLOR=#2a0b02>....</TD><TD BGCOLOR=#2c0905>....</TD><TD BGCOLOR=#211109>....</TD><TD BGCOLOR=#200c02>....</TD><TD BGCOLOR=#210d02>....</TD><TD BGCOLOR=#2c150b>....</TD><TD BGCOLOR=#2c0c05>....</TD><TD BGCOLOR=#250d03>....</TD><TD BGCOLOR=#250e05>....</TD><TD BGCOLOR=#2b0f06>....</TD><TD BGCOLOR=#210d06>....</TD><TD BGCOLOR=#210704>....</TD><TD BGCOLOR=#322118>....</TD><TD BGCOLOR=#310c06>....</TD><TD BGCOLOR=#46302d>....</TD><TD BGCOLOR=#434336>....</TD><TD BGCOLOR=#605742>....</TD><TD BGCOLOR=#5e583e>....</TD><TD BGCOLOR=#665842>....</TD><TD BGCOLOR=#6e6f5a>....</TD><TD BGCOLOR=#666345>....</TD><TD BGCOLOR=#70644c>....</TD><TD BGCOLOR=#655e45>....</TD><TD BGCOLOR=#5b6049>....</TD><TD BGCOLOR=#5b5d46>....</TD><TD BGCOLOR=#564b33>....</TD><TD BGCOLOR=#554229>....</TD><TD BGCOLOR=#533213>....</TD><TD BGCOLOR=#53300e>....</TD><TD BGCOLOR=#513312>....</TD><TD BGCOLOR=#4c3611>....</TD><TD BGCOLOR=#563b18>....</TD><TD BGCOLOR=#543212>....</TD><TD BGCOLOR=#5c3912>....</TD><TD BGCOLOR=#604628>....</TD><TD BGCOLOR=#8b7569>....</TD><TD BGCOLOR=#a28672>....</TD><TD BGCOLOR=#b29175>....</TD><TD BGCOLOR=#bb9d83>....</TD><TD BGCOLOR=#c0a48d>....</TD><TD BGCOLOR=#cdaa97>....</TD><TD BGCOLOR=#d8b4a5>....</TD><TD BGCOLOR=#eabca7>....</TD><TD BGCOLOR=#f4c5b2>....</TD><TD BGCOLOR=#eadccd>....</TD><TD BGCOLOR=#774944>....</TD><TD BGCOLOR=#664129>....</TD><TD BGCOLOR=#856442>....</TD><TD BGCOLOR=#926d51>....</TD><TD BGCOLOR=#976e52>....</TD><TD BGCOLOR=#a6725c>....</TD><TD BGCOLOR=#9d6d57>....</TD><TD BGCOLOR=#8b654e>....</TD><TD BGCOLOR=#825f49>....</TD><TD BGCOLOR=#8d6950>....</TD><TD BGCOLOR=#9e755a>....</TD><TD BGCOLOR=#a3745a>....</TD><TD BGCOLOR=#b57b63>....</TD><TD BGCOLOR=#be7c61>....</TD><TD BGCOLOR=#be8063>....</TD><TD BGCOLOR=#d29673>....</TD><TD BGCOLOR=#dd9f7c>....</TD><TD BGCOLOR=#e5a786>....</TD><TD BGCOLOR=#d69879>....</TD><TD BGCOLOR=#c48862>....</TD><TD BGCOLOR=#c78a6a>....</TD><TD BGCOLOR=#cf9273>....</TD><TD BGCOLOR=#cb8f69>....</TD><TD BGCOLOR=#cd8967>....</TD><TD BGCOLOR=#d0886c>....</TD><TD BGCOLOR=#c98970>....</TD><TD BGCOLOR=#c59075>....</TD><TD BGCOLOR=#c38a6c>....</TD><TD BGCOLOR=#c49980>....</TD><TD BGCOLOR=#ac8774>....</TD><TD BGCOLOR=#c28580>....</TD><TD BGCOLOR=#b56c6b>....</TD><TD BGCOLOR=#a5332d>....</TD><TD BGCOLOR=#aa3938>....</TD><TD BGCOLOR=#9f333b>....</TD><TD BGCOLOR=#9d4235>....</TD><TD BGCOLOR=#9e4a44>....</TD><TD BGCOLOR=#b35c58>....</TD><TD BGCOLOR=#a55453>....</TD><TD BGCOLOR=#a7453d>....</TD><TD BGCOLOR=#a65044>....</TD><TD BGCOLOR=#a25452>....</TD><TD BGCOLOR=#a1504b>....</TD><TD BGCOLOR=#9e5552>....</TD><TD BGCOLOR=#a97570>....</TD><TD BGCOLOR=#a26866>....</TD><TD BGCOLOR=#9b6360>....</TD><TD BGCOLOR=#965c5a>....</TD><TD BGCOLOR=#773f3c>....</TD><TD BGCOLOR=#866759>....</TD><TD BGCOLOR=#7f5b40>....</TD><TD BGCOLOR=#9d6e59>....</TD><TD BGCOLOR=#d3aa97>....</TD><TD BGCOLOR=#d2a596>....</TD><TD BGCOLOR=#d3a69c>....</TD><TD BGCOLOR=#d2a8a1>....</TD><TD BGCOLOR=#c8a293>....</TD><TD BGCOLOR=#c59d87>....</TD><TD BGCOLOR=#bd9382>....</TD><TD BGCOLOR=#b0887d>....</TD><TD BGCOLOR=#ab7f6d>....</TD><TD BGCOLOR=#a98470>....</TD><TD BGCOLOR=#a7847a>....</TD><TD BGCOLOR=#9c7672>....</TD><TD BGCOLOR=#906961>....</TD><TD BGCOLOR=#836155>....</TD><TD BGCOLOR=#785248>....</TD><TD BGCOLOR=#98635e>....</TD><TD BGCOLOR=#986f66>....</TD></TR> <TR><TD BGCOLOR=#230d00 COLSPAN=2>....</TD><TD BGCOLOR=#2a0903>....</TD><TD BGCOLOR=#320903>....</TD><TD BGCOLOR=#291303>....</TD><TD BGCOLOR=#241006>....</TD><TD BGCOLOR=#250f05>....</TD><TD BGCOLOR=#271509>....</TD><TD BGCOLOR=#251005>....</TD><TD BGCOLOR=#281006>....</TD><TD BGCOLOR=#230c03>....</TD><TD BGCOLOR=#280c04>....</TD><TD BGCOLOR=#1e0d04>....</TD><TD BGCOLOR=#220704>....</TD><TD BGCOLOR=#2a140c>....</TD><TD BGCOLOR=#300d06>....</TD><TD BGCOLOR=#391e16>....</TD><TD BGCOLOR=#494839>....</TD><TD BGCOLOR=#5b5745>....</TD><TD BGCOLOR=#5a573e>....</TD><TD BGCOLOR=#65593e>....</TD><TD BGCOLOR=#70725a>....</TD><TD BGCOLOR=#636044>....</TD><TD BGCOLOR=#6c604e>....</TD><TD BGCOLOR=#646043>....</TD><TD BGCOLOR=#5f6249>....</TD><TD BGCOLOR=#5f5a42>....</TD><TD BGCOLOR=#5d492f>....</TD><TD BGCOLOR=#584423>....</TD><TD BGCOLOR=#4f340f>....</TD><TD BGCOLOR=#53310f>....</TD><TD BGCOLOR=#533113>....</TD><TD BGCOLOR=#4e3814>....</TD><TD BGCOLOR=#573c19>....</TD><TD BGCOLOR=#502e0e>....</TD><TD BGCOLOR=#5d3b14>....</TD><TD BGCOLOR=#604a2a>....</TD><TD BGCOLOR=#8a786b>....</TD><TD BGCOLOR=#a18873>....</TD><TD BGCOLOR=#b69579>....</TD><TD BGCOLOR=#c2a188>....</TD><TD BGCOLOR=#c3a58f>....</TD><TD BGCOLOR=#d0aa99>....</TD><TD BGCOLOR=#d5b1a2>....</TD><TD BGCOLOR=#e8b9a4>....</TD><TD BGCOLOR=#f3c4b1>....</TD><TD BGCOLOR=#e4d7c7>....</TD><TD BGCOLOR=#6e4539>....</TD><TD BGCOLOR=#694733>....</TD><TD BGCOLOR=#6a4b33>....</TD><TD BGCOLOR=#97725a>....</TD><TD BGCOLOR=#9e7259>....</TD><TD BGCOLOR=#ae8065>....</TD><TD BGCOLOR=#a07355>....</TD><TD BGCOLOR=#966c50>....</TD><TD BGCOLOR=#846049>....</TD><TD BGCOLOR=#83654a>....</TD><TD BGCOLOR=#886045>....</TD><TD BGCOLOR=#b07d65>....</TD><TD BGCOLOR=#ca896e>....</TD><TD BGCOLOR=#da8b6c>....</TD><TD BGCOLOR=#e09c7e>....</TD><TD BGCOLOR=#dd9278>....</TD><TD BGCOLOR=#e39176>....</TD><TD BGCOLOR=#db896b>....</TD><TD BGCOLOR=#cf7e5d>....</TD><TD BGCOLOR=#cd8a62>....</TD><TD BGCOLOR=#ca8866>....</TD><TD BGCOLOR=#e4a483>....</TD><TD BGCOLOR=#d08f68>....</TD><TD BGCOLOR=#d88f6e>....</TD><TD BGCOLOR=#da9070>....</TD><TD BGCOLOR=#d89673>....</TD><TD BGCOLOR=#cb916c>....</TD><TD BGCOLOR=#ca8564>....</TD><TD BGCOLOR=#ae7c5b>....</TD><TD BGCOLOR=#a8806b>....</TD><TD BGCOLOR=#b16365>....</TD><TD BGCOLOR=#bb5155>....</TD><TD BGCOLOR=#b54644>....</TD><TD BGCOLOR=#b7615b>....</TD><TD BGCOLOR=#a9585a>....</TD><TD BGCOLOR=#c2786c>....</TD><TD BGCOLOR=#a15351>....</TD><TD BGCOLOR=#b85e62>....</TD><TD BGCOLOR=#b26c6b>....</TD><TD BGCOLOR=#c0736d>....</TD><TD BGCOLOR=#ba7971>....</TD><TD BGCOLOR=#a36b66>....</TD><TD BGCOLOR=#a56869>....</TD><TD BGCOLOR=#ad6a74>....</TD><TD BGCOLOR=#a2696d>....</TD><TD BGCOLOR=#a2675d>....</TD><TD BGCOLOR=#9d776e>....</TD><TD BGCOLOR=#92645e>....</TD><TD BGCOLOR=#87514e>....</TD><TD BGCOLOR=#7d5c4f>....</TD><TD BGCOLOR=#7f6248>....</TD><TD BGCOLOR=#845b48>....</TD><TD BGCOLOR=#b4907f>....</TD><TD BGCOLOR=#bd9887>....</TD><TD BGCOLOR=#c09f8c>....</TD><TD BGCOLOR=#b6978c>....</TD><TD BGCOLOR=#b09486>....</TD><TD BGCOLOR=#9e7e6d>....</TD><TD BGCOLOR=#967664>....</TD><TD BGCOLOR=#9b7e6d>....</TD><TD BGCOLOR=#997866>....</TD><TD BGCOLOR=#896f5c>....</TD><TD BGCOLOR=#8b7063>....</TD><TD BGCOLOR=#aa827a>....</TD><TD BGCOLOR=#b68577>....</TD><TD BGCOLOR=#b1796d>....</TD><TD BGCOLOR=#a86e63>....</TD><TD BGCOLOR=#c67974>....</TD><TD BGCOLOR=#c87b77>....</TD></TR> <TR><TD BGCOLOR=#241002 COLSPAN=2>....</TD><TD BGCOLOR=#2b0b05>....</TD><TD BGCOLOR=#320901>....</TD><TD BGCOLOR=#2d1400>....</TD><TD BGCOLOR=#1f0c03>....</TD><TD BGCOLOR=#250e04>....</TD><TD BGCOLOR=#271408>....</TD><TD BGCOLOR=#231004>....</TD><TD BGCOLOR=#230c02>....</TD><TD BGCOLOR=#250f05>....</TD><TD BGCOLOR=#270c04>....</TD><TD BGCOLOR=#1e0e06>....</TD><TD BGCOLOR=#230905>....</TD><TD BGCOLOR=#290f09>....</TD><TD BGCOLOR=#2e0b05>....</TD><TD BGCOLOR=#391b0b>....</TD><TD BGCOLOR=#4c4733>....</TD><TD BGCOLOR=#585842>....</TD><TD BGCOLOR=#5a583a>....</TD><TD BGCOLOR=#665b3e>....</TD><TD BGCOLOR=#6d7056>....</TD><TD BGCOLOR=#646047>....</TD><TD BGCOLOR=#6b6050>....</TD><TD BGCOLOR=#675e42>....</TD><TD BGCOLOR=#636047>....</TD><TD BGCOLOR=#655741>....</TD><TD BGCOLOR=#63452c>....</TD><TD BGCOLOR=#59431e>....</TD><TD BGCOLOR=#4e360c>....</TD><TD BGCOLOR=#523110>....</TD><TD BGCOLOR=#533113>....</TD><TD BGCOLOR=#4e3710>....</TD><TD BGCOLOR=#533814>....</TD><TD BGCOLOR=#502e0e>....</TD><TD BGCOLOR=#5c3611>....</TD><TD BGCOLOR=#674e32>....</TD><TD BGCOLOR=#887a6b>....</TD><TD BGCOLOR=#9d8d75>....</TD><TD BGCOLOR=#b2977a>....</TD><TD BGCOLOR=#c0a38a>....</TD><TD BGCOLOR=#c1a68e>....</TD><TD BGCOLOR=#cba995>....</TD><TD BGCOLOR=#d4b2a3>....</TD><TD BGCOLOR=#e6b7a3>....</TD><TD BGCOLOR=#ebbca9>....</TD><TD BGCOLOR=#cdc0b0>....</TD><TD BGCOLOR=#6e4836>....</TD><TD BGCOLOR=#785948>....</TD><TD BGCOLOR=#634530>....</TD><TD BGCOLOR=#7e5a43>....</TD><TD BGCOLOR=#92684f>....</TD><TD BGCOLOR=#a57b5c>....</TD><TD BGCOLOR=#ad815f>....</TD><TD BGCOLOR=#ad805c>....</TD><TD BGCOLOR=#a57c5a>....</TD><TD BGCOLOR=#8d6a49>....</TD><TD BGCOLOR=#926349>....</TD><TD BGCOLOR=#b67b64>....</TD><TD BGCOLOR=#d58b6d>....</TD><TD BGCOLOR=#f69d7f>....</TD><TD BGCOLOR=#f8ab95>....</TD><TD BGCOLOR=#f7cbb7>....</TD><TD BGCOLOR=#e9c3a6>....</TD><TD BGCOLOR=#e9b991>....</TD><TD BGCOLOR=#e6ac7b>....</TD><TD BGCOLOR=#e4a476>....</TD><TD BGCOLOR=#eaa781>....</TD><TD BGCOLOR=#eaa37c>....</TD><TD BGCOLOR=#f2ab7f>....</TD><TD BGCOLOR=#fab191>....</TD><TD BGCOLOR=#feb893>....</TD><TD BGCOLOR=#f9bd8c>....</TD><TD BGCOLOR=#f3be88>....</TD><TD BGCOLOR=#faaa8b>....</TD><TD BGCOLOR=#e5a482>....</TD><TD BGCOLOR=#ba846f>....</TD><TD BGCOLOR=#ba696a>....</TD><TD BGCOLOR=#b45f5a>....</TD><TD BGCOLOR=#a96459>....</TD><TD BGCOLOR=#a9675f>....</TD><TD BGCOLOR=#af696a>....</TD><TD BGCOLOR=#a86f65>....</TD><TD BGCOLOR=#ac6c6b>....</TD><TD BGCOLOR=#b9696f>....</TD><TD BGCOLOR=#b47a77>....</TD><TD BGCOLOR=#c07f7a>....</TD><TD BGCOLOR=#b67e79>....</TD><TD BGCOLOR=#9e716b>....</TD><TD BGCOLOR=#ae8a85>....</TD><TD BGCOLOR=#ad8083>....</TD><TD BGCOLOR=#b08680>....</TD><TD BGCOLOR=#ab8065>....</TD><TD BGCOLOR=#a27f6f>....</TD><TD BGCOLOR=#a87d72>....</TD><TD BGCOLOR=#a87670>....</TD><TD BGCOLOR=#947466>....</TD><TD BGCOLOR=#8d6d54>....</TD><TD BGCOLOR=#8b6351>....</TD><TD BGCOLOR=#886455>....</TD><TD BGCOLOR=#946f5f>....</TD><TD BGCOLOR=#977864>....</TD><TD BGCOLOR=#987a6e>....</TD><TD BGCOLOR=#967a6d>....</TD><TD BGCOLOR=#967a6a>....</TD><TD BGCOLOR=#987c6b>....</TD><TD BGCOLOR=#97806a>....</TD><TD BGCOLOR=#a48876>....</TD><TD BGCOLOR=#af957f>....</TD><TD BGCOLOR=#c2a38e>....</TD><TD BGCOLOR=#c79684>....</TD><TD BGCOLOR=#c3866f>....</TD><TD BGCOLOR=#aa7b67>....</TD><TD BGCOLOR=#a8806c>....</TD><TD BGCOLOR=#b6786a>....</TD><TD BGCOLOR=#c88176>....</TD></TR> </TABLE><TABLE CELLPADDING=0 CELLSPACING=0 BORDER=0> <TR><TD BGCOLOR=#200d00>....</TD><TD BGCOLOR=#200d00>....</TD><TD BGCOLOR=#200d00>....</TD><TD BGCOLOR=#241001>....</TD><TD BGCOLOR=#241304>....</TD><TD BGCOLOR=#201202>....</TD><TD BGCOLOR=#250d01>....</TD><TD BGCOLOR=#2e0c02>....</TD><TD BGCOLOR=#2d0b02>....</TD><TD BGCOLOR=#240e01>....</TD><TD BGCOLOR=#230d03>....</TD><TD BGCOLOR=#230c06>....</TD><TD BGCOLOR=#230b07>....</TD><TD BGCOLOR=#1d0603>....</TD><TD BGCOLOR=#280f08>....</TD><TD BGCOLOR=#310c07>....</TD><TD BGCOLOR=#3d0e06>....</TD><TD BGCOLOR=#544234>....</TD><TD BGCOLOR=#595539>....</TD><TD BGCOLOR=#61553a>....</TD><TD BGCOLOR=#645946>....</TD><TD BGCOLOR=#696d56>....</TD><TD BGCOLOR=#685d4b>....</TD><TD BGCOLOR=#64624d>....</TD><TD BGCOLOR=#635c46>....</TD><TD BGCOLOR=#5b614a>....</TD><TD BGCOLOR=#5b573f>....</TD><TD BGCOLOR=#5a4127>....</TD><TD BGCOLOR=#583e1c>....</TD><TD BGCOLOR=#52330a>....</TD><TD BGCOLOR=#4e3010>....</TD><TD BGCOLOR=#4e3509>....</TD><TD BGCOLOR=#543704>....</TD><TD BGCOLOR=#573711>....</TD><TD BGCOLOR=#502f0e>....</TD><TD BGCOLOR=#5b340e>....</TD><TD BGCOLOR=#695441>....</TD><TD BGCOLOR=#827d6c>....</TD><TD BGCOLOR=#a68d75>....</TD><TD BGCOLOR=#b1947f>....</TD><TD BGCOLOR=#ba9d8c>....</TD><TD BGCOLOR=#c0a288>....</TD><TD BGCOLOR=#cdab92>....</TD><TD BGCOLOR=#ceb1a2>....</TD><TD BGCOLOR=#dfac9c>....</TD><TD BGCOLOR=#e7b7a7>....</TD><TD BGCOLOR=#b8aa9c>....</TD><TD BGCOLOR=#795239>....</TD><TD BGCOLOR=#886c61>....</TD><TD BGCOLOR=#7d5a49>....</TD><TD BGCOLOR=#6e4e36>....</TD><TD BGCOLOR=#86694a>....</TD><TD BGCOLOR=#966845>....</TD><TD BGCOLOR=#a27055>....</TD><TD BGCOLOR=#9e7856>....</TD><TD BGCOLOR=#977652>....</TD><TD BGCOLOR=#9c7352>....</TD><TD BGCOLOR=#956345>....</TD><TD BGCOLOR=#a67054>....</TD><TD BGCOLOR=#c38469>....</TD><TD BGCOLOR=#eb9f86>....</TD><TD BGCOLOR=#f2a489>....</TD><TD BGCOLOR=#f4b99f>....</TD><TD BGCOLOR=#f8dbb9>....</TD><TD BGCOLOR=#f6c59e>....</TD><TD BGCOLOR=#efa473>....</TD><TD BGCOLOR=#e3c19c>....</TD><TD BGCOLOR=#e8c1a6>....</TD><TD BGCOLOR=#efb18e>....</TD><TD BGCOLOR=#ebad89>....</TD><TD BGCOLOR=#efb797>....</TD><TD BGCOLOR=#fab99f>....</TD><TD BGCOLOR=#e5c5a5>....</TD><TD BGCOLOR=#e2d0ac>....</TD><TD BGCOLOR=#f9b59a>....</TD><TD BGCOLOR=#f6a98d>....</TD><TD BGCOLOR=#de9877>....</TD><TD BGCOLOR=#a16353>....</TD><TD BGCOLOR=#9f6463>....</TD><TD BGCOLOR=#976560>....</TD><TD BGCOLOR=#9b6663>....</TD><TD BGCOLOR=#9a6966>....</TD><TD BGCOLOR=#a87d78>....</TD><TD BGCOLOR=#a47773>....</TD><TD BGCOLOR=#b88a87>....</TD><TD BGCOLOR=#9d6f6e>....</TD><TD BGCOLOR=#b57674>....</TD><TD BGCOLOR=#b77a71>....</TD><TD BGCOLOR=#ad7a71>....</TD><TD BGCOLOR=#b38680>....</TD><TD BGCOLOR=#b1846e>....</TD><TD BGCOLOR=#b68576>....</TD><TD BGCOLOR=#b38363>....</TD><TD BGCOLOR=#a67c56>....</TD><TD BGCOLOR=#b18468>....</TD><TD BGCOLOR=#b68576>....</TD><TD BGCOLOR=#af7e72>....</TD><TD BGCOLOR=#a68162>....</TD><TD BGCOLOR=#a0856a>....</TD><TD BGCOLOR=#927966>....</TD><TD BGCOLOR=#927569>....</TD><TD BGCOLOR=#8f7668>....</TD><TD BGCOLOR=#937867>....</TD><TD BGCOLOR=#a0826f>....</TD><TD BGCOLOR=#a68b75>....</TD><TD BGCOLOR=#b89780>....</TD><TD BGCOLOR=#c09f85>....</TD><TD BGCOLOR=#cba88b>....</TD><TD BGCOLOR=#d2a286>....</TD><TD BGCOLOR=#d09b7d>....</TD><TD BGCOLOR=#cb9476>....</TD><TD BGCOLOR=#bd8264>....</TD><TD BGCOLOR=#a06b5c>....</TD><TD BGCOLOR=#947561>....</TD><TD BGCOLOR=#b87d70>....</TD><TD BGCOLOR=#c98177>....</TD></TR> <TR><TD BGCOLOR=#200d00 COLSPAN=4>....</TD><TD BGCOLOR=#251204>....</TD><TD BGCOLOR=#251505>....</TD><TD BGCOLOR=#201002>....</TD><TD BGCOLOR=#231102>....</TD><TD BGCOLOR=#241102>....</TD><TD BGCOLOR=#270e01>....</TD><TD BGCOLOR=#250b01>....</TD><TD BGCOLOR=#260b05>....</TD><TD BGCOLOR=#260c09>....</TD><TD BGCOLOR=#1c0602>....</TD><TD BGCOLOR=#270e07>....</TD><TD BGCOLOR=#320d08>....</TD><TD BGCOLOR=#3b0c04>....</TD><TD BGCOLOR=#564335>....</TD><TD BGCOLOR=#5b573b>....</TD><TD BGCOLOR=#615439>....</TD><TD BGCOLOR=#615744>....</TD><TD BGCOLOR=#6a6e57>....</TD><TD BGCOLOR=#675b4a>....</TD><TD BGCOLOR=#62614b>....</TD><TD BGCOLOR=#655e48>....</TD><TD BGCOLOR=#585f48>....</TD><TD BGCOLOR=#5a573f>....</TD><TD BGCOLOR=#5a4228>....</TD><TD BGCOLOR=#563c1a>....</TD><TD BGCOLOR=#52330a>....</TD><TD BGCOLOR=#4c2e0e>....</TD><TD BGCOLOR=#4e350b>....</TD><TD BGCOLOR=#523404>....</TD><TD BGCOLOR=#593913>....</TD><TD BGCOLOR=#50300a>....</TD><TD BGCOLOR=#59340b>....</TD><TD BGCOLOR=#6b5643>....</TD><TD BGCOLOR=#877d6e>....</TD><TD BGCOLOR=#a78f76>....</TD><TD BGCOLOR=#b19680>....</TD><TD BGCOLOR=#b79b8a>....</TD><TD BGCOLOR=#bfa287>....</TD><TD BGCOLOR=#c8a78d>....</TD><TD BGCOLOR=#cdb09e>....</TD><TD BGCOLOR=#dcaa96>....</TD><TD BGCOLOR=#e4b5a2>....</TD><TD BGCOLOR=#ab9d8d>....</TD><TD BGCOLOR=#916340>....</TD><TD BGCOLOR=#a07d68>....</TD><TD BGCOLOR=#a07d67>....</TD><TD BGCOLOR=#8a705a>....</TD><TD BGCOLOR=#805f42>....</TD><TD BGCOLOR=#986d4d>....</TD><TD BGCOLOR=#97745c>....</TD><TD BGCOLOR=#937b5c>....</TD><TD BGCOLOR=#896e4a>....</TD><TD BGCOLOR=#866644>....</TD><TD BGCOLOR=#946e4e>....</TD><TD BGCOLOR=#906447>....</TD><TD BGCOLOR=#ad7057>....</TD><TD BGCOLOR=#ca7c66>....</TD><TD BGCOLOR=#dc8971>....</TD><TD BGCOLOR=#d99172>....</TD><TD BGCOLOR=#daa17e>....</TD><TD BGCOLOR=#dda07e>....</TD><TD BGCOLOR=#d69067>....</TD><TD BGCOLOR=#c49676>....</TD><TD BGCOLOR=#cc9d86>....</TD><TD BGCOLOR=#ebbc9b>....</TD><TD BGCOLOR=#e6b192>....</TD><TD BGCOLOR=#f5d9c3>....</TD><TD BGCOLOR=#fbd3c4>....</TD><TD BGCOLOR=#f3d8c4>....</TD><TD BGCOLOR=#ead3bb>....</TD><TD BGCOLOR=#f1bfa3>....</TD><TD BGCOLOR=#f1b096>....</TD><TD BGCOLOR=#d49374>....</TD><TD BGCOLOR=#935d4e>....</TD><TD BGCOLOR=#8a5e58>....</TD><TD BGCOLOR=#8d635c>....</TD><TD BGCOLOR=#905d59>....</TD><TD BGCOLOR=#a0716b>....</TD><TD BGCOLOR=#b28e82>....</TD><TD BGCOLOR=#bf938a>....</TD><TD BGCOLOR=#d09d96>....</TD><TD BGCOLOR=#c09c96>....</TD><TD BGCOLOR=#ca9e96>....</TD><TD BGCOLOR=#c89e8f>....</TD><TD BGCOLOR=#ba9a8b>....</TD><TD BGCOLOR=#c89c8e>....</TD><TD BGCOLOR=#b88a6b>....</TD><TD BGCOLOR=#ae7966>....</TD><TD BGCOLOR=#ad7959>....</TD><TD BGCOLOR=#a57855>....</TD><TD BGCOLOR=#ac8064>....</TD><TD BGCOLOR=#ab7f6b>....</TD><TD BGCOLOR=#a67d6c>....</TD><TD BGCOLOR=#9b7e64>....</TD><TD BGCOLOR=#947962>....</TD><TD BGCOLOR=#927865>....</TD><TD BGCOLOR=#957a6c>....</TD><TD BGCOLOR=#998173>....</TD><TD BGCOLOR=#a28776>....</TD><TD BGCOLOR=#b89a87>....</TD><TD BGCOLOR=#bfa68d>....</TD><TD BGCOLOR=#c1a186>....</TD><TD BGCOLOR=#cba589>....</TD><TD BGCOLOR=#d8a88d>....</TD><TD BGCOLOR=#d6a185>....</TD><TD BGCOLOR=#cc977c>....</TD><TD BGCOLOR=#b9816a>....</TD><TD BGCOLOR=#a56954>....</TD><TD BGCOLOR=#a06851>....</TD><TD BGCOLOR=#956f54>....</TD><TD BGCOLOR=#a56657>....</TD><TD BGCOLOR=#bb766d>....</TD></TR> <TR><TD BGCOLOR=#200d00 COLSPAN=3>....</TD><TD BGCOLOR=#1f0c00>....</TD><TD BGCOLOR=#251203>....</TD><TD BGCOLOR=#221001>....</TD><TD BGCOLOR=#1f0f00>....</TD><TD BGCOLOR=#201202>....</TD><TD BGCOLOR=#231403>....</TD><TD BGCOLOR=#241102>....</TD><TD BGCOLOR=#200d01>....</TD><TD BGCOLOR=#210d05>....</TD><TD BGCOLOR=#230c08>....</TD><TD BGCOLOR=#1d0602>....</TD><TD BGCOLOR=#270e07>....</TD><TD BGCOLOR=#310c06>....</TD><TD BGCOLOR=#3d0e06>....</TD><TD BGCOLOR=#554235>....</TD><TD BGCOLOR=#5a5639>....</TD><TD BGCOLOR=#63563c>....</TD><TD BGCOLOR=#5f5542>....</TD><TD BGCOLOR=#696d56>....</TD><TD BGCOLOR=#675b49>....</TD><TD BGCOLOR=#63624c>....</TD><TD BGCOLOR=#645d47>....</TD><TD BGCOLOR=#575d46>....</TD><TD BGCOLOR=#59553d>....</TD><TD BGCOLOR=#594127>....</TD><TD BGCOLOR=#563c19>....</TD><TD BGCOLOR=#54350b>....</TD><TD BGCOLOR=#4d2f0f>....</TD><TD BGCOLOR=#4e350d>....</TD><TD BGCOLOR=#523308>....</TD><TD BGCOLOR=#5a3a14>....</TD><TD BGCOLOR=#513108>....</TD><TD BGCOLOR=#583609>....</TD><TD BGCOLOR=#6e5745>....</TD><TD BGCOLOR=#8a7c6e>....</TD><TD BGCOLOR=#a18a70>....</TD><TD BGCOLOR=#ad937c>....</TD><TD BGCOLOR=#b69989>....</TD><TD BGCOLOR=#bda085>....</TD><TD BGCOLOR=#c9a88e>....</TD><TD BGCOLOR=#c7ab96>....</TD><TD BGCOLOR=#d8a68f>....</TD><TD BGCOLOR=#ddaf99>....</TD><TD BGCOLOR=#968976>....</TD><TD BGCOLOR=#9e7546>....</TD><TD BGCOLOR=#af8860>....</TD><TD BGCOLOR=#bd956a>....</TD><TD BGCOLOR=#baa17d>....</TD><TD BGCOLOR=#ab9173>....</TD><TD BGCOLOR=#8a684b>....</TD><TD BGCOLOR=#866d5c>....</TD><TD BGCOLOR=#8b7864>....</TD><TD BGCOLOR=#997863>....</TD><TD BGCOLOR=#896753>....</TD><TD BGCOLOR=#7c5a45>....</TD><TD BGCOLOR=#865f4c>....</TD><TD BGCOLOR=#926050>....</TD><TD BGCOLOR=#a46859>....</TD><TD BGCOLOR=#a76d5a>....</TD><TD BGCOLOR=#b48264>....</TD><TD BGCOLOR=#be8469>....</TD><TD BGCOLOR=#c28f73>....</TD><TD BGCOLOR=#c89270>....</TD><TD BGCOLOR=#c68c71>....</TD><TD BGCOLOR=#c08372>....</TD><TD BGCOLOR=#c4886e>....</TD><TD BGCOLOR=#d48d7c>....</TD><TD BGCOLOR=#c39789>....</TD><TD BGCOLOR=#d2998e>....</TD><TD BGCOLOR=#d8a795>....</TD><TD BGCOLOR=#d8a994>....</TD><TD BGCOLOR=#d9a691>....</TD><TD BGCOLOR=#d89884>....</TD><TD BGCOLOR=#bd8067>....</TD><TD BGCOLOR=#986456>....</TD><TD BGCOLOR=#a37466>....</TD><TD BGCOLOR=#a67a6b>....</TD><TD BGCOLOR=#b17f72>....</TD><TD BGCOLOR=#b58878>....</TD><TD BGCOLOR=#b99481>....</TD><TD BGCOLOR=#c69b8a>....</TD><TD BGCOLOR=#d1a192>....</TD><TD BGCOLOR=#cdae9d>....</TD><TD BGCOLOR=#bf9684>....</TD><TD BGCOLOR=#c09a81>....</TD><TD BGCOLOR=#b89c83>....</TD><TD BGCOLOR=#b6907b>....</TD><TD BGCOLOR=#b08766>....</TD><TD BGCOLOR=#a97a6a>....</TD><TD BGCOLOR=#a2735a>....</TD><TD BGCOLOR=#9c745e>....</TD><TD BGCOLOR=#987560>....</TD><TD BGCOLOR=#917562>....</TD><TD BGCOLOR=#8a7360>....</TD><TD BGCOLOR=#88755f>....</TD><TD BGCOLOR=#907663>....</TD><TD BGCOLOR=#987c6a>....</TD><TD BGCOLOR=#a18876>....</TD><TD BGCOLOR=#a89081>....</TD><TD BGCOLOR=#b89d8b>....</TD><TD BGCOLOR=#c0a28f>....</TD><TD BGCOLOR=#c4a58d>....</TD><TD BGCOLOR=#cda389>....</TD><TD BGCOLOR=#d0a387>....</TD><TD BGCOLOR=#d6a284>....</TD><TD BGCOLOR=#d39c80>....</TD><TD BGCOLOR=#b47e66>....</TD><TD BGCOLOR=#a56b5d>....</TD><TD BGCOLOR=#b67770>....</TD><TD BGCOLOR=#bb7d6e>....</TD><TD BGCOLOR=#b4846f>....</TD><TD BGCOLOR=#b87368>....</TD><TD BGCOLOR=#a7685d>....</TD></TR> <TR><TD BGCOLOR=#210d01 COLSPAN=2>....</TD><TD BGCOLOR=#200d01>....</TD><TD BGCOLOR=#210e01>....</TD><TD BGCOLOR=#230f03>....</TD><TD BGCOLOR=#210f03>....</TD><TD BGCOLOR=#200d02>....</TD><TD BGCOLOR=#220d02>....</TD><TD BGCOLOR=#220e02>....</TD><TD BGCOLOR=#201203>....</TD><TD BGCOLOR=#1a1003>....</TD><TD BGCOLOR=#1b0e04>....</TD><TD BGCOLOR=#220b06>....</TD><TD BGCOLOR=#200803>....</TD><TD BGCOLOR=#280f07>....</TD><TD BGCOLOR=#2e0b03>....</TD><TD BGCOLOR=#370904>....</TD><TD BGCOLOR=#524435>....</TD><TD BGCOLOR=#5c593d>....</TD><TD BGCOLOR=#60593e>....</TD><TD BGCOLOR=#5e5643>....</TD><TD BGCOLOR=#6a6e58>....</TD><TD BGCOLOR=#675c47>....</TD><TD BGCOLOR=#65644b>....</TD><TD BGCOLOR=#645c46>....</TD><TD BGCOLOR=#575c45>....</TD><TD BGCOLOR=#5f5b43>....</TD><TD BGCOLOR=#584126>....</TD><TD BGCOLOR=#563a18>....</TD><TD BGCOLOR=#53320c>....</TD><TD BGCOLOR=#4e2d0c>....</TD><TD BGCOLOR=#52340e>....</TD><TD BGCOLOR=#53330b>....</TD><TD BGCOLOR=#583813>....</TD><TD BGCOLOR=#55350b>....</TD><TD BGCOLOR=#58370b>....</TD><TD BGCOLOR=#6f5947>....</TD><TD BGCOLOR=#89796c>....</TD><TD BGCOLOR=#a18b71>....</TD><TD BGCOLOR=#aa8f7a>....</TD><TD BGCOLOR=#b59887>....</TD><TD BGCOLOR=#bb9f86>....</TD><TD BGCOLOR=#c2a189>....</TD><TD BGCOLOR=#c4a490>....</TD><TD BGCOLOR=#d9a791>....</TD><TD BGCOLOR=#d6aa91>....</TD><TD BGCOLOR=#b8a992>....</TD><TD BGCOLOR=#865f4c>....</TD><TD BGCOLOR=#a97f69>....</TD><TD BGCOLOR=#b5846a>....</TD><TD BGCOLOR=#c29683>....</TD><TD BGCOLOR=#cb9984>....</TD><TD BGCOLOR=#be806d>....</TD><TD BGCOLOR=#b17c71>....</TD><TD BGCOLOR=#b2857a>....</TD><TD BGCOLOR=#997164>....</TD><TD BGCOLOR=#957063>....</TD><TD BGCOLOR=#906e5f>....</TD><TD BGCOLOR=#836254>....</TD><TD BGCOLOR=#7b534a>....</TD><TD BGCOLOR=#80564d>....</TD><TD BGCOLOR=#816055>....</TD><TD BGCOLOR=#8a715c>....</TD><TD BGCOLOR=#a27968>....</TD><TD BGCOLOR=#9b7761>....</TD><TD BGCOLOR=#a47e5d>....</TD><TD BGCOLOR=#a98666>....</TD><TD BGCOLOR=#b28d74>....</TD><TD BGCOLOR=#b69071>....</TD><TD BGCOLOR=#c58e79>....</TD><TD BGCOLOR=#bf9a80>....</TD><TD BGCOLOR=#c39b7f>....</TD><TD BGCOLOR=#c19f7e>....</TD><TD BGCOLOR=#bf9b7c>....</TD><TD BGCOLOR=#bf927f>....</TD><TD BGCOLOR=#b37f6c>....</TD><TD BGCOLOR=#9a7056>....</TD><TD BGCOLOR=#a07662>....</TD><TD BGCOLOR=#a66d58>....</TD><TD BGCOLOR=#a57960>....</TD><TD BGCOLOR=#b1836a>....</TD><TD BGCOLOR=#b1836b>....</TD><TD BGCOLOR=#b0876f>....</TD><TD BGCOLOR=#b7907b>....</TD><TD BGCOLOR=#b5907d>....</TD><TD BGCOLOR=#b59581>....</TD><TD BGCOLOR=#b68972>....</TD><TD BGCOLOR=#b78d6f>....</TD><TD BGCOLOR=#ab876c>....</TD><TD BGCOLOR=#a3816c>....</TD><TD BGCOLOR=#9b7c5f>....</TD><TD BGCOLOR=#9a7569>....</TD><TD BGCOLOR=#9b7464>....</TD><TD BGCOLOR=#906f63>....</TD><TD BGCOLOR=#8b7362>....</TD><TD BGCOLOR=#857160>....</TD><TD BGCOLOR=#897567>....</TD><TD BGCOLOR=#917f6f>....</TD><TD BGCOLOR=#9f8573>....</TD><TD BGCOLOR=#a08571>....</TD><TD BGCOLOR=#a68f7d>....</TD><TD BGCOLOR=#ad9789>....</TD><TD BGCOLOR=#bba090>....</TD><TD BGCOLOR=#bea290>....</TD><TD BGCOLOR=#c3a18a>....</TD><TD BGCOLOR=#ce9e84>....</TD><TD BGCOLOR=#c69a7d>....</TD><TD BGCOLOR=#c69778>....</TD><TD BGCOLOR=#b1795f>....</TD><TD BGCOLOR=#a16652>....</TD><TD BGCOLOR=#b3756a>....</TD><TD BGCOLOR=#b57574>....</TD><TD BGCOLOR=#c17e7d>....</TD><TD BGCOLOR=#b87a74>....</TD><TD BGCOLOR=#b8706a>....</TD><TD BGCOLOR=#b4796d>....</TD></TR> <TR><TD BGCOLOR=#210d06 COLSPAN=2>....</TD><TD BGCOLOR=#200c06>....</TD><TD BGCOLOR=#210d06>....</TD><TD BGCOLOR=#230f08>....</TD><TD BGCOLOR=#210d08>....</TD><TD BGCOLOR=#210d06>....</TD><TD BGCOLOR=#220e07>....</TD><TD BGCOLOR=#230c07>....</TD><TD BGCOLOR=#220e07>....</TD><TD BGCOLOR=#170f05>....</TD><TD BGCOLOR=#1e0d05>....</TD><TD BGCOLOR=#280b08>....</TD><TD BGCOLOR=#210801>....</TD><TD BGCOLOR=#260f04>....</TD><TD BGCOLOR=#2c0c02>....</TD><TD BGCOLOR=#350b08>....</TD><TD BGCOLOR=#4d4c36>....</TD><TD BGCOLOR=#585439>....</TD><TD BGCOLOR=#585840>....</TD><TD BGCOLOR=#5e5944>....</TD><TD BGCOLOR=#6b6e59>....</TD><TD BGCOLOR=#655c3f>....</TD><TD BGCOLOR=#656547>....</TD><TD BGCOLOR=#635b45>....</TD><TD BGCOLOR=#585944>....</TD><TD BGCOLOR=#5e5a42>....</TD><TD BGCOLOR=#574226>....</TD><TD BGCOLOR=#573819>....</TD><TD BGCOLOR=#543111>....</TD><TD BGCOLOR=#502b07>....</TD><TD BGCOLOR=#56310c>....</TD><TD BGCOLOR=#52320c>....</TD><TD BGCOLOR=#563610>....</TD><TD BGCOLOR=#53330d>....</TD><TD BGCOLOR=#58330e>....</TD><TD BGCOLOR=#715c48>....</TD><TD BGCOLOR=#877c6f>....</TD><TD BGCOLOR=#a28a71>....</TD><TD BGCOLOR=#b08f7d>....</TD><TD BGCOLOR=#b39684>....</TD><TD BGCOLOR=#b89e87>....</TD><TD BGCOLOR=#c1a18a>....</TD><TD BGCOLOR=#c89f92>....</TD><TD BGCOLOR=#d3a390>....</TD><TD BGCOLOR=#d4ac92>....</TD><TD BGCOLOR=#ccb69b>....</TD><TD BGCOLOR=#907167>....</TD><TD BGCOLOR=#8b6a55>....</TD><TD BGCOLOR=#aa7a66>....</TD><TD BGCOLOR=#c68b7d>....</TD><TD BGCOLOR=#d59b85>....</TD><TD BGCOLOR=#efb19a>....</TD><TD BGCOLOR=#dcb492>....</TD><TD BGCOLOR=#cba081>....</TD><TD BGCOLOR=#a8846e>....</TD><TD BGCOLOR=#ac8875>....</TD><TD BGCOLOR=#b08e76>....</TD><TD BGCOLOR=#b89579>....</TD><TD BGCOLOR=#bb9378>....</TD><TD BGCOLOR=#b3886e>....</TD><TD BGCOLOR=#a17d6a>....</TD><TD BGCOLOR=#917561>....</TD><TD BGCOLOR=#7f6352>....</TD><TD BGCOLOR=#775a49>....</TD><TD BGCOLOR=#7f6249>....</TD><TD BGCOLOR=#8d6d59>....</TD><TD BGCOLOR=#927560>....</TD><TD BGCOLOR=#9d7d64>....</TD><TD BGCOLOR=#a97f65>....</TD><TD BGCOLOR=#a88466>....</TD><TD BGCOLOR=#b18f74>....</TD><TD BGCOLOR=#a88970>....</TD><TD BGCOLOR=#9b7d66>....</TD><TD BGCOLOR=#8d6957>....</TD><TD BGCOLOR=#88604f>....</TD><TD BGCOLOR=#8c6a57>....</TD><TD BGCOLOR=#926e59>....</TD><TD BGCOLOR=#956851>....</TD><TD BGCOLOR=#927659>....</TD><TD BGCOLOR=#96765b>....</TD><TD BGCOLOR=#9c765b>....</TD><TD BGCOLOR=#9a775c>....</TD><TD BGCOLOR=#9b7963>....</TD><TD BGCOLOR=#9b7a69>....</TD><TD BGCOLOR=#9b7b6b>....</TD><TD BGCOLOR=#99725f>....</TD><TD BGCOLOR=#94735c>....</TD><TD BGCOLOR=#8c6756>....</TD><TD BGCOLOR=#8c6957>....</TD><TD BGCOLOR=#8d725f>....</TD><TD BGCOLOR=#957969>....</TD><TD BGCOLOR=#967168>....</TD><TD BGCOLOR=#8e7467>....</TD><TD BGCOLOR=#917d66>....</TD><TD BGCOLOR=#937965>....</TD><TD BGCOLOR=#9b766e>....</TD><TD BGCOLOR=#9b7c73>....</TD><TD BGCOLOR=#9a8870>....</TD><TD BGCOLOR=#a19077>....</TD><TD BGCOLOR=#ad9989>....</TD><TD BGCOLOR=#af9a8e>....</TD><TD BGCOLOR=#b89b8f>....</TD><TD BGCOLOR=#b79b8b>....</TD><TD BGCOLOR=#bc9f87>....</TD><TD BGCOLOR=#c0987c>....</TD><TD BGCOLOR=#b49174>....</TD><TD BGCOLOR=#ab8065>....</TD><TD BGCOLOR=#9b5e4c>....</TD><TD BGCOLOR=#b97361>....</TD><TD BGCOLOR=#bf7568>....</TD><TD BGCOLOR=#bd7972>....</TD><TD BGCOLOR=#bf7975>....</TD><TD BGCOLOR=#ba736f>....</TD><TD BGCOLOR=#9e5c56>....</TD><TD BGCOLOR=#ad786e>....</TD></TR> <TR><TD BGCOLOR=#210d06 COLSPAN=2>....</TD><TD BGCOLOR=#200c05 COLSPAN=2>....</TD><TD BGCOLOR=#241009>....</TD><TD BGCOLOR=#1f0b05>....</TD><TD BGCOLOR=#200c06>....</TD><TD BGCOLOR=#210d06>....</TD><TD BGCOLOR=#210b05>....</TD><TD BGCOLOR=#230e07>....</TD><TD BGCOLOR=#1e0e06>....</TD><TD BGCOLOR=#210d06>....</TD><TD BGCOLOR=#230c07>....</TD><TD BGCOLOR=#1d0901>....</TD><TD BGCOLOR=#270e04>....</TD><TD BGCOLOR=#290b01>....</TD><TD BGCOLOR=#2e0902>....</TD><TD BGCOLOR=#4c4d34>....</TD><TD BGCOLOR=#5b5337>....</TD><TD BGCOLOR=#60563d>....</TD><TD BGCOLOR=#615b41>....</TD><TD BGCOLOR=#686d55>....</TD><TD BGCOLOR=#645a3f>....</TD><TD BGCOLOR=#65644b>....</TD><TD BGCOLOR=#655d47>....</TD><TD BGCOLOR=#595a45>....</TD><TD BGCOLOR=#5d5841>....</TD><TD BGCOLOR=#564326>....</TD><TD BGCOLOR=#533a19>....</TD><TD BGCOLOR=#503411>....</TD><TD BGCOLOR=#4c2d07>....</TD><TD BGCOLOR=#52320b>....</TD><TD BGCOLOR=#52320c>....</TD><TD BGCOLOR=#55350f>....</TD><TD BGCOLOR=#51310b>....</TD><TD BGCOLOR=#532f07>....</TD><TD BGCOLOR=#735f46>....</TD><TD BGCOLOR=#8b8073>....</TD><TD BGCOLOR=#a28a76>....</TD><TD BGCOLOR=#ab8d7a>....</TD><TD BGCOLOR=#b1937e>....</TD><TD BGCOLOR=#b99b83>....</TD><TD BGCOLOR=#c0a187>....</TD><TD BGCOLOR=#c59f8f>....</TD><TD BGCOLOR=#cda28e>....</TD><TD BGCOLOR=#d0a990>....</TD><TD BGCOLOR=#caad95>....</TD><TD BGCOLOR=#c6b8ab>....</TD><TD BGCOLOR=#715e4c>....</TD><TD BGCOLOR=#a27c64>....</TD><TD BGCOLOR=#c18971>....</TD><TD BGCOLOR=#d69280>....</TD><TD BGCOLOR=#f6b39e>....</TD><TD BGCOLOR=#e7c19e>....</TD><TD BGCOLOR=#dbb192>....</TD><TD BGCOLOR=#a87a68>....</TD><TD BGCOLOR=#9b665f>....</TD><TD BGCOLOR=#af766e>....</TD><TD BGCOLOR=#b07669>....</TD><TD BGCOLOR=#b8836a>....</TD><TD BGCOLOR=#bd8f6f>....</TD><TD BGCOLOR=#bd9677>....</TD><TD BGCOLOR=#b39572>....</TD><TD BGCOLOR=#ad9276>....</TD><TD BGCOLOR=#a48b78>....</TD><TD BGCOLOR=#9d8673>....</TD><TD BGCOLOR=#927a6b>....</TD><TD BGCOLOR=#847262>....</TD><TD BGCOLOR=#827160>....</TD><TD BGCOLOR=#866e5f>....</TD><TD BGCOLOR=#876858>....</TD><TD BGCOLOR=#856759>....</TD><TD BGCOLOR=#8a6f63>....</TD><TD BGCOLOR=#81685d>....</TD><TD BGCOLOR=#71584d>....</TD><TD BGCOLOR=#745e52>....</TD><TD BGCOLOR=#746154>....</TD><TD BGCOLOR=#7b6557>....</TD><TD BGCOLOR=#836756>....</TD><TD BGCOLOR=#826d5a>....</TD><TD BGCOLOR=#886e5c>....</TD><TD BGCOLOR=#8f705f>....</TD><TD BGCOLOR=#977663>....</TD><TD BGCOLOR=#906b56>....</TD><TD BGCOLOR=#996f58>....</TD><TD BGCOLOR=#99725e>....</TD><TD BGCOLOR=#966b57>....</TD><TD BGCOLOR=#95755a>....</TD><TD BGCOLOR=#906f5b>....</TD><TD BGCOLOR=#906a59>....</TD><TD BGCOLOR=#9c7d6b>....</TD><TD BGCOLOR=#987d6d>....</TD><TD BGCOLOR=#9a7c70>....</TD><TD BGCOLOR=#907e70>....</TD><TD BGCOLOR=#907f70>....</TD><TD BGCOLOR=#917f71>....</TD><TD BGCOLOR=#917c71>....</TD><TD BGCOLOR=#947a74>....</TD><TD BGCOLOR=#928375>....</TD><TD BGCOLOR=#978b79>....</TD><TD BGCOLOR=#9d8d7c>....</TD><TD BGCOLOR=#ac9587>....</TD><TD BGCOLOR=#b19283>....</TD><TD BGCOLOR=#b39683>....</TD><TD BGCOLOR=#b2947c>....</TD><TD BGCOLOR=#b89279>....</TD><TD BGCOLOR=#b19177>....</TD><TD BGCOLOR=#956d55>....</TD><TD BGCOLOR=#ab7062>....</TD><TD BGCOLOR=#b87464>....</TD><TD BGCOLOR=#c57d6a>....</TD><TD BGCOLOR=#be7a6b>....</TD><TD BGCOLOR=#ad7369>....</TD><TD BGCOLOR=#aa7168>....</TD><TD BGCOLOR=#9d6c60>....</TD><TD BGCOLOR=#937160>....</TD></TR> <TR><TD BGCOLOR=#210d06 COLSPAN=2>....</TD><TD BGCOLOR=#1f0b05>....</TD><TD BGCOLOR=#1f0b04>....</TD><TD BGCOLOR=#220e07>....</TD><TD BGCOLOR=#1f0b04>....</TD><TD BGCOLOR=#220e07>....</TD><TD BGCOLOR=#210d06>....</TD><TD BGCOLOR=#230d07>....</TD><TD BGCOLOR=#240c06>....</TD><TD BGCOLOR=#230b06>....</TD><TD BGCOLOR=#250c07>....</TD><TD BGCOLOR=#250d07>....</TD><TD BGCOLOR=#200601>....</TD><TD BGCOLOR=#260c03>....</TD><TD BGCOLOR=#201001>....</TD><TD BGCOLOR=#300c03>....</TD><TD BGCOLOR=#504930>....</TD><TD BGCOLOR=#5c5234>....</TD><TD BGCOLOR=#60583c>....</TD><TD BGCOLOR=#5f5a3b>....</TD><TD BGCOLOR=#676b52>....</TD><TD BGCOLOR=#665c43>....</TD><TD BGCOLOR=#64624e>....</TD><TD BGCOLOR=#635a45>....</TD><TD BGCOLOR=#5b5d48>....</TD><TD BGCOLOR=#59553d>....</TD><TD BGCOLOR=#554225>....</TD><TD BGCOLOR=#4f3c19>....</TD><TD BGCOLOR=#4d3713>....</TD><TD BGCOLOR=#493109>....</TD><TD BGCOLOR=#4e320b>....</TD><TD BGCOLOR=#50300a>....</TD><TD BGCOLOR=#55350f>....</TD><TD BGCOLOR=#4d2d07>....</TD><TD BGCOLOR=#543005>....</TD><TD BGCOLOR=#715e41>....</TD><TD BGCOLOR=#8b8074>....</TD><TD BGCOLOR=#a38a7b>....</TD><TD BGCOLOR=#a88d78>....</TD><TD BGCOLOR=#b1917a>....</TD><TD BGCOLOR=#bb9a7f>....</TD><TD BGCOLOR=#bca183>....</TD><TD BGCOLOR=#c19d8c>....</TD><TD BGCOLOR=#c7a18b>....</TD><TD BGCOLOR=#caa68b>....</TD><TD BGCOLOR=#cfab95>....</TD><TD BGCOLOR=#c6b6a2>....</TD><TD BGCOLOR=#a49080>....</TD><TD BGCOLOR=#81604b>....</TD><TD BGCOLOR=#a5755b>....</TD><TD BGCOLOR=#d08d7a>....</TD><TD BGCOLOR=#f0aa96>....</TD><TD BGCOLOR=#f8cdad>....</TD><TD BGCOLOR=#c89072>....</TD><TD BGCOLOR=#bc7865>....</TD><TD BGCOLOR=#c57f79>....</TD><TD BGCOLOR=#d7918e>....</TD><TD BGCOLOR=#cf847e>....</TD><TD BGCOLOR=#b77365>....</TD><TD BGCOLOR=#a97460>....</TD><TD BGCOLOR=#ae7d70>....</TD><TD BGCOLOR=#b88c71>....</TD><TD BGCOLOR=#aa8568>....</TD><TD BGCOLOR=#a58672>....</TD><TD BGCOLOR=#9f8771>....</TD><TD BGCOLOR=#96806d>....</TD><TD BGCOLOR=#8e806f>....</TD><TD BGCOLOR=#827a6b>....</TD><TD BGCOLOR=#817369>....</TD><TD BGCOLOR=#82695d>....</TD><TD BGCOLOR=#7b6459>....</TD><TD BGCOLOR=#78635c>....</TD><TD BGCOLOR=#79655e>....</TD><TD BGCOLOR=#776159>....</TD><TD BGCOLOR=#706358>....</TD><TD BGCOLOR=#6f6458>....</TD><TD BGCOLOR=#736356>....</TD><TD BGCOLOR=#786354>....</TD><TD BGCOLOR=#82695b>....</TD><TD BGCOLOR=#836659>....</TD><TD BGCOLOR=#896558>....</TD><TD BGCOLOR=#926858>....</TD><TD BGCOLOR=#946a57>....</TD><TD BGCOLOR=#976e55>....</TD><TD BGCOLOR=#9a6956>....</TD><TD BGCOLOR=#a56b59>....</TD><TD BGCOLOR=#9a7156>....</TD><TD BGCOLOR=#9b745f>....</TD><TD BGCOLOR=#9b6f60>....</TD><TD BGCOLOR=#997866>....</TD><TD BGCOLOR=#947b6a>....</TD><TD BGCOLOR=#91786b>....</TD><TD BGCOLOR=#867b6e>....</TD><TD BGCOLOR=#82746f>....</TD><TD BGCOLOR=#786f68>....</TD><TD BGCOLOR=#767566>....</TD><TD BGCOLOR=#7f766e>....</TD><TD BGCOLOR=#837c76>....</TD><TD BGCOLOR=#8c8075>....</TD><TD BGCOLOR=#998576>....</TD><TD BGCOLOR=#a08675>....</TD><TD BGCOLOR=#a68472>....</TD><TD BGCOLOR=#a88772>....</TD><TD BGCOLOR=#a78971>....</TD><TD BGCOLOR=#ae8c75>....</TD><TD BGCOLOR=#b1937c>....</TD><TD BGCOLOR=#8b6651>....</TD><TD BGCOLOR=#9a6758>....</TD><TD BGCOLOR=#a87262>....</TD><TD BGCOLOR=#a57562>....</TD><TD BGCOLOR=#906b5e>....</TD><TD BGCOLOR=#7f6159>....</TD><TD BGCOLOR=#7b5752>....</TD><TD BGCOLOR=#77534e>....</TD><TD BGCOLOR=#785a54>....</TD></TR> <TR><TD BGCOLOR=#220e07 COLSPAN=2>....</TD><TD BGCOLOR=#200c05 COLSPAN=3>....</TD><TD BGCOLOR=#1e0e06>....</TD><TD BGCOLOR=#220e07>....</TD><TD BGCOLOR=#230e07>....</TD><TD BGCOLOR=#210d07>....</TD><TD BGCOLOR=#240d07>....</TD><TD BGCOLOR=#250c07>....</TD><TD BGCOLOR=#240c06>....</TD><TD BGCOLOR=#240d07>....</TD><TD BGCOLOR=#200602>....</TD><TD BGCOLOR=#270d07>....</TD><TD BGCOLOR=#221002>....</TD><TD BGCOLOR=#320a02>....</TD><TD BGCOLOR=#524932>....</TD><TD BGCOLOR=#5b5336>....</TD><TD BGCOLOR=#5f583b>....</TD><TD BGCOLOR=#625a3f>....</TD><TD BGCOLOR=#686e50>....</TD><TD BGCOLOR=#685c43>....</TD><TD BGCOLOR=#666652>....</TD><TD BGCOLOR=#5e5841>....</TD><TD BGCOLOR=#555a43>....</TD><TD BGCOLOR=#56553c>....</TD><TD BGCOLOR=#524225>....</TD><TD BGCOLOR=#4d3c1a>....</TD><TD BGCOLOR=#4a3613>....</TD><TD BGCOLOR=#49320e>....</TD><TD BGCOLOR=#4c310c>....</TD><TD BGCOLOR=#4e310c>....</TD><TD BGCOLOR=#513310>....</TD><TD BGCOLOR=#4f2d0d>....</TD><TD BGCOLOR=#542a08>....</TD><TD BGCOLOR=#775c42>....</TD><TD BGCOLOR=#8b8172>....</TD><TD BGCOLOR=#9f8c79>....</TD><TD BGCOLOR=#a78b77>....</TD><TD BGCOLOR=#b2917c>....</TD><TD BGCOLOR=#b7947c>....</TD><TD BGCOLOR=#b89a7f>....</TD><TD BGCOLOR=#c19e86>....</TD><TD BGCOLOR=#c6a389>....</TD><TD BGCOLOR=#c9a48c>....</TD><TD BGCOLOR=#d1a794>....</TD><TD BGCOLOR=#d0ac98>....</TD><TD BGCOLOR=#bdb4a1>....</TD><TD BGCOLOR=#765042>....</TD><TD BGCOLOR=#956c53>....</TD><TD BGCOLOR=#b77c6e>....</TD><TD BGCOLOR=#e69e8f>....</TD><TD BGCOLOR=#e9b298>....</TD><TD BGCOLOR=#d19578>....</TD><TD BGCOLOR=#d8927e>....</TD><TD BGCOLOR=#e0978f>....</TD><TD BGCOLOR=#d9908b>....</TD><TD BGCOLOR=#db897c>....</TD><TD BGCOLOR=#d4876f>....</TD><TD BGCOLOR=#c1896f>....</TD><TD BGCOLOR=#a87565>....</TD><TD BGCOLOR=#a2735b>....</TD><TD BGCOLOR=#9c7761>....</TD><TD BGCOLOR=#9b7b63>....</TD><TD BGCOLOR=#977b64>....</TD><TD BGCOLOR=#917965>....</TD><TD BGCOLOR=#867665>....</TD><TD BGCOLOR=#7c7061>....</TD><TD BGCOLOR=#7a695c>....</TD><TD BGCOLOR=#74695a>....</TD><TD BGCOLOR=#756459>....</TD><TD BGCOLOR=#76635b>....</TD><TD BGCOLOR=#77645d>....</TD><TD BGCOLOR=#77645c>....</TD><TD BGCOLOR=#756d61>....</TD><TD BGCOLOR=#7d7164>....</TD><TD BGCOLOR=#887367>....</TD><TD BGCOLOR=#886f63>....</TD><TD BGCOLOR=#916e5d>....</TD><TD BGCOLOR=#946f5d>....</TD><TD BGCOLOR=#946959>....</TD><TD BGCOLOR=#906651>....</TD><TD BGCOLOR=#8c6450>....</TD><TD BGCOLOR=#946556>....</TD><TD BGCOLOR=#905b50>....</TD><TD BGCOLOR=#a06354>....</TD><TD BGCOLOR=#9a644e>....</TD><TD BGCOLOR=#966a54>....</TD><TD BGCOLOR=#986d59>....</TD><TD BGCOLOR=#937661>....</TD><TD BGCOLOR=#937366>....</TD><TD BGCOLOR=#866f64>....</TD><TD BGCOLOR=#716e60>....</TD><TD BGCOLOR=#706865>....</TD><TD BGCOLOR=#756e6a>....</TD><TD BGCOLOR=#787667>....</TD><TD BGCOLOR=#7e796b>....</TD><TD BGCOLOR=#807b72>....</TD><TD BGCOLOR=#8c7f74>....</TD><TD BGCOLOR=#8e7a69>....</TD><TD BGCOLOR=#8f7a6b>....</TD><TD BGCOLOR=#937869>....</TD><TD BGCOLOR=#9b7a63>....</TD><TD BGCOLOR=#9e7c64>....</TD><TD BGCOLOR=#a07c68>....</TD><TD BGCOLOR=#a3846c>....</TD><TD BGCOLOR=#937760>....</TD><TD BGCOLOR=#83644e>....</TD><TD BGCOLOR=#91715a>....</TD><TD BGCOLOR=#8f7160>....</TD><TD BGCOLOR=#947d72>....</TD><TD BGCOLOR=#968b7e>....</TD><TD BGCOLOR=#96867a>....</TD><TD BGCOLOR=#8a7369>....</TD><TD BGCOLOR=#826a61>....</TD></TR> <TR><TD BGCOLOR=#200c05 COLSPAN=3>....</TD><TD BGCOLOR=#1e0a04>....</TD><TD BGCOLOR=#1e0c05>....</TD><TD BGCOLOR=#1a0f06>....</TD><TD BGCOLOR=#1f0c05>....</TD><TD BGCOLOR=#210c06>....</TD><TD BGCOLOR=#1e0c04>....</TD><TD BGCOLOR=#200c05>....</TD><TD BGCOLOR=#200c06>....</TD><TD BGCOLOR=#210d06>....</TD><TD BGCOLOR=#220f06>....</TD><TD BGCOLOR=#1d0703>....</TD><TD BGCOLOR=#250a09>....</TD><TD BGCOLOR=#290c03>....</TD><TD BGCOLOR=#350902>....</TD><TD BGCOLOR=#504934>....</TD><TD BGCOLOR=#5b543b>....</TD><TD BGCOLOR=#61563c>....</TD><TD BGCOLOR=#625542>....</TD><TD BGCOLOR=#676e4f>....</TD><TD BGCOLOR=#6a5c43>....</TD><TD BGCOLOR=#676952>....</TD><TD BGCOLOR=#635d49>....</TD><TD BGCOLOR=#595c47>....</TD><TD BGCOLOR=#59573b>....</TD><TD BGCOLOR=#4f3e1c>....</TD><TD BGCOLOR=#533714>....</TD><TD BGCOLOR=#4f300e>....</TD><TD BGCOLOR=#4f2c0b>....</TD><TD BGCOLOR=#502d0a>....</TD><TD BGCOLOR=#4b2f08>....</TD><TD BGCOLOR=#4e330f>....</TD><TD BGCOLOR=#532f12>....</TD><TD BGCOLOR=#5a2c14>....</TD><TD BGCOLOR=#775746>....</TD><TD BGCOLOR=#877e70>....</TD><TD BGCOLOR=#998b77>....</TD><TD BGCOLOR=#a68877>....</TD><TD BGCOLOR=#b08e7d>....</TD><TD BGCOLOR=#b3917e>....</TD><TD BGCOLOR=#b7967f>....</TD><TD BGCOLOR=#bc997c>....</TD><TD BGCOLOR=#c09c80>....</TD><TD BGCOLOR=#c39e87>....</TD><TD BGCOLOR=#c7a18c>....</TD><TD BGCOLOR=#d1a990>....</TD><TD BGCOLOR=#c0b09d>....</TD><TD BGCOLOR=#9c8978>....</TD><TD BGCOLOR=#794c3b>....</TD><TD BGCOLOR=#a9786b>....</TD><TD BGCOLOR=#d18d80>....</TD><TD BGCOLOR=#eaa692>....</TD><TD BGCOLOR=#e7ac91>....</TD><TD BGCOLOR=#dfa18d>....</TD><TD BGCOLOR=#dd9a90>....</TD><TD BGCOLOR=#e09a90>....</TD><TD BGCOLOR=#e19286>....</TD><TD BGCOLOR=#dd9283>....</TD><TD BGCOLOR=#d19a85>....</TD><TD BGCOLOR=#c0927a>....</TD><TD BGCOLOR=#a2785c>....</TD><TD BGCOLOR=#977b68>....</TD><TD BGCOLOR=#967b5e>....</TD><TD BGCOLOR=#927561>....</TD><TD BGCOLOR=#85715f>....</TD><TD BGCOLOR=#7e6e60>....</TD><TD BGCOLOR=#7f6d60>....</TD><TD BGCOLOR=#7b6353>....</TD><TD BGCOLOR=#6f6b5e>....</TD><TD BGCOLOR=#73665d>....</TD><TD BGCOLOR=#745e58>....</TD><TD BGCOLOR=#705d56>....</TD><TD BGCOLOR=#6f6157>....</TD><TD BGCOLOR=#6e6b5a>....</TD><TD BGCOLOR=#796d5b>....</TD><TD BGCOLOR=#82695c>....</TD><TD BGCOLOR=#8a6e67>....</TD><TD BGCOLOR=#926c5b>....</TD><TD BGCOLOR=#946c56>....</TD><TD BGCOLOR=#986f5c>....</TD><TD BGCOLOR=#9a745b>....</TD><TD BGCOLOR=#986a58>....</TD><TD BGCOLOR=#926053>....</TD><TD BGCOLOR=#8d6357>....</TD><TD BGCOLOR=#986656>....</TD><TD BGCOLOR=#96624d>....</TD><TD BGCOLOR=#926d55>....</TD><TD BGCOLOR=#916f5a>....</TD><TD BGCOLOR=#897662>....</TD><TD BGCOLOR=#8a6961>....</TD><TD BGCOLOR=#76615b>....</TD><TD BGCOLOR=#6a685b>....</TD><TD BGCOLOR=#716b65>....</TD><TD BGCOLOR=#776d67>....</TD><TD BGCOLOR=#7d7063>....</TD><TD BGCOLOR=#82705e>....</TD><TD BGCOLOR=#817365>....</TD><TD BGCOLOR=#847565>....</TD><TD BGCOLOR=#877361>....</TD><TD BGCOLOR=#877567>....</TD><TD BGCOLOR=#887566>....</TD><TD BGCOLOR=#92755e>....</TD><TD BGCOLOR=#99755e>....</TD><TD BGCOLOR=#9a755f>....</TD><TD BGCOLOR=#9b7a5f>....</TD><TD BGCOLOR=#937e64>....</TD><TD BGCOLOR=#98826a>....</TD><TD BGCOLOR=#a0856d>....</TD><TD BGCOLOR=#aa8b75>....</TD><TD BGCOLOR=#b2907a>....</TD><TD BGCOLOR=#b0a08a>....</TD><TD BGCOLOR=#b6a793>....</TD><TD BGCOLOR=#b4a18d>....</TD><TD BGCOLOR=#b9a391>....</TD></TR> <TR><TD BGCOLOR=#1c0802 COLSPAN=2>....</TD><TD BGCOLOR=#200c06>....</TD><TD BGCOLOR=#1c0802>....</TD><TD BGCOLOR=#1d0b03>....</TD><TD BGCOLOR=#1a0e06>....</TD><TD BGCOLOR=#210d06>....</TD><TD BGCOLOR=#200b05>....</TD><TD BGCOLOR=#200d06>....</TD><TD BGCOLOR=#1e0a03>....</TD><TD BGCOLOR=#1f0b05>....</TD><TD BGCOLOR=#200c05>....</TD><TD BGCOLOR=#240d06>....</TD><TD BGCOLOR=#200503>....</TD><TD BGCOLOR=#230a08>....</TD><TD BGCOLOR=#240c02>....</TD><TD BGCOLOR=#330902>....</TD><TD BGCOLOR=#4f4833>....</TD><TD BGCOLOR=#5c553c>....</TD><TD BGCOLOR=#60553b>....</TD><TD BGCOLOR=#605343>....</TD><TD BGCOLOR=#646b50>....</TD><TD BGCOLOR=#695b46>....</TD><TD BGCOLOR=#666854>....</TD><TD BGCOLOR=#64594e>....</TD><TD BGCOLOR=#5d5446>....</TD><TD BGCOLOR=#574c31>....</TD><TD BGCOLOR=#4c3811>....</TD><TD BGCOLOR=#57330e>....</TD><TD BGCOLOR=#552e0a>....</TD><TD BGCOLOR=#542906>....</TD><TD BGCOLOR=#522805>....</TD><TD BGCOLOR=#4d2c06>....</TD><TD BGCOLOR=#4d330e>....</TD><TD BGCOLOR=#5c3d1d>....</TD><TD BGCOLOR=#5b341e>....</TD><TD BGCOLOR=#6e5646>....</TD><TD BGCOLOR=#807b6a>....</TD><TD BGCOLOR=#958476>....</TD><TD BGCOLOR=#a48879>....</TD><TD BGCOLOR=#ab8d7b>....</TD><TD BGCOLOR=#af927d>....</TD><TD BGCOLOR=#b3967e>....</TD><TD BGCOLOR=#b4957b>....</TD><TD BGCOLOR=#b7977c>....</TD><TD BGCOLOR=#bc9c80>....</TD><TD BGCOLOR=#bc9e81>....</TD><TD BGCOLOR=#c0a57f>....</TD><TD BGCOLOR=#cca391>....</TD><TD BGCOLOR=#aeb09a>....</TD><TD BGCOLOR=#744942>....</TD><TD BGCOLOR=#976a57>....</TD><TD BGCOLOR=#b98572>....</TD><TD BGCOLOR=#d59482>....</TD><TD BGCOLOR=#d7947f>....</TD><TD BGCOLOR=#ce967f>....</TD><TD BGCOLOR=#cf9687>....</TD><TD BGCOLOR=#cd9485>....</TD><TD BGCOLOR=#cc9384>....</TD><TD BGCOLOR=#cd968b>....</TD><TD BGCOLOR=#c99987>....</TD><TD BGCOLOR=#be9775>....</TD><TD BGCOLOR=#9d7754>....</TD><TD BGCOLOR=#a58976>....</TD><TD BGCOLOR=#9f8467>....</TD><TD BGCOLOR=#977a65>....</TD><TD BGCOLOR=#837763>....</TD><TD BGCOLOR=#7f6f61>....</TD><TD BGCOLOR=#836b5f>....</TD><TD BGCOLOR=#806556>....</TD><TD BGCOLOR=#75665d>....</TD><TD BGCOLOR=#6c5c54>....</TD><TD BGCOLOR=#6e5b54>....</TD><TD BGCOLOR=#6a554d>....</TD><TD BGCOLOR=#625546>....</TD><TD BGCOLOR=#65634e>....</TD><TD BGCOLOR=#726751>....</TD><TD BGCOLOR=#7d6553>....</TD><TD BGCOLOR=#81685e>....</TD><TD BGCOLOR=#86685a>....</TD><TD BGCOLOR=#8b6750>....</TD><TD BGCOLOR=#906a56>....</TD><TD BGCOLOR=#8c6753>....</TD><TD BGCOLOR=#9c6a59>....</TD><TD BGCOLOR=#926753>....</TD><TD BGCOLOR=#936c5a>....</TD><TD BGCOLOR=#966b56>....</TD><TD BGCOLOR=#926c54>....</TD><TD BGCOLOR=#876c56>....</TD><TD BGCOLOR=#8b6f62>....</TD><TD BGCOLOR=#7c6f60>....</TD><TD BGCOLOR=#7e645c>....</TD><TD BGCOLOR=#796c62>....</TD><TD BGCOLOR=#675c55>....</TD><TD BGCOLOR=#6d635b>....</TD><TD BGCOLOR=#6f655d>....</TD><TD BGCOLOR=#75675e>....</TD><TD BGCOLOR=#84695a>....</TD><TD BGCOLOR=#816b60>....</TD><TD BGCOLOR=#856d60>....</TD><TD BGCOLOR=#886d5e>....</TD><TD BGCOLOR=#8b7666>....</TD><TD BGCOLOR=#8a7864>....</TD><TD BGCOLOR=#937a66>....</TD><TD BGCOLOR=#997a67>....</TD><TD BGCOLOR=#96755e>....</TD><TD BGCOLOR=#98765c>....</TD><TD BGCOLOR=#967c64>....</TD><TD BGCOLOR=#9b7c6a>....</TD><TD BGCOLOR=#a68270>....</TD><TD BGCOLOR=#ad8b73>....</TD><TD BGCOLOR=#b29175>....</TD><TD BGCOLOR=#b49a86>....</TD><TD BGCOLOR=#b39988>....</TD><TD BGCOLOR=#bb9d8d>....</TD><TD BGCOLOR=#bd9c8d>....</TD></TR> <TR><TD BGCOLOR=#1c0801 COLSPAN=2>....</TD><TD BGCOLOR=#200c05>....</TD><TD BGCOLOR=#1c0801>....</TD><TD BGCOLOR=#1c0a03>....</TD><TD BGCOLOR=#1a0f07>....</TD><TD BGCOLOR=#210d06>....</TD><TD BGCOLOR=#220d06>....</TD><TD BGCOLOR=#1f0d05>....</TD><TD BGCOLOR=#1f0b04 COLSPAN=2>....</TD><TD BGCOLOR=#200c05>....</TD><TD BGCOLOR=#250b06>....</TD><TD BGCOLOR=#220403>....</TD><TD BGCOLOR=#230908>....</TD><TD BGCOLOR=#200d01>....</TD><TD BGCOLOR=#340b04>....</TD><TD BGCOLOR=#4e4833>....</TD><TD BGCOLOR=#5a5239>....</TD><TD BGCOLOR=#60553b>....</TD><TD BGCOLOR=#645649>....</TD><TD BGCOLOR=#697058>....</TD><TD BGCOLOR=#685a49>....</TD><TD BGCOLOR=#5f6150>....</TD><TD BGCOLOR=#615543>....</TD><TD BGCOLOR=#5c4a3c>....</TD><TD BGCOLOR=#56422d>....</TD><TD BGCOLOR=#463112>....</TD><TD BGCOLOR=#4d3311>....</TD><TD BGCOLOR=#4b2e0d>....</TD><TD BGCOLOR=#4d2c0c>....</TD><TD BGCOLOR=#522c0e>....</TD><TD BGCOLOR=#4f280d>....</TD><TD BGCOLOR=#55381d>....</TD><TD BGCOLOR=#5c3f27>....</TD><TD BGCOLOR=#5d3d28>....</TD><TD BGCOLOR=#67573e>....</TD><TD BGCOLOR=#79785d>....</TD><TD BGCOLOR=#907f6d>....</TD><TD BGCOLOR=#a18577>....</TD><TD BGCOLOR=#a88d7a>....</TD><TD BGCOLOR=#ac907b>....</TD><TD BGCOLOR=#b39880>....</TD><TD BGCOLOR=#b49680>....</TD><TD BGCOLOR=#b99b83>....</TD><TD BGCOLOR=#b89b7d>....</TD><TD BGCOLOR=#b89a79>....</TD><TD BGCOLOR=#bb9b7c>....</TD><TD BGCOLOR=#b59e83>....</TD><TD BGCOLOR=#b69e8e>....</TD><TD BGCOLOR=#958173>....</TD><TD BGCOLOR=#7b4934>....</TD><TD BGCOLOR=#b1876f>....</TD><TD BGCOLOR=#ca9481>....</TD><TD BGCOLOR=#c18372>....</TD><TD BGCOLOR=#ab806c>....</TD><TD BGCOLOR=#9d756a>....</TD><TD BGCOLOR=#926e60>....</TD><TD BGCOLOR=#856655>....</TD><TD BGCOLOR=#95726b>....</TD><TD BGCOLOR=#9b706d>....</TD><TD BGCOLOR=#97725c>....</TD><TD BGCOLOR=#977252>....</TD><TD BGCOLOR=#a28774>....</TD><TD BGCOLOR=#a08568>....</TD><TD BGCOLOR=#9a7d69>....</TD><TD BGCOLOR=#7e7a62>....</TD><TD BGCOLOR=#7e6e60>....</TD><TD BGCOLOR=#806259>....</TD><TD BGCOLOR=#7c5e50>....</TD><TD BGCOLOR=#725852>....</TD><TD BGCOLOR=#6a5850>....</TD><TD BGCOLOR=#68574f>....</TD><TD BGCOLOR=#654e48>....</TD><TD BGCOLOR=#5a4b42>....</TD><TD BGCOLOR=#5c5949>....</TD><TD BGCOLOR=#6e6252>....</TD><TD BGCOLOR=#7f6656>....</TD><TD BGCOLOR=#816a60>....</TD><TD BGCOLOR=#856f63>....</TD><TD BGCOLOR=#87684f>....</TD><TD BGCOLOR=#8a6250>....</TD><TD BGCOLOR=#89725c>....</TD><TD BGCOLOR=#8d7158>....</TD><TD BGCOLOR=#965f4b>....</TD><TD BGCOLOR=#a06755>....</TD><TD BGCOLOR=#9a6a54>....</TD><TD BGCOLOR=#937057>....</TD><TD BGCOLOR=#8b6f5e>....</TD><TD BGCOLOR=#8a6d61>....</TD><TD BGCOLOR=#807260>....</TD><TD BGCOLOR=#866c5d>....</TD><TD BGCOLOR=#6c5d4b>....</TD><TD BGCOLOR=#665350>....</TD><TD BGCOLOR=#66574d>....</TD><TD BGCOLOR=#655a50>....</TD><TD BGCOLOR=#6c6059>....</TD><TD BGCOLOR=#785f50>....</TD><TD BGCOLOR=#7f6c60>....</TD><TD BGCOLOR=#856f62>....</TD><TD BGCOLOR=#896d5e>....</TD><TD BGCOLOR=#917765>....</TD><TD BGCOLOR=#8e7d64>....</TD><TD BGCOLOR=#927d6b>....</TD><TD BGCOLOR=#957c6c>....</TD><TD BGCOLOR=#997c64>....</TD><TD BGCOLOR=#9f7d62>....</TD><TD BGCOLOR=#9c7d67>....</TD><TD BGCOLOR=#9e7d6d>....</TD><TD BGCOLOR=#a98778>....</TD><TD BGCOLOR=#a98c7d>....</TD><TD BGCOLOR=#ab9181>....</TD><TD BGCOLOR=#b29888>....</TD><TD BGCOLOR=#b59a89>....</TD><TD BGCOLOR=#b99a8b>....</TD><TD BGCOLOR=#bb9a8b>....</TD></TR> <TR><TD BGCOLOR=#190b02 COLSPAN=2>....</TD><TD BGCOLOR=#200a04>....</TD><TD BGCOLOR=#210702>....</TD><TD BGCOLOR=#1f0802>....</TD><TD BGCOLOR=#1c0b04>....</TD><TD BGCOLOR=#210d06>....</TD><TD BGCOLOR=#220e07>....</TD><TD BGCOLOR=#1f0c05>....</TD><TD BGCOLOR=#1f0b04>....</TD><TD BGCOLOR=#1e0a04>....</TD><TD BGCOLOR=#1e0a03>....</TD><TD BGCOLOR=#220804>....</TD><TD BGCOLOR=#210804>....</TD><TD BGCOLOR=#1d0d05>....</TD><TD BGCOLOR=#1b0e01>....</TD><TD BGCOLOR=#330b04>....</TD><TD BGCOLOR=#524632>....</TD><TD BGCOLOR=#5a5239>....</TD><TD BGCOLOR=#62543b>....</TD><TD BGCOLOR=#655943>....</TD><TD BGCOLOR=#6a715b>....</TD><TD BGCOLOR=#655c42>....</TD><TD BGCOLOR=#65614d>....</TD><TD BGCOLOR=#5f5239>....</TD><TD BGCOLOR=#584629>....</TD><TD BGCOLOR=#50371c>....</TD><TD BGCOLOR=#4a300b>....</TD><TD BGCOLOR=#4c330d>....</TD><TD BGCOLOR=#4b2d0b>....</TD><TD BGCOLOR=#472c0c>....</TD><TD BGCOLOR=#492d0b>....</TD><TD BGCOLOR=#4c2c0f>....</TD><TD BGCOLOR=#554434>....</TD><TD BGCOLOR=#5a4333>....</TD><TD BGCOLOR=#60412c>....</TD><TD BGCOLOR=#65553d>....</TD><TD BGCOLOR=#76725a>....</TD><TD BGCOLOR=#8b7a6c>....</TD><TD BGCOLOR=#947e6e>....</TD><TD BGCOLOR=#9f8979>....</TD><TD BGCOLOR=#a78c7e>....</TD><TD BGCOLOR=#b09281>....</TD><TD BGCOLOR=#b4927d>....</TD><TD BGCOLOR=#b89781>....</TD><TD BGCOLOR=#b99c82>....</TD><TD BGCOLOR=#b49b7e>....</TD><TD BGCOLOR=#ba9c83>....</TD><TD BGCOLOR=#af9b82>....</TD><TD BGCOLOR=#bb9b8a>....</TD><TD BGCOLOR=#b19e8b>....</TD><TD BGCOLOR=#83634e>....</TD><TD BGCOLOR=#896650>....</TD><TD BGCOLOR=#8e6a5a>....</TD><TD BGCOLOR=#906e62>....</TD><TD BGCOLOR=#8f725d>....</TD><TD BGCOLOR=#92755b>....</TD><TD BGCOLOR=#98836c>....</TD><TD BGCOLOR=#907f67>....</TD><TD BGCOLOR=#927a62>....</TD><TD BGCOLOR=#9b7c6a>....</TD><TD BGCOLOR=#a48570>....</TD><TD BGCOLOR=#a4896f>....</TD><TD BGCOLOR=#9c8771>....</TD><TD BGCOLOR=#978269>....</TD><TD BGCOLOR=#907b64>....</TD><TD BGCOLOR=#867661>....</TD><TD BGCOLOR=#836d62>....</TD><TD BGCOLOR=#7f625d>....</TD><TD BGCOLOR=#73574d>....</TD><TD BGCOLOR=#654c4d>....</TD><TD BGCOLOR=#63544f>....</TD><TD BGCOLOR=#63544b>....</TD><TD BGCOLOR=#615149>....</TD><TD BGCOLOR=#584f4b>....</TD><TD BGCOLOR=#5c3e35>....</TD><TD BGCOLOR=#6b5746>....</TD><TD BGCOLOR=#776452>....</TD><TD BGCOLOR=#816e5d>....</TD><TD BGCOLOR=#8d6f5f>....</TD><TD BGCOLOR=#936754>....</TD><TD BGCOLOR=#936354>....</TD><TD BGCOLOR=#8e6b5b>....</TD><TD BGCOLOR=#916957>....</TD><TD BGCOLOR=#9c6051>....</TD><TD BGCOLOR=#9b6555>....</TD><TD BGCOLOR=#986d59>....</TD><TD BGCOLOR=#987260>....</TD><TD BGCOLOR=#906c65>....</TD><TD BGCOLOR=#897362>....</TD><TD BGCOLOR=#857762>....</TD><TD BGCOLOR=#7f6959>....</TD><TD BGCOLOR=#675243>....</TD><TD BGCOLOR=#6e524b>....</TD><TD BGCOLOR=#674f47>....</TD><TD BGCOLOR=#645244>....</TD><TD BGCOLOR=#6b5d4b>....</TD><TD BGCOLOR=#756050>....</TD><TD BGCOLOR=#756858>....</TD><TD BGCOLOR=#796b5a>....</TD><TD BGCOLOR=#887464>....</TD><TD BGCOLOR=#8f7968>....</TD><TD BGCOLOR=#8f7d67>....</TD><TD BGCOLOR=#8e7b66>....</TD><TD BGCOLOR=#927d6b>....</TD><TD BGCOLOR=#987b6a>....</TD><TD BGCOLOR=#9b7965>....</TD><TD BGCOLOR=#9b7f6a>....</TD><TD BGCOLOR=#99806c>....</TD><TD BGCOLOR=#a08578>....</TD><TD BGCOLOR=#a68880>....</TD><TD BGCOLOR=#ab8c81>....</TD><TD BGCOLOR=#ab998a>....</TD><TD BGCOLOR=#b29a8c>....</TD><TD BGCOLOR=#b79a8b>....</TD><TD BGCOLOR=#b59787>....</TD></TR> <TR><TD BGCOLOR=#1d0f06 COLSPAN=2>....</TD><TD BGCOLOR=#1f0803>....</TD><TD BGCOLOR=#210602>....</TD><TD BGCOLOR=#1e0902>....</TD><TD BGCOLOR=#1d0903>....</TD><TD BGCOLOR=#230f08>....</TD><TD BGCOLOR=#220e07>....</TD><TD BGCOLOR=#200c06>....</TD><TD BGCOLOR=#1f0b04>....</TD><TD BGCOLOR=#1e0a04>....</TD><TD BGCOLOR=#1d0902>....</TD><TD BGCOLOR=#200804>....</TD><TD BGCOLOR=#1e0803>....</TD><TD BGCOLOR=#1d0f05>....</TD><TD BGCOLOR=#1b0c01>....</TD><TD BGCOLOR=#330b04>....</TD><TD BGCOLOR=#514431>....</TD><TD BGCOLOR=#595239>....</TD><TD BGCOLOR=#5f5238>....</TD><TD BGCOLOR=#63593e>....</TD><TD BGCOLOR=#656c58>....</TD><TD BGCOLOR=#625c3c>....</TD><TD BGCOLOR=#645f49>....</TD><TD BGCOLOR=#584f37>....</TD><TD BGCOLOR=#4e401f>....</TD><TD BGCOLOR=#493416>....</TD><TD BGCOLOR=#493008>....</TD><TD BGCOLOR=#4e300a>....</TD><TD BGCOLOR=#4e2e0b>....</TD><TD BGCOLOR=#442908>....</TD><TD BGCOLOR=#452a07>....</TD><TD BGCOLOR=#4e3316>....</TD><TD BGCOLOR=#5a4d41>....</TD><TD BGCOLOR=#5b4638>....</TD><TD BGCOLOR=#654733>....</TD><TD BGCOLOR=#665340>....</TD><TD BGCOLOR=#746e5a>....</TD><TD BGCOLOR=#837466>....</TD><TD BGCOLOR=#8e7b69>....</TD><TD BGCOLOR=#937f71>....</TD><TD BGCOLOR=#9e867b>....</TD><TD BGCOLOR=#a88e7e>....</TD><TD BGCOLOR=#ad8d77>....</TD><TD BGCOLOR=#b5967e>....</TD><TD BGCOLOR=#b1967d>....</TD><TD BGCOLOR=#b29980>....</TD><TD BGCOLOR=#b39980>....</TD><TD BGCOLOR=#b69b86>....</TD><TD BGCOLOR=#b69b87>....</TD><TD BGCOLOR=#b29786>....</TD><TD BGCOLOR=#b79a86>....</TD><TD BGCOLOR=#af8a76>....</TD><TD BGCOLOR=#ac907f>....</TD><TD BGCOLOR=#a09181>....</TD><TD BGCOLOR=#a58f76>....</TD><TD BGCOLOR=#a99070>....</TD><TD BGCOLOR=#a48b71>....</TD><TD BGCOLOR=#9e856d>....</TD><TD BGCOLOR=#9c8062>....</TD><TD BGCOLOR=#a08167>....</TD><TD BGCOLOR=#a17e69>....</TD><TD BGCOLOR=#9d856f>....</TD><TD BGCOLOR=#96846e>....</TD><TD BGCOLOR=#928069>....</TD><TD BGCOLOR=#8c7a63>....</TD><TD BGCOLOR=#826d59>....</TD><TD BGCOLOR=#7e665c>....</TD><TD BGCOLOR=#7a615d>....</TD><TD BGCOLOR=#6d554c>....</TD><TD BGCOLOR=#64504c>....</TD><TD BGCOLOR=#61534b>....</TD><TD BGCOLOR=#615348>....</TD><TD BGCOLOR=#66584d>....</TD><TD BGCOLOR=#5e5850>....</TD><TD BGCOLOR=#633e36>....</TD><TD BGCOLOR=#614938>....</TD><TD BGCOLOR=#715f4d>....</TD><TD BGCOLOR=#806857>....</TD><TD BGCOLOR=#8b6c5a>....</TD><TD BGCOLOR=#906856>....</TD><TD BGCOLOR=#926557>....</TD><TD BGCOLOR=#936358>....</TD><TD BGCOLOR=#956456>....</TD><TD BGCOLOR=#926150>....</TD><TD BGCOLOR=#986956>....</TD><TD BGCOLOR=#9f735b>....</TD><TD BGCOLOR=#956c59>....</TD><TD BGCOLOR=#916961>....</TD><TD BGCOLOR=#80705d>....</TD><TD BGCOLOR=#7b6f5c>....</TD><TD BGCOLOR=#665648>....</TD><TD BGCOLOR=#604b40>....</TD><TD BGCOLOR=#644b38>....</TD><TD BGCOLOR=#634a3f>....</TD><TD BGCOLOR=#645044>....</TD><TD BGCOLOR=#675443>....</TD><TD BGCOLOR=#6f584a>....</TD><TD BGCOLOR=#6d5f4e>....</TD><TD BGCOLOR=#756756>....</TD><TD BGCOLOR=#7e6d5b>....</TD><TD BGCOLOR=#887662>....</TD><TD BGCOLOR=#8b7a62>....</TD><TD BGCOLOR=#8c7b60>....</TD><TD BGCOLOR=#907c67>....</TD><TD BGCOLOR=#967b6d>....</TD><TD BGCOLOR=#957866>....</TD><TD BGCOLOR=#9d846f>....</TD><TD BGCOLOR=#9c8774>....</TD><TD BGCOLOR=#9d8679>....</TD><TD BGCOLOR=#a2877e>....</TD><TD BGCOLOR=#a88b7e>....</TD><TD BGCOLOR=#a39485>....</TD><TD BGCOLOR=#ac9589>....</TD><TD BGCOLOR=#b39587>....</TD><TD BGCOLOR=#af9381>....</TD></TR> <TR><TD BGCOLOR=#210d07 COLSPAN=2>....</TD><TD BGCOLOR=#210704>....</TD><TD BGCOLOR=#210903>....</TD><TD BGCOLOR=#1c0b03>....</TD><TD BGCOLOR=#1e0a03>....</TD><TD BGCOLOR=#210d07>....</TD><TD BGCOLOR=#1f0b04>....</TD><TD BGCOLOR=#1e0a04>....</TD><TD BGCOLOR=#1f0b04>....</TD><TD BGCOLOR=#1f0b05>....</TD><TD BGCOLOR=#1d0902>....</TD><TD BGCOLOR=#210905>....</TD><TD BGCOLOR=#1d0803>....</TD><TD BGCOLOR=#200f06>....</TD><TD BGCOLOR=#220b02>....</TD><TD BGCOLOR=#330a03>....</TD><TD BGCOLOR=#504732>....</TD><TD BGCOLOR=#575339>....</TD><TD BGCOLOR=#5e553a>....</TD><TD BGCOLOR=#62583d>....</TD><TD BGCOLOR=#656c57>....</TD><TD BGCOLOR=#615b3b>....</TD><TD BGCOLOR=#625d47>....</TD><TD BGCOLOR=#564c33>....</TD><TD BGCOLOR=#483918>....</TD><TD BGCOLOR=#493314>....</TD><TD BGCOLOR=#4c3109>....</TD><TD BGCOLOR=#51320c>....</TD><TD BGCOLOR=#482d08>....</TD><TD BGCOLOR=#412906>....</TD><TD BGCOLOR=#44280b>....</TD><TD BGCOLOR=#563926>....</TD><TD BGCOLOR=#5e4d41>....</TD><TD BGCOLOR=#5b4737>....</TD><TD BGCOLOR=#644b3a>....</TD><TD BGCOLOR=#685646>....</TD><TD BGCOLOR=#726553>....</TD><TD BGCOLOR=#837663>....</TD><TD BGCOLOR=#8d7a67>....</TD><TD BGCOLOR=#8f7b6d>....</TD><TD BGCOLOR=#948074>....</TD><TD BGCOLOR=#9c8a78>....</TD><TD BGCOLOR=#a48e75>....</TD><TD BGCOLOR=#aa9178>....</TD><TD BGCOLOR=#ae947b>....</TD><TD BGCOLOR=#b0957d>....</TD><TD BGCOLOR=#b2987f>....</TD><TD BGCOLOR=#b19781>....</TD><TD BGCOLOR=#b29784>....</TD><TD BGCOLOR=#b59987>....</TD><TD BGCOLOR=#b99581>....</TD><TD BGCOLOR=#bd937e>....</TD><TD BGCOLOR=#af937f>....</TD><TD BGCOLOR=#ab9a86>....</TD><TD BGCOLOR=#a99278>....</TD><TD BGCOLOR=#a68d70>....</TD><TD BGCOLOR=#a5866e>....</TD><TD BGCOLOR=#a3826b>....</TD><TD BGCOLOR=#997b61>....</TD><TD BGCOLOR=#a27f6a>....</TD><TD BGCOLOR=#9f7968>....</TD><TD BGCOLOR=#947a68>....</TD><TD BGCOLOR=#897663>....</TD><TD BGCOLOR=#8a7864>....</TD><TD BGCOLOR=#877461>....</TD><TD BGCOLOR=#7f6d59>....</TD><TD BGCOLOR=#786459>....</TD><TD BGCOLOR=#705b55>....</TD><TD BGCOLOR=#665247>....</TD><TD BGCOLOR=#675545>....</TD><TD BGCOLOR=#665948>....</TD><TD BGCOLOR=#6d6050>....</TD><TD BGCOLOR=#726255>....</TD><TD BGCOLOR=#686656>....</TD><TD BGCOLOR=#684f47>....</TD><TD BGCOLOR=#52372c>....</TD><TD BGCOLOR=#665646>....</TD><TD BGCOLOR=#775e51>....</TD><TD BGCOLOR=#836a5a>....</TD><TD BGCOLOR=#866c58>....</TD><TD BGCOLOR=#8e6959>....</TD><TD BGCOLOR=#8e5f53>....</TD><TD BGCOLOR=#8a5c4d>....</TD><TD BGCOLOR=#855947>....</TD><TD BGCOLOR=#996854>....</TD><TD BGCOLOR=#986a51>....</TD><TD BGCOLOR=#936c54>....</TD><TD BGCOLOR=#8c6b5e>....</TD><TD BGCOLOR=#796e5d>....</TD><TD BGCOLOR=#6c6252>....</TD><TD BGCOLOR=#625549>....</TD><TD BGCOLOR=#6a5a50>....</TD><TD BGCOLOR=#6d5d45>....</TD><TD BGCOLOR=#665344>....</TD><TD BGCOLOR=#675349>....</TD><TD BGCOLOR=#675043>....</TD><TD BGCOLOR=#6a4f43>....</TD><TD BGCOLOR=#6c5a4a>....</TD><TD BGCOLOR=#726151>....</TD><TD BGCOLOR=#796555>....</TD><TD BGCOLOR=#7e6b58>....</TD><TD BGCOLOR=#8b7962>....</TD><TD BGCOLOR=#8d7c61>....</TD><TD BGCOLOR=#8e7965>....</TD><TD BGCOLOR=#957f6f>....</TD><TD BGCOLOR=#98836f>....</TD><TD BGCOLOR=#9c8770>....</TD><TD BGCOLOR=#958072>....</TD><TD BGCOLOR=#998579>....</TD><TD BGCOLOR=#9b897b>....</TD><TD BGCOLOR=#98867b>....</TD><TD BGCOLOR=#978b7d>....</TD><TD BGCOLOR=#a08a7d>....</TD><TD BGCOLOR=#aa8c7d>....</TD><TD BGCOLOR=#a78b7a>....</TD></TR> <TR><TD BGCOLOR=#200804 COLSPAN=2>....</TD><TD BGCOLOR=#230805>....</TD><TD BGCOLOR=#1e0a03>....</TD><TD BGCOLOR=#1a0d04>....</TD><TD BGCOLOR=#1e0a03>....</TD><TD BGCOLOR=#200b04>....</TD><TD BGCOLOR=#1f0a04>....</TD><TD BGCOLOR=#1e0903>....</TD><TD BGCOLOR=#200b04>....</TD><TD BGCOLOR=#1f0b04>....</TD><TD BGCOLOR=#1e0a03>....</TD><TD BGCOLOR=#1e0904>....</TD><TD BGCOLOR=#1c0803>....</TD><TD BGCOLOR=#220d06>....</TD><TD BGCOLOR=#260701>....</TD><TD BGCOLOR=#310702>....</TD><TD BGCOLOR=#4f4833>....</TD><TD BGCOLOR=#555539>....</TD><TD BGCOLOR=#5d563a>....</TD><TD BGCOLOR=#61573d>....</TD><TD BGCOLOR=#666d58>....</TD><TD BGCOLOR=#625c3c>....</TD><TD BGCOLOR=#5e5842>....</TD><TD BGCOLOR=#574526>....</TD><TD BGCOLOR=#4c360e>....</TD><TD BGCOLOR=#51320e>....</TD><TD BGCOLOR=#512f02>....</TD><TD BGCOLOR=#502f09>....</TD><TD BGCOLOR=#49320b>....</TD><TD BGCOLOR=#432b09>....</TD><TD BGCOLOR=#45270e>....</TD><TD BGCOLOR=#5c4034>....</TD><TD BGCOLOR=#5f4a3e>....</TD><TD BGCOLOR=#5d4938>....</TD><TD BGCOLOR=#634e3f>....</TD><TD BGCOLOR=#69554a>....</TD><TD BGCOLOR=#746452>....</TD><TD BGCOLOR=#7b6f57>....</TD><TD BGCOLOR=#897761>....</TD><TD BGCOLOR=#8e7a6c>....</TD><TD BGCOLOR=#928275>....</TD><TD BGCOLOR=#928873>....</TD><TD BGCOLOR=#9a8c70>....</TD><TD BGCOLOR=#9f8d71>....</TD><TD BGCOLOR=#a78e75>....</TD><TD BGCOLOR=#ad9179>....</TD><TD BGCOLOR=#b0957d>....</TD><TD BGCOLOR=#b19680>....</TD><TD BGCOLOR=#b39884>....</TD><TD BGCOLOR=#b19683>....</TD><TD BGCOLOR=#b4967d>....</TD><TD BGCOLOR=#b88e76>....</TD><TD BGCOLOR=#b89580>....</TD><TD BGCOLOR=#b59785>....</TD><TD BGCOLOR=#af8e78>....</TD><TD BGCOLOR=#a48b73>....</TD><TD BGCOLOR=#a78c74>....</TD><TD BGCOLOR=#a88c74>....</TD><TD BGCOLOR=#a18870>....</TD><TD BGCOLOR=#9d806c>....</TD><TD BGCOLOR=#9b7a6a>....</TD><TD BGCOLOR=#967e6f>....</TD><TD BGCOLOR=#8d7a6b>....</TD><TD BGCOLOR=#887565>....</TD><TD BGCOLOR=#806d5e>....</TD><TD BGCOLOR=#7a6a56>....</TD><TD BGCOLOR=#716154>....</TD><TD BGCOLOR=#65544c>....</TD><TD BGCOLOR=#675649>....</TD><TD BGCOLOR=#6d5c42>....</TD><TD BGCOLOR=#6e634a>....</TD><TD BGCOLOR=#716452>....</TD><TD BGCOLOR=#776656>....</TD><TD BGCOLOR=#6a6a53>....</TD><TD BGCOLOR=#66574e>....</TD><TD BGCOLOR=#50332e>....</TD><TD BGCOLOR=#5c5241>....</TD><TD BGCOLOR=#69594b>....</TD><TD BGCOLOR=#766253>....</TD><TD BGCOLOR=#7d6655>....</TD><TD BGCOLOR=#856757>....</TD><TD BGCOLOR=#8c6658>....</TD><TD BGCOLOR=#885e4e>....</TD><TD BGCOLOR=#885948>....</TD><TD BGCOLOR=#8e5e4d>....</TD><TD BGCOLOR=#926954>....</TD><TD BGCOLOR=#8a6d59>....</TD><TD BGCOLOR=#7c685d>....</TD><TD BGCOLOR=#70695a>....</TD><TD BGCOLOR=#5c5546>....</TD><TD BGCOLOR=#54483f>....</TD><TD BGCOLOR=#5e4f49>....</TD><TD BGCOLOR=#635947>....</TD><TD BGCOLOR=#6e5f53>....</TD><TD BGCOLOR=#695647>....</TD><TD BGCOLOR=#654e3b>....</TD><TD BGCOLOR=#694b40>....</TD><TD BGCOLOR=#6a5547>....</TD><TD BGCOLOR=#715d4e>....</TD><TD BGCOLOR=#755f52>....</TD><TD BGCOLOR=#7b675d>....</TD><TD BGCOLOR=#816e60>....</TD><TD BGCOLOR=#877463>....</TD><TD BGCOLOR=#907a6b>....</TD><TD BGCOLOR=#927f6e>....</TD><TD BGCOLOR=#93856f>....</TD><TD BGCOLOR=#927f68>....</TD><TD BGCOLOR=#988279>....</TD><TD BGCOLOR=#97877b>....</TD><TD BGCOLOR=#8f8473>....</TD><TD BGCOLOR=#898177>....</TD><TD BGCOLOR=#8d8276>....</TD><TD BGCOLOR=#998275>....</TD><TD BGCOLOR=#a08274>....</TD><TD BGCOLOR=#a28675>....</TD></TR> </TABLE><TABLE CELLPADDING=0 CELLSPACING=0 BORDER=0> <TR><TD BGCOLOR=#1e0805>....</TD><TD BGCOLOR=#1e0805>....</TD><TD BGCOLOR=#200704>....</TD><TD BGCOLOR=#240905>....</TD><TD BGCOLOR=#220702>....</TD><TD BGCOLOR=#240b00>....</TD><TD BGCOLOR=#250903>....</TD><TD BGCOLOR=#250706>....</TD><TD BGCOLOR=#230605>....</TD><TD BGCOLOR=#240602>....</TD><TD BGCOLOR=#260503>....</TD><TD BGCOLOR=#190c03>....</TD><TD BGCOLOR=#130b00>....</TD><TD BGCOLOR=#1b0603>....</TD><TD BGCOLOR=#1f090a>....</TD><TD BGCOLOR=#220c01>....</TD><TD BGCOLOR=#300a02>....</TD><TD BGCOLOR=#554634>....</TD><TD BGCOLOR=#59533a>....</TD><TD BGCOLOR=#63543b>....</TD><TD BGCOLOR=#5d5a45>....</TD><TD BGCOLOR=#666b51>....</TD><TD BGCOLOR=#5c5d40>....</TD><TD BGCOLOR=#5c5643>....</TD><TD BGCOLOR=#50411f>....</TD><TD BGCOLOR=#4b340f>....</TD><TD BGCOLOR=#54310d>....</TD><TD BGCOLOR=#552c07>....</TD><TD BGCOLOR=#4d320a>....</TD><TD BGCOLOR=#443109>....</TD><TD BGCOLOR=#402907>....</TD><TD BGCOLOR=#4e311a>....</TD><TD BGCOLOR=#584032>....</TD><TD BGCOLOR=#624d3b>....</TD><TD BGCOLOR=#5c4c35>....</TD><TD BGCOLOR=#624f3c>....</TD><TD BGCOLOR=#6d5246>....</TD><TD BGCOLOR=#786052>....</TD><TD BGCOLOR=#7d6b5a>....</TD><TD BGCOLOR=#88745d>....</TD><TD BGCOLOR=#8b7a63>....</TD><TD BGCOLOR=#8f806d>....</TD><TD BGCOLOR=#917e6f>....</TD><TD BGCOLOR=#988472>....</TD><TD BGCOLOR=#9b8b70>....</TD><TD BGCOLOR=#9f8872>....</TD><TD BGCOLOR=#ae8f76>....</TD><TD BGCOLOR=#a98f76>....</TD><TD BGCOLOR=#ac9279>....</TD><TD BGCOLOR=#ae937c>....</TD><TD BGCOLOR=#ac917a>....</TD><TD BGCOLOR=#b1937b>....</TD><TD BGCOLOR=#b1937a>....</TD><TD BGCOLOR=#b39980>....</TD><TD BGCOLOR=#b69a83>....</TD><TD BGCOLOR=#b0927e>....</TD><TD BGCOLOR=#9e8b73>....</TD><TD BGCOLOR=#a68c76>....</TD><TD BGCOLOR=#a88a74>....</TD><TD BGCOLOR=#9f846e>....</TD><TD BGCOLOR=#9b806b>....</TD><TD BGCOLOR=#9a7e69>....</TD><TD BGCOLOR=#8e7d69>....</TD><TD BGCOLOR=#8c796a>....</TD><TD BGCOLOR=#846e63>....</TD><TD BGCOLOR=#74645a>....</TD><TD BGCOLOR=#73624d>....</TD><TD BGCOLOR=#685847>....</TD><TD BGCOLOR=#625142>....</TD><TD BGCOLOR=#6a5541>....</TD><TD BGCOLOR=#6d5b40>....</TD><TD BGCOLOR=#72634b>....</TD><TD BGCOLOR=#6b5e4d>....</TD><TD BGCOLOR=#67594c>....</TD><TD BGCOLOR=#514236>....</TD><TD BGCOLOR=#463432>....</TD><TD BGCOLOR=#4d3836>....</TD><TD BGCOLOR=#54433a>....</TD><TD BGCOLOR=#634e46>....</TD><TD BGCOLOR=#6e5b4e>....</TD><TD BGCOLOR=#72594b>....</TD><TD BGCOLOR=#7f5f50>....</TD><TD BGCOLOR=#8b665b>....</TD><TD BGCOLOR=#875b53>....</TD><TD BGCOLOR=#875547>....</TD><TD BGCOLOR=#915a4f>....</TD><TD BGCOLOR=#8d6158>....</TD><TD BGCOLOR=#83695b>....</TD><TD BGCOLOR=#7a6357>....</TD><TD BGCOLOR=#67605b>....</TD><TD BGCOLOR=#3e322e>....</TD><TD BGCOLOR=#251310>....</TD><TD BGCOLOR=#3d2b2b>....</TD><TD BGCOLOR=#564c47>....</TD><TD BGCOLOR=#605250>....</TD><TD BGCOLOR=#604f47>....</TD><TD BGCOLOR=#5c4a3a>....</TD><TD BGCOLOR=#664e42>....</TD><TD BGCOLOR=#705448>....</TD><TD BGCOLOR=#735a49>....</TD><TD BGCOLOR=#745f50>....</TD><TD BGCOLOR=#7c685e>....</TD><TD BGCOLOR=#7d6d5b>....</TD><TD BGCOLOR=#88796b>....</TD><TD BGCOLOR=#887368>....</TD><TD BGCOLOR=#93786a>....</TD><TD BGCOLOR=#937a6b>....</TD><TD BGCOLOR=#957a6c>....</TD><TD BGCOLOR=#998677>....</TD><TD BGCOLOR=#948777>....</TD><TD BGCOLOR=#948877>....</TD><TD BGCOLOR=#918676>....</TD><TD BGCOLOR=#8e7f76>....</TD><TD BGCOLOR=#967d76>....</TD><TD BGCOLOR=#9a7c70>....</TD><TD BGCOLOR=#9a806f>....</TD></TR> <TR><TD BGCOLOR=#1d0905 COLSPAN=2>....</TD><TD BGCOLOR=#200704>....</TD><TD BGCOLOR=#240805>....</TD><TD BGCOLOR=#240603>....</TD><TD BGCOLOR=#260a02>....</TD><TD BGCOLOR=#250a03>....</TD><TD BGCOLOR=#230805>....</TD><TD BGCOLOR=#210704>....</TD><TD BGCOLOR=#220602>....</TD><TD BGCOLOR=#220803>....</TD><TD BGCOLOR=#180d03>....</TD><TD BGCOLOR=#160b00>....</TD><TD BGCOLOR=#1b0602>....</TD><TD BGCOLOR=#1b0606>....</TD><TD BGCOLOR=#1e0b00>....</TD><TD BGCOLOR=#2f0a02>....</TD><TD BGCOLOR=#564634>....</TD><TD BGCOLOR=#5a533a>....</TD><TD BGCOLOR=#64533b>....</TD><TD BGCOLOR=#5f5945>....</TD><TD BGCOLOR=#676b51>....</TD><TD BGCOLOR=#5a5c43>....</TD><TD BGCOLOR=#5b503e>....</TD><TD BGCOLOR=#4f401d>....</TD><TD BGCOLOR=#48330f>....</TD><TD BGCOLOR=#52320e>....</TD><TD BGCOLOR=#512e09>....</TD><TD BGCOLOR=#4b320c>....</TD><TD BGCOLOR=#45300b>....</TD><TD BGCOLOR=#3d2505>....</TD><TD BGCOLOR=#543821>....</TD><TD BGCOLOR=#5b4336>....</TD><TD BGCOLOR=#635140>....</TD><TD BGCOLOR=#61513b>....</TD><TD BGCOLOR=#644e3c>....</TD><TD BGCOLOR=#6c5245>....</TD><TD BGCOLOR=#766253>....</TD><TD BGCOLOR=#7b6859>....</TD><TD BGCOLOR=#846e5c>....</TD><TD BGCOLOR=#877662>....</TD><TD BGCOLOR=#8e7e6c>....</TD><TD BGCOLOR=#937c6f>....</TD><TD BGCOLOR=#988173>....</TD><TD BGCOLOR=#998870>....</TD><TD BGCOLOR=#9c8975>....</TD><TD BGCOLOR=#a58b72>....</TD><TD BGCOLOR=#a38b73>....</TD><TD BGCOLOR=#a28972>....</TD><TD BGCOLOR=#a99079>....</TD><TD BGCOLOR=#ac927b>....</TD><TD BGCOLOR=#ac907a>....</TD><TD BGCOLOR=#a98f78>....</TD><TD BGCOLOR=#a9947c>....</TD><TD BGCOLOR=#ab937c>....</TD><TD BGCOLOR=#a88d7a>....</TD><TD BGCOLOR=#a19079>....</TD><TD BGCOLOR=#a18974>....</TD><TD BGCOLOR=#9c806e>....</TD><TD BGCOLOR=#957e6b>....</TD><TD BGCOLOR=#947c6a>....</TD><TD BGCOLOR=#927b68>....</TD><TD BGCOLOR=#8b7a67>....</TD><TD BGCOLOR=#867566>....</TD><TD BGCOLOR=#766357>....</TD><TD BGCOLOR=#705f56>....</TD><TD BGCOLOR=#6b5849>....</TD><TD BGCOLOR=#605446>....</TD><TD BGCOLOR=#5c5245>....</TD><TD BGCOLOR=#615341>....</TD><TD BGCOLOR=#645345>....</TD><TD BGCOLOR=#655343>....</TD><TD BGCOLOR=#56412e>....</TD><TD BGCOLOR=#442e1b>....</TD><TD BGCOLOR=#342014>....</TD><TD BGCOLOR=#2b1916>....</TD><TD BGCOLOR=#4a3c3a>....</TD><TD BGCOLOR=#4f403a>....</TD><TD BGCOLOR=#604a43>....</TD><TD BGCOLOR=#685649>....</TD><TD BGCOLOR=#765c4f>....</TD><TD BGCOLOR=#826154>....</TD><TD BGCOLOR=#846055>....</TD><TD BGCOLOR=#895f55>....</TD><TD BGCOLOR=#88584a>....</TD><TD BGCOLOR=#8d5e50>....</TD><TD BGCOLOR=#8c6659>....</TD><TD BGCOLOR=#816659>....</TD><TD BGCOLOR=#786157>....</TD><TD BGCOLOR=#5b534f>....</TD><TD BGCOLOR=#281a11>....</TD><TD BGCOLOR=#220e04>....</TD><TD BGCOLOR=#241009>....</TD><TD BGCOLOR=#34291e>....</TD><TD BGCOLOR=#4f413b>....</TD><TD BGCOLOR=#58473f>....</TD><TD BGCOLOR=#5f4e3f>....</TD><TD BGCOLOR=#655348>....</TD><TD BGCOLOR=#6c5348>....</TD><TD BGCOLOR=#6e5949>....</TD><TD BGCOLOR=#716151>....</TD><TD BGCOLOR=#776558>....</TD><TD BGCOLOR=#7e6f5f>....</TD><TD BGCOLOR=#817566>....</TD><TD BGCOLOR=#877569>....</TD><TD BGCOLOR=#8c7467>....</TD><TD BGCOLOR=#937a6d>....</TD><TD BGCOLOR=#91796c>....</TD><TD BGCOLOR=#958474>....</TD><TD BGCOLOR=#918473>....</TD><TD BGCOLOR=#938675>....</TD><TD BGCOLOR=#938574>....</TD><TD BGCOLOR=#978177>....</TD><TD BGCOLOR=#9a7f77>....</TD><TD BGCOLOR=#90776b>....</TD><TD BGCOLOR=#8f7f6f>....</TD></TR> <TR><TD BGCOLOR=#1a0500 COLSPAN=2>....</TD><TD BGCOLOR=#1f0602>....</TD><TD BGCOLOR=#200401>....</TD><TD BGCOLOR=#220302>....</TD><TD BGCOLOR=#200300>....</TD><TD BGCOLOR=#200702>....</TD><TD BGCOLOR=#1f0c02>....</TD><TD BGCOLOR=#1d0a01>....</TD><TD BGCOLOR=#1f0903>....</TD><TD BGCOLOR=#170c04>....</TD><TD BGCOLOR=#190e04>....</TD><TD BGCOLOR=#180601>....</TD><TD BGCOLOR=#1b0602>....</TD><TD BGCOLOR=#1f0a05>....</TD><TD BGCOLOR=#200c01>....</TD><TD BGCOLOR=#2e0902>....</TD><TD BGCOLOR=#564634>....</TD><TD BGCOLOR=#575037>....</TD><TD BGCOLOR=#604f37>....</TD><TD BGCOLOR=#645842>....</TD><TD BGCOLOR=#656751>....</TD><TD BGCOLOR=#595a45>....</TD><TD BGCOLOR=#5d4c39>....</TD><TD BGCOLOR=#493816>....</TD><TD BGCOLOR=#432f0a>....</TD><TD BGCOLOR=#4d340d>....</TD><TD BGCOLOR=#482d06>....</TD><TD BGCOLOR=#49310e>....</TD><TD BGCOLOR=#462b0b>....</TD><TD BGCOLOR=#3c2206>....</TD><TD BGCOLOR=#533824>....</TD><TD BGCOLOR=#5f453c>....</TD><TD BGCOLOR=#625545>....</TD><TD BGCOLOR=#625240>....</TD><TD BGCOLOR=#6b5243>....</TD><TD BGCOLOR=#6c5748>....</TD><TD BGCOLOR=#6e6351>....</TD><TD BGCOLOR=#766656>....</TD><TD BGCOLOR=#7e665a>....</TD><TD BGCOLOR=#816e61>....</TD><TD BGCOLOR=#887868>....</TD><TD BGCOLOR=#8e7869>....</TD><TD BGCOLOR=#93796e>....</TD><TD BGCOLOR=#8d7d67>....</TD><TD BGCOLOR=#8e806f>....</TD><TD BGCOLOR=#95846c>....</TD><TD BGCOLOR=#9b856f>....</TD><TD BGCOLOR=#9f8a74>....</TD><TD BGCOLOR=#a08a74>....</TD><TD BGCOLOR=#a38c76>....</TD><TD BGCOLOR=#a68c77>....</TD><TD BGCOLOR=#ab957f>....</TD><TD BGCOLOR=#a39179>....</TD><TD BGCOLOR=#a8937e>....</TD><TD BGCOLOR=#a08877>....</TD><TD BGCOLOR=#9b8e79>....</TD><TD BGCOLOR=#947e6c>....</TD><TD BGCOLOR=#977f71>....</TD><TD BGCOLOR=#907e71>....</TD><TD BGCOLOR=#887669>....</TD><TD BGCOLOR=#867568>....</TD><TD BGCOLOR=#816f60>....</TD><TD BGCOLOR=#7c6c5c>....</TD><TD BGCOLOR=#706255>....</TD><TD BGCOLOR=#6b5850>....</TD><TD BGCOLOR=#605141>....</TD><TD BGCOLOR=#5d5346>....</TD><TD BGCOLOR=#584e42>....</TD><TD BGCOLOR=#5d4b3b>....</TD><TD BGCOLOR=#584237>....</TD><TD BGCOLOR=#49301f>....</TD><TD BGCOLOR=#4c3117>....</TD><TD BGCOLOR=#462b0e>....</TD><TD BGCOLOR=#432f1f>....</TD><TD BGCOLOR=#1a0b08>....</TD><TD BGCOLOR=#3d3735>....</TD><TD BGCOLOR=#5a514c>....</TD><TD BGCOLOR=#57413a>....</TD><TD BGCOLOR=#6b584c>....</TD><TD BGCOLOR=#785d51>....</TD><TD BGCOLOR=#826257>....</TD><TD BGCOLOR=#806054>....</TD><TD BGCOLOR=#866151>....</TD><TD BGCOLOR=#85594a>....</TD><TD BGCOLOR=#83614c>....</TD><TD BGCOLOR=#886c58>....</TD><TD BGCOLOR=#7c6257>....</TD><TD BGCOLOR=#6c5953>....</TD><TD BGCOLOR=#574c4b>....</TD><TD BGCOLOR=#3b2c19>....</TD><TD BGCOLOR=#3e280c>....</TD><TD BGCOLOR=#45301c>....</TD><TD BGCOLOR=#41341d>....</TD><TD BGCOLOR=#3c2c1e>....</TD><TD BGCOLOR=#4c382d>....</TD><TD BGCOLOR=#5b4739>....</TD><TD BGCOLOR=#5c5047>....</TD><TD BGCOLOR=#655349>....</TD><TD BGCOLOR=#685a4b>....</TD><TD BGCOLOR=#6f6453>....</TD><TD BGCOLOR=#706253>....</TD><TD BGCOLOR=#776b5f>....</TD><TD BGCOLOR=#78705f>....</TD><TD BGCOLOR=#817566>....</TD><TD BGCOLOR=#867569>....</TD><TD BGCOLOR=#8a786d>....</TD><TD BGCOLOR=#8d7c70>....</TD><TD BGCOLOR=#8e8070>....</TD><TD BGCOLOR=#8c7f6e>....</TD><TD BGCOLOR=#928574>....</TD><TD BGCOLOR=#918473>....</TD><TD BGCOLOR=#968475>....</TD><TD BGCOLOR=#937b6f>....</TD><TD BGCOLOR=#8b766b>....</TD><TD BGCOLOR=#8b8073>....</TD></TR> <TR><TD BGCOLOR=#1a0501 COLSPAN=2>....</TD><TD BGCOLOR=#200603>....</TD><TD BGCOLOR=#1f0401>....</TD><TD BGCOLOR=#220302>....</TD><TD BGCOLOR=#210102>....</TD><TD BGCOLOR=#1f0802>....</TD><TD BGCOLOR=#1b0e00>....</TD><TD BGCOLOR=#190c00>....</TD><TD BGCOLOR=#1b0b03>....</TD><TD BGCOLOR=#110f04>....</TD><TD BGCOLOR=#190e04>....</TD><TD BGCOLOR=#1b0401>....</TD><TD BGCOLOR=#1c0702>....</TD><TD BGCOLOR=#1f0b02>....</TD><TD BGCOLOR=#200c03>....</TD><TD BGCOLOR=#2e0902>....</TD><TD BGCOLOR=#564634>....</TD><TD BGCOLOR=#575038>....</TD><TD BGCOLOR=#604f37>....</TD><TD BGCOLOR=#675741>....</TD><TD BGCOLOR=#636651>....</TD><TD BGCOLOR=#575845>....</TD><TD BGCOLOR=#5e4935>....</TD><TD BGCOLOR=#4b3615>....</TD><TD BGCOLOR=#422e0a>....</TD><TD BGCOLOR=#4a360d>....</TD><TD BGCOLOR=#443007>....</TD><TD BGCOLOR=#493412>....</TD><TD BGCOLOR=#45260a>....</TD><TD BGCOLOR=#40240b>....</TD><TD BGCOLOR=#523826>....</TD><TD BGCOLOR=#644942>....</TD><TD BGCOLOR=#605546>....</TD><TD BGCOLOR=#675647>....</TD><TD BGCOLOR=#6b4f42>....</TD><TD BGCOLOR=#6c5b4b>....</TD><TD BGCOLOR=#6a6651>....</TD><TD BGCOLOR=#766756>....</TD><TD BGCOLOR=#7e655d>....</TD><TD BGCOLOR=#806c64>....</TD><TD BGCOLOR=#817162>....</TD><TD BGCOLOR=#8a7565>....</TD><TD BGCOLOR=#8e746c>....</TD><TD BGCOLOR=#8a7a68>....</TD><TD BGCOLOR=#897e6e>....</TD><TD BGCOLOR=#90846d>....</TD><TD BGCOLOR=#96836f>....</TD><TD BGCOLOR=#94816d>....</TD><TD BGCOLOR=#9b8875>....</TD><TD BGCOLOR=#9b8874>....</TD><TD BGCOLOR=#9b8572>....</TD><TD BGCOLOR=#9d8a77>....</TD><TD BGCOLOR=#998874>....</TD><TD BGCOLOR=#9d8a78>....</TD><TD BGCOLOR=#9b8778>....</TD><TD BGCOLOR=#8b816e>....</TD><TD BGCOLOR=#8c796a>....</TD><TD BGCOLOR=#8b756a>....</TD><TD BGCOLOR=#85796e>....</TD><TD BGCOLOR=#7f7167>....</TD><TD BGCOLOR=#7b6d62>....</TD><TD BGCOLOR=#796658>....</TD><TD BGCOLOR=#6f6050>....</TD><TD BGCOLOR=#645a4b>....</TD><TD BGCOLOR=#68554c>....</TD><TD BGCOLOR=#60573f>....</TD><TD BGCOLOR=#574f3b>....</TD><TD BGCOLOR=#564234>....</TD><TD BGCOLOR=#502c1b>....</TD><TD BGCOLOR=#47250e>....</TD><TD BGCOLOR=#4a2c10>....</TD><TD BGCOLOR=#4b310d>....</TD><TD BGCOLOR=#422b06>....</TD><TD BGCOLOR=#422c18>....</TD><TD BGCOLOR=#130605>....</TD><TD BGCOLOR=#3e3c3b>....</TD><TD BGCOLOR=#5d5755>....</TD><TD BGCOLOR=#5f4942>....</TD><TD BGCOLOR=#634f43>....</TD><TD BGCOLOR=#73594d>....</TD><TD BGCOLOR=#785a51>....</TD><TD BGCOLOR=#7a5c4f>....</TD><TD BGCOLOR=#7d5a47>....</TD><TD BGCOLOR=#805749>....</TD><TD BGCOLOR=#7e674e>....</TD><TD BGCOLOR=#77614a>....</TD><TD BGCOLOR=#6e554a>....</TD><TD BGCOLOR=#655451>....</TD><TD BGCOLOR=#5b514f>....</TD><TD BGCOLOR=#4d3b22>....</TD><TD BGCOLOR=#4a320b>....</TD><TD BGCOLOR=#473116>....</TD><TD BGCOLOR=#463517>....</TD><TD BGCOLOR=#46331e>....</TD><TD BGCOLOR=#422c1d>....</TD><TD BGCOLOR=#4b3527>....</TD><TD BGCOLOR=#4e463e>....</TD><TD BGCOLOR=#574a40>....</TD><TD BGCOLOR=#64594b>....</TD><TD BGCOLOR=#68614f>....</TD><TD BGCOLOR=#6c6151>....</TD><TD BGCOLOR=#6e645a>....</TD><TD BGCOLOR=#736e5e>....</TD><TD BGCOLOR=#787161>....</TD><TD BGCOLOR=#7e7168>....</TD><TD BGCOLOR=#82756c>....</TD><TD BGCOLOR=#877a71>....</TD><TD BGCOLOR=#847768>....</TD><TD BGCOLOR=#847766>....</TD><TD BGCOLOR=#877a69>....</TD><TD BGCOLOR=#897b6a>....</TD><TD BGCOLOR=#8b836e>....</TD><TD BGCOLOR=#8d7d6d>....</TD><TD BGCOLOR=#927d74>....</TD><TD BGCOLOR=#8d7b75>....</TD></TR> <TR><TD BGCOLOR=#190500 COLSPAN=2>....</TD><TD BGCOLOR=#270303>....</TD><TD BGCOLOR=#190501>....</TD><TD BGCOLOR=#210502>....</TD><TD BGCOLOR=#1d0301>....</TD><TD BGCOLOR=#1c0902>....</TD><TD BGCOLOR=#1e0b00>....</TD><TD BGCOLOR=#101100>....</TD><TD BGCOLOR=#140c03>....</TD><TD BGCOLOR=#160d05>....</TD><TD BGCOLOR=#1b0d06>....</TD><TD BGCOLOR=#1d0502>....</TD><TD BGCOLOR=#1f0602>....</TD><TD BGCOLOR=#1f0a03>....</TD><TD BGCOLOR=#250b03>....</TD><TD BGCOLOR=#300802>....</TD><TD BGCOLOR=#514838>....</TD><TD BGCOLOR=#57503f>....</TD><TD BGCOLOR=#5e5038>....</TD><TD BGCOLOR=#635643>....</TD><TD BGCOLOR=#656550>....</TD><TD BGCOLOR=#5b5340>....</TD><TD BGCOLOR=#554835>....</TD><TD BGCOLOR=#4f3112>....</TD><TD BGCOLOR=#442b0d>....</TD><TD BGCOLOR=#482f0a>....</TD><TD BGCOLOR=#482c0f>....</TD><TD BGCOLOR=#483313>....</TD><TD BGCOLOR=#4a2407>....</TD><TD BGCOLOR=#45210b>....</TD><TD BGCOLOR=#573c2b>....</TD><TD BGCOLOR=#5e4639>....</TD><TD BGCOLOR=#685647>....</TD><TD BGCOLOR=#6a5446>....</TD><TD BGCOLOR=#674f3f>....</TD><TD BGCOLOR=#6a5b4a>....</TD><TD BGCOLOR=#6a6352>....</TD><TD BGCOLOR=#726855>....</TD><TD BGCOLOR=#7a6656>....</TD><TD BGCOLOR=#7e6a5c>....</TD><TD BGCOLOR=#786958>....</TD><TD BGCOLOR=#7a705e>....</TD><TD BGCOLOR=#826f67>....</TD><TD BGCOLOR=#877365>....</TD><TD BGCOLOR=#8e7a70>....</TD><TD BGCOLOR=#907d6b>....</TD><TD BGCOLOR=#997f6e>....</TD><TD BGCOLOR=#987d6c>....</TD><TD BGCOLOR=#9a7f6e>....</TD><TD BGCOLOR=#a18776>....</TD><TD BGCOLOR=#96836e>....</TD><TD BGCOLOR=#978674>....</TD><TD BGCOLOR=#938575>....</TD><TD BGCOLOR=#928475>....</TD><TD BGCOLOR=#8b7d6b>....</TD><TD BGCOLOR=#847a67>....</TD><TD BGCOLOR=#8a7867>....</TD><TD BGCOLOR=#887567>....</TD><TD BGCOLOR=#817766>....</TD><TD BGCOLOR=#7f6f5a>....</TD><TD BGCOLOR=#7d6951>....</TD><TD BGCOLOR=#766054>....</TD><TD BGCOLOR=#695950>....</TD><TD BGCOLOR=#675d4c>....</TD><TD BGCOLOR=#6a5746>....</TD><TD BGCOLOR=#5b4e35>....</TD><TD BGCOLOR=#494334>....</TD><TD BGCOLOR=#4a3c30>....</TD><TD BGCOLOR=#482913>....</TD><TD BGCOLOR=#412c0a>....</TD><TD BGCOLOR=#452e0d>....</TD><TD BGCOLOR=#442e0c>....</TD><TD BGCOLOR=#412b08>....</TD><TD BGCOLOR=#3f2710>....</TD><TD BGCOLOR=#120307>....</TD><TD BGCOLOR=#3a2c27>....</TD><TD BGCOLOR=#5d5952>....</TD><TD BGCOLOR=#654b45>....</TD><TD BGCOLOR=#654e42>....</TD><TD BGCOLOR=#675148>....</TD><TD BGCOLOR=#6b574e>....</TD><TD BGCOLOR=#725448>....</TD><TD BGCOLOR=#7c544b>....</TD><TD BGCOLOR=#7b584e>....</TD><TD BGCOLOR=#725a4b>....</TD><TD BGCOLOR=#6c5247>....</TD><TD BGCOLOR=#69514b>....</TD><TD BGCOLOR=#645753>....</TD><TD BGCOLOR=#58584b>....</TD><TD BGCOLOR=#492d19>....</TD><TD BGCOLOR=#512b13>....</TD><TD BGCOLOR=#463620>....</TD><TD BGCOLOR=#4f2613>....</TD><TD BGCOLOR=#4d2d0f>....</TD><TD BGCOLOR=#453b17>....</TD><TD BGCOLOR=#432917>....</TD><TD BGCOLOR=#473f3d>....</TD><TD BGCOLOR=#504134>....</TD><TD BGCOLOR=#635242>....</TD><TD BGCOLOR=#665b4e>....</TD><TD BGCOLOR=#685f54>....</TD><TD BGCOLOR=#736757>....</TD><TD BGCOLOR=#756c60>....</TD><TD BGCOLOR=#736a61>....</TD><TD BGCOLOR=#7b6d65>....</TD><TD BGCOLOR=#7d6d66>....</TD><TD BGCOLOR=#7f726a>....</TD><TD BGCOLOR=#7e7263>....</TD><TD BGCOLOR=#817462>....</TD><TD BGCOLOR=#877665>....</TD><TD BGCOLOR=#8b7768>....</TD><TD BGCOLOR=#898375>....</TD><TD BGCOLOR=#8b7f75>....</TD><TD BGCOLOR=#8c7871>....</TD><TD BGCOLOR=#8c7972>....</TD></TR> <TR><TD BGCOLOR=#190802 COLSPAN=2>....</TD><TD BGCOLOR=#240101>....</TD><TD BGCOLOR=#190801>....</TD><TD BGCOLOR=#1c0501>....</TD><TD BGCOLOR=#160902>....</TD><TD BGCOLOR=#1a0902>....</TD><TD BGCOLOR=#240800>....</TD><TD BGCOLOR=#170f01>....</TD><TD BGCOLOR=#1c0c05>....</TD><TD BGCOLOR=#1b0501>....</TD><TD BGCOLOR=#1f0703>....</TD><TD BGCOLOR=#200705>....</TD><TD BGCOLOR=#1e0703>....</TD><TD BGCOLOR=#1f0e06>....</TD><TD BGCOLOR=#230c04>....</TD><TD BGCOLOR=#2f0a03>....</TD><TD BGCOLOR=#4d4737>....</TD><TD BGCOLOR=#565140>....</TD><TD BGCOLOR=#5c5138>....</TD><TD BGCOLOR=#5f5742>....</TD><TD BGCOLOR=#676953>....</TD><TD BGCOLOR=#5c513f>....</TD><TD BGCOLOR=#5b4a38>....</TD><TD BGCOLOR=#4d2f10>....</TD><TD BGCOLOR=#462c0f>....</TD><TD BGCOLOR=#4a310c>....</TD><TD BGCOLOR=#44270a>....</TD><TD BGCOLOR=#432d0d>....</TD><TD BGCOLOR=#482607>....</TD><TD BGCOLOR=#47250d>....</TD><TD BGCOLOR=#5a402f>....</TD><TD BGCOLOR=#5e4f3f>....</TD><TD BGCOLOR=#625947>....</TD><TD BGCOLOR=#625544>....</TD><TD BGCOLOR=#665341>....</TD><TD BGCOLOR=#695a49>....</TD><TD BGCOLOR=#6b6454>....</TD><TD BGCOLOR=#756b57>....</TD><TD BGCOLOR=#7d6c5a>....</TD><TD BGCOLOR=#7d6c5c>....</TD><TD BGCOLOR=#786858>....</TD><TD BGCOLOR=#796b5a>....</TD><TD BGCOLOR=#806e66>....</TD><TD BGCOLOR=#827061>....</TD><TD BGCOLOR=#867369>....</TD><TD BGCOLOR=#8d7b69>....</TD><TD BGCOLOR=#94796a>....</TD><TD BGCOLOR=#9a7e6f>....</TD><TD BGCOLOR=#967a6b>....</TD><TD BGCOLOR=#947a6a>....</TD><TD BGCOLOR=#907c6b>....</TD><TD BGCOLOR=#938172>....</TD><TD BGCOLOR=#8a7c70>....</TD><TD BGCOLOR=#85786b>....</TD><TD BGCOLOR=#827564>....</TD><TD BGCOLOR=#817363>....</TD><TD BGCOLOR=#826f61>....</TD><TD BGCOLOR=#806f60>....</TD><TD BGCOLOR=#7c705e>....</TD><TD BGCOLOR=#766955>....</TD><TD BGCOLOR=#71624e>....</TD><TD BGCOLOR=#726253>....</TD><TD BGCOLOR=#67594d>....</TD><TD BGCOLOR=#695d4d>....</TD><TD BGCOLOR=#615242>....</TD><TD BGCOLOR=#4f4534>....</TD><TD BGCOLOR=#524e3c>....</TD><TD BGCOLOR=#4f4329>....</TD><TD BGCOLOR=#4b2b06>....</TD><TD BGCOLOR=#462a08>....</TD><TD BGCOLOR=#432b08>....</TD><TD BGCOLOR=#462e0b>....</TD><TD BGCOLOR=#422403>....</TD><TD BGCOLOR=#381d0a>....</TD><TD BGCOLOR=#110206>....</TD><TD BGCOLOR=#301c1a>....</TD><TD BGCOLOR=#574f4e>....</TD><TD BGCOLOR=#62524c>....</TD><TD BGCOLOR=#635246>....</TD><TD BGCOLOR=#6c5953>....</TD><TD BGCOLOR=#6b5850>....</TD><TD BGCOLOR=#6f5146>....</TD><TD BGCOLOR=#815951>....</TD><TD BGCOLOR=#77564c>....</TD><TD BGCOLOR=#695549>....</TD><TD BGCOLOR=#68534a>....</TD><TD BGCOLOR=#6a544d>....</TD><TD BGCOLOR=#6a5b53>....</TD><TD BGCOLOR=#5f574a>....</TD><TD BGCOLOR=#4e331b>....</TD><TD BGCOLOR=#522f0e>....</TD><TD BGCOLOR=#4a3316>....</TD><TD BGCOLOR=#532d14>....</TD><TD BGCOLOR=#4d2d0f>....</TD><TD BGCOLOR=#463b16>....</TD><TD BGCOLOR=#462811>....</TD><TD BGCOLOR=#3e3226>....</TD><TD BGCOLOR=#4b392b>....</TD><TD BGCOLOR=#5f4c40>....</TD><TD BGCOLOR=#65594f>....</TD><TD BGCOLOR=#6a5f54>....</TD><TD BGCOLOR=#6a5a4b>....</TD><TD BGCOLOR=#6b5f54>....</TD><TD BGCOLOR=#71655e>....</TD><TD BGCOLOR=#74665e>....</TD><TD BGCOLOR=#7b7067>....</TD><TD BGCOLOR=#7a6c64>....</TD><TD BGCOLOR=#786c5f>....</TD><TD BGCOLOR=#7a6f5e>....</TD><TD BGCOLOR=#7b6d5d>....</TD><TD BGCOLOR=#867566>....</TD><TD BGCOLOR=#827d70>....</TD><TD BGCOLOR=#8b7f76>....</TD><TD BGCOLOR=#907c75>....</TD><TD BGCOLOR=#8a7770>....</TD></TR> <TR><TD BGCOLOR=#180b04 COLSPAN=2>....</TD><TD BGCOLOR=#240503>....</TD><TD BGCOLOR=#170902>....</TD><TD BGCOLOR=#190500>....</TD><TD BGCOLOR=#140b03>....</TD><TD BGCOLOR=#1a0b03>....</TD><TD BGCOLOR=#250600>....</TD><TD BGCOLOR=#1a0e01>....</TD><TD BGCOLOR=#1c0b04>....</TD><TD BGCOLOR=#200200>....</TD><TD BGCOLOR=#1e0401>....</TD><TD BGCOLOR=#1b0502>....</TD><TD BGCOLOR=#1e0b05>....</TD><TD BGCOLOR=#1b0d04>....</TD><TD BGCOLOR=#1f0b02>....</TD><TD BGCOLOR=#2a0902>....</TD><TD BGCOLOR=#4b4837>....</TD><TD BGCOLOR=#50503d>....</TD><TD BGCOLOR=#5a5138>....</TD><TD BGCOLOR=#5b5942>....</TD><TD BGCOLOR=#656952>....</TD><TD BGCOLOR=#5f5241>....</TD><TD BGCOLOR=#5c4636>....</TD><TD BGCOLOR=#4f3011>....</TD><TD BGCOLOR=#452c0e>....</TD><TD BGCOLOR=#4c330e>....</TD><TD BGCOLOR=#48290d>....</TD><TD BGCOLOR=#472f0f>....</TD><TD BGCOLOR=#432606>....</TD><TD BGCOLOR=#4b2a11>....</TD><TD BGCOLOR=#5e4231>....</TD><TD BGCOLOR=#615543>....</TD><TD BGCOLOR=#5b5441>....</TD><TD BGCOLOR=#605643>....</TD><TD BGCOLOR=#655341>....</TD><TD BGCOLOR=#695a49>....</TD><TD BGCOLOR=#6c6555>....</TD><TD BGCOLOR=#776d59>....</TD><TD BGCOLOR=#7c705d>....</TD><TD BGCOLOR=#7e705f>....</TD><TD BGCOLOR=#806f5f>....</TD><TD BGCOLOR=#7e6b5c>....</TD><TD BGCOLOR=#7e6e65>....</TD><TD BGCOLOR=#7f7161>....</TD><TD BGCOLOR=#87796d>....</TD><TD BGCOLOR=#877966>....</TD><TD BGCOLOR=#91766a>....</TD><TD BGCOLOR=#977b70>....</TD><TD BGCOLOR=#93776c>....</TD><TD BGCOLOR=#91766a>....</TD><TD BGCOLOR=#877366>....</TD><TD BGCOLOR=#8c796e>....</TD><TD BGCOLOR=#85766d>....</TD><TD BGCOLOR=#796e64>....</TD><TD BGCOLOR=#7c7064>....</TD><TD BGCOLOR=#7c685f>....</TD><TD BGCOLOR=#7a665d>....</TD><TD BGCOLOR=#786759>....</TD><TD BGCOLOR=#746755>....</TD><TD BGCOLOR=#685e4d>....</TD><TD BGCOLOR=#6a6253>....</TD><TD BGCOLOR=#696250>....</TD><TD BGCOLOR=#675c4b>....</TD><TD BGCOLOR=#635548>....</TD><TD BGCOLOR=#574e42>....</TD><TD BGCOLOR=#686359>....</TD><TD BGCOLOR=#595845>....</TD><TD BGCOLOR=#524326>....</TD><TD BGCOLOR=#532c0a>....</TD><TD BGCOLOR=#4c2603>....</TD><TD BGCOLOR=#442a03>....</TD><TD BGCOLOR=#472b05>....</TD><TD BGCOLOR=#4a2404>....</TD><TD BGCOLOR=#321e0e>....</TD><TD BGCOLOR=#090504>....</TD><TD BGCOLOR=#21100f>....</TD><TD BGCOLOR=#54484e>....</TD><TD BGCOLOR=#615450>....</TD><TD BGCOLOR=#6a5850>....</TD><TD BGCOLOR=#755b5b>....</TD><TD BGCOLOR=#69514c>....</TD><TD BGCOLOR=#75574b>....</TD><TD BGCOLOR=#835b53>....</TD><TD BGCOLOR=#7c5a50>....</TD><TD BGCOLOR=#6a5c52>....</TD><TD BGCOLOR=#65574f>....</TD><TD BGCOLOR=#6c584f>....</TD><TD BGCOLOR=#6b5b4f>....</TD><TD BGCOLOR=#5f534d>....</TD><TD BGCOLOR=#514129>....</TD><TD BGCOLOR=#4d3812>....</TD><TD BGCOLOR=#4f3715>....</TD><TD BGCOLOR=#4b2c09>....</TD><TD BGCOLOR=#4b2e0f>....</TD><TD BGCOLOR=#463813>....</TD><TD BGCOLOR=#4c2908>....</TD><TD BGCOLOR=#3c2a0f>....</TD><TD BGCOLOR=#452e21>....</TD><TD BGCOLOR=#58453e>....</TD><TD BGCOLOR=#61554d>....</TD><TD BGCOLOR=#685a51>....</TD><TD BGCOLOR=#6b584a>....</TD><TD BGCOLOR=#6b5b51>....</TD><TD BGCOLOR=#695953>....</TD><TD BGCOLOR=#6e6058>....</TD><TD BGCOLOR=#6f695f>....</TD><TD BGCOLOR=#73635c>....</TD><TD BGCOLOR=#75695e>....</TD><TD BGCOLOR=#736b5e>....</TD><TD BGCOLOR=#73675b>....</TD><TD BGCOLOR=#7b6d62>....</TD><TD BGCOLOR=#807c6f>....</TD><TD BGCOLOR=#84786e>....</TD><TD BGCOLOR=#8c7871>....</TD><TD BGCOLOR=#8c7972>....</TD></TR> <TR><TD BGCOLOR=#170c04 COLSPAN=2>....</TD><TD BGCOLOR=#210603>....</TD><TD BGCOLOR=#180902>....</TD><TD BGCOLOR=#1a0602>....</TD><TD BGCOLOR=#190b04>....</TD><TD BGCOLOR=#1c0903>....</TD><TD BGCOLOR=#220600>....</TD><TD BGCOLOR=#170f02>....</TD><TD BGCOLOR=#190c04>....</TD><TD BGCOLOR=#1e0401>....</TD><TD BGCOLOR=#1e0803>....</TD><TD BGCOLOR=#1a0502>....</TD><TD BGCOLOR=#1f0b05>....</TD><TD BGCOLOR=#1b0d03>....</TD><TD BGCOLOR=#1d0b02>....</TD><TD BGCOLOR=#290a02>....</TD><TD BGCOLOR=#4a4635>....</TD><TD BGCOLOR=#51513c>....</TD><TD BGCOLOR=#58563b>....</TD><TD BGCOLOR=#5a5a43>....</TD><TD BGCOLOR=#5f664f>....</TD><TD BGCOLOR=#5d4e3b>....</TD><TD BGCOLOR=#573f2e>....</TD><TD BGCOLOR=#4e3011>....</TD><TD BGCOLOR=#452c0e>....</TD><TD BGCOLOR=#4a310e>....</TD><TD BGCOLOR=#47290b>....</TD><TD BGCOLOR=#442b0d>....</TD><TD BGCOLOR=#3e2405>....</TD><TD BGCOLOR=#4a2b14>....</TD><TD BGCOLOR=#624536>....</TD><TD BGCOLOR=#5e5041>....</TD><TD BGCOLOR=#5f5543>....</TD><TD BGCOLOR=#625341>....</TD><TD BGCOLOR=#63513e>....</TD><TD BGCOLOR=#695b4b>....</TD><TD BGCOLOR=#6d6355>....</TD><TD BGCOLOR=#796b5b>....</TD><TD BGCOLOR=#7a6f5b>....</TD><TD BGCOLOR=#7d7260>....</TD><TD BGCOLOR=#857464>....</TD><TD BGCOLOR=#816d5e>....</TD><TD BGCOLOR=#7e6e64>....</TD><TD BGCOLOR=#7a6d5d>....</TD><TD BGCOLOR=#827467>....</TD><TD BGCOLOR=#867966>....</TD><TD BGCOLOR=#8c7368>....</TD><TD BGCOLOR=#91776d>....</TD><TD BGCOLOR=#91766d>....</TD><TD BGCOLOR=#947a70>....</TD><TD BGCOLOR=#88746a>....</TD><TD BGCOLOR=#89786f>....</TD><TD BGCOLOR=#7c6f67>....</TD><TD BGCOLOR=#736961>....</TD><TD BGCOLOR=#766a60>....</TD><TD BGCOLOR=#745f59>....</TD><TD BGCOLOR=#78645e>....</TD><TD BGCOLOR=#716153>....</TD><TD BGCOLOR=#6b5e4c>....</TD><TD BGCOLOR=#675f50>....</TD><TD BGCOLOR=#666355>....</TD><TD BGCOLOR=#666351>....</TD><TD BGCOLOR=#665c4b>....</TD><TD BGCOLOR=#594b3f>....</TD><TD BGCOLOR=#655f56>....</TD><TD BGCOLOR=#67675f>....</TD><TD BGCOLOR=#5b5a48>....</TD><TD BGCOLOR=#54442e>....</TD><TD BGCOLOR=#512912>....</TD><TD BGCOLOR=#4c2402>....</TD><TD BGCOLOR=#442903>....</TD><TD BGCOLOR=#472a04>....</TD><TD BGCOLOR=#4c2505>....</TD><TD BGCOLOR=#25190c>....</TD><TD BGCOLOR=#050a06>....</TD><TD BGCOLOR=#120b08>....</TD><TD BGCOLOR=#51484e>....</TD><TD BGCOLOR=#645554>....</TD><TD BGCOLOR=#755d59>....</TD><TD BGCOLOR=#775659>....</TD><TD BGCOLOR=#765855>....</TD><TD BGCOLOR=#806055>....</TD><TD BGCOLOR=#835d54>....</TD><TD BGCOLOR=#7d5e53>....</TD><TD BGCOLOR=#72645c>....</TD><TD BGCOLOR=#6a5d55>....</TD><TD BGCOLOR=#726156>....</TD><TD BGCOLOR=#6f6053>....</TD><TD BGCOLOR=#625654>....</TD><TD BGCOLOR=#56523e>....</TD><TD BGCOLOR=#4f4823>....</TD><TD BGCOLOR=#4d3816>....</TD><TD BGCOLOR=#4e320a>....</TD><TD BGCOLOR=#4b2e0d>....</TD><TD BGCOLOR=#493612>....</TD><TD BGCOLOR=#4d2b07>....</TD><TD BGCOLOR=#442d0d>....</TD><TD BGCOLOR=#412315>....</TD><TD BGCOLOR=#4c3833>....</TD><TD BGCOLOR=#5c524c>....</TD><TD BGCOLOR=#64564e>....</TD><TD BGCOLOR=#6b594e>....</TD><TD BGCOLOR=#6b5b52>....</TD><TD BGCOLOR=#624f49>....</TD><TD BGCOLOR=#665850>....</TD><TD BGCOLOR=#645f54>....</TD><TD BGCOLOR=#706059>....</TD><TD BGCOLOR=#70645b>....</TD><TD BGCOLOR=#756e62>....</TD><TD BGCOLOR=#73695f>....</TD><TD BGCOLOR=#786c63>....</TD><TD BGCOLOR=#7c7669>....</TD><TD BGCOLOR=#7f7268>....</TD><TD BGCOLOR=#86726b>....</TD><TD BGCOLOR=#89766f>....</TD></TR> <TR><TD BGCOLOR=#160d04 COLSPAN=2>....</TD><TD BGCOLOR=#1c0701>....</TD><TD BGCOLOR=#1f0603>....</TD><TD BGCOLOR=#1a0601>....</TD><TD BGCOLOR=#170600>....</TD><TD BGCOLOR=#220402>....</TD><TD BGCOLOR=#1d0400>....</TD><TD BGCOLOR=#1a0b03>....</TD><TD BGCOLOR=#1b0a04>....</TD><TD BGCOLOR=#170a02>....</TD><TD BGCOLOR=#1d0b05>....</TD><TD BGCOLOR=#200201>....</TD><TD BGCOLOR=#250a04>....</TD><TD BGCOLOR=#1e0d01>....</TD><TD BGCOLOR=#1e0c06>....</TD><TD BGCOLOR=#260805>....</TD><TD BGCOLOR=#4f4131>....</TD><TD BGCOLOR=#555037>....</TD><TD BGCOLOR=#52543c>....</TD><TD BGCOLOR=#5d5544>....</TD><TD BGCOLOR=#59644f>....</TD><TD BGCOLOR=#56452a>....</TD><TD BGCOLOR=#4c3d20>....</TD><TD BGCOLOR=#4c300d>....</TD><TD BGCOLOR=#422b0d>....</TD><TD BGCOLOR=#472f10>....</TD><TD BGCOLOR=#472a08>....</TD><TD BGCOLOR=#402609>....</TD><TD BGCOLOR=#3d2407>....</TD><TD BGCOLOR=#492e1b>....</TD><TD BGCOLOR=#574338>....</TD><TD BGCOLOR=#585144>....</TD><TD BGCOLOR=#5d5140>....</TD><TD BGCOLOR=#5c4b34>....</TD><TD BGCOLOR=#60543c>....</TD><TD BGCOLOR=#615749>....</TD><TD BGCOLOR=#705d59>....</TD><TD BGCOLOR=#806662>....</TD><TD BGCOLOR=#7f6d5c>....</TD><TD BGCOLOR=#7e7161>....</TD><TD BGCOLOR=#847769>....</TD><TD BGCOLOR=#7e715e>....</TD><TD BGCOLOR=#806e5d>....</TD><TD BGCOLOR=#847162>....</TD><TD BGCOLOR=#877465>....</TD><TD BGCOLOR=#897667>....</TD><TD BGCOLOR=#8c7a6a>....</TD><TD BGCOLOR=#897868>....</TD><TD BGCOLOR=#8f806f>....</TD><TD BGCOLOR=#887a6b>....</TD><TD BGCOLOR=#83756d>....</TD><TD BGCOLOR=#7b7068>....</TD><TD BGCOLOR=#6d665c>....</TD><TD BGCOLOR=#70685e>....</TD><TD BGCOLOR=#796b61>....</TD><TD BGCOLOR=#72635c>....</TD><TD BGCOLOR=#6f605d>....</TD><TD BGCOLOR=#635549>....</TD><TD BGCOLOR=#675b49>....</TD><TD BGCOLOR=#696152>....</TD><TD BGCOLOR=#69644f>....</TD><TD BGCOLOR=#6d675b>....</TD><TD BGCOLOR=#5d5349>....</TD><TD BGCOLOR=#62594c>....</TD><TD BGCOLOR=#67675e>....</TD><TD BGCOLOR=#676a60>....</TD><TD BGCOLOR=#61593f>....</TD><TD BGCOLOR=#524633>....</TD><TD BGCOLOR=#472f0f>....</TD><TD BGCOLOR=#402302>....</TD><TD BGCOLOR=#432706>....</TD><TD BGCOLOR=#462a0a>....</TD><TD BGCOLOR=#432609>....</TD><TD BGCOLOR=#24100b>....</TD><TD BGCOLOR=#050604>....</TD><TD BGCOLOR=#0c0b06>....</TD><TD BGCOLOR=#524d4b>....</TD><TD BGCOLOR=#625653>....</TD><TD BGCOLOR=#70635c>....</TD><TD BGCOLOR=#6f5851>....</TD><TD BGCOLOR=#815d56>....</TD><TD BGCOLOR=#866057>....</TD><TD BGCOLOR=#84655a>....</TD><TD BGCOLOR=#7f6659>....</TD><TD BGCOLOR=#7d645b>....</TD><TD BGCOLOR=#796458>....</TD><TD BGCOLOR=#726457>....</TD><TD BGCOLOR=#6e625d>....</TD><TD BGCOLOR=#6d5855>....</TD><TD BGCOLOR=#60614d>....</TD><TD BGCOLOR=#5b5437>....</TD><TD BGCOLOR=#5d4324>....</TD><TD BGCOLOR=#4a310b>....</TD><TD BGCOLOR=#492e06>....</TD><TD BGCOLOR=#48300b>....</TD><TD BGCOLOR=#423012>....</TD><TD BGCOLOR=#472a13>....</TD><TD BGCOLOR=#4d230c>....</TD><TD BGCOLOR=#452b1c>....</TD><TD BGCOLOR=#4e4840>....</TD><TD BGCOLOR=#5b564a>....</TD><TD BGCOLOR=#5e5c56>....</TD><TD BGCOLOR=#615952>....</TD><TD BGCOLOR=#665850>....</TD><TD BGCOLOR=#685952>....</TD><TD BGCOLOR=#665750>....</TD><TD BGCOLOR=#6e5f58>....</TD><TD BGCOLOR=#71655c>....</TD><TD BGCOLOR=#6f655c>....</TD><TD BGCOLOR=#71675e COLSPAN=2>....</TD><TD BGCOLOR=#847367>....</TD><TD BGCOLOR=#8d7b70>....</TD><TD BGCOLOR=#86756d>....</TD><TD BGCOLOR=#867570>....</TD></TR> <TR><TD BGCOLOR=#170d04 COLSPAN=2>....</TD><TD BGCOLOR=#180801>....</TD><TD BGCOLOR=#180802>....</TD><TD BGCOLOR=#140902>....</TD><TD BGCOLOR=#170600>....</TD><TD BGCOLOR=#210402>....</TD><TD BGCOLOR=#1c0300>....</TD><TD BGCOLOR=#1b0a04>....</TD><TD BGCOLOR=#1e0904>....</TD><TD BGCOLOR=#170903>....</TD><TD BGCOLOR=#1a0a03>....</TD><TD BGCOLOR=#1a0602>....</TD><TD BGCOLOR=#1d0f04>....</TD><TD BGCOLOR=#1b1203>....</TD><TD BGCOLOR=#1c0e06>....</TD><TD BGCOLOR=#270906>....</TD><TD BGCOLOR=#504232>....</TD><TD BGCOLOR=#574f36>....</TD><TD BGCOLOR=#5a4c39>....</TD><TD BGCOLOR=#5d5242>....</TD><TD BGCOLOR=#56614c>....</TD><TD BGCOLOR=#554428>....</TD><TD BGCOLOR=#4b3c1f>....</TD><TD BGCOLOR=#4b2d0b>....</TD><TD BGCOLOR=#42270a>....</TD><TD BGCOLOR=#492e10>....</TD><TD BGCOLOR=#482908>....</TD><TD BGCOLOR=#432b0b>....</TD><TD BGCOLOR=#3d2404>....</TD><TD BGCOLOR=#492e18>....</TD><TD BGCOLOR=#584337>....</TD><TD BGCOLOR=#52493d>....</TD><TD BGCOLOR=#5c4d3d>....</TD><TD BGCOLOR=#5a4630>....</TD><TD BGCOLOR=#61513a>....</TD><TD BGCOLOR=#615447>....</TD><TD BGCOLOR=#715f5a>....</TD><TD BGCOLOR=#7a645f>....</TD><TD BGCOLOR=#7f6f5d>....</TD><TD BGCOLOR=#7c6f5e>....</TD><TD BGCOLOR=#827466>....</TD><TD BGCOLOR=#7c6f5c>....</TD><TD BGCOLOR=#806f5e>....</TD><TD BGCOLOR=#867364>....</TD><TD BGCOLOR=#877465>....</TD><TD BGCOLOR=#877364>....</TD><TD BGCOLOR=#8b7567>....</TD><TD BGCOLOR=#897868>....</TD><TD BGCOLOR=#817967>....</TD><TD BGCOLOR=#7b7764>....</TD><TD BGCOLOR=#7a6c64>....</TD><TD BGCOLOR=#766b62>....</TD><TD BGCOLOR=#766f65>....</TD><TD BGCOLOR=#7b7368>....</TD><TD BGCOLOR=#74665c>....</TD><TD BGCOLOR=#6b5c55>....</TD><TD BGCOLOR=#6c5d5a>....</TD><TD BGCOLOR=#62544a>....</TD><TD BGCOLOR=#6a5e4f>....</TD><TD BGCOLOR=#696155>....</TD><TD BGCOLOR=#66614e>....</TD><TD BGCOLOR=#595447>....</TD><TD BGCOLOR=#61574b>....</TD><TD BGCOLOR=#6c6353>....</TD><TD BGCOLOR=#656559>....</TD><TD BGCOLOR=#676a5f>....</TD><TD BGCOLOR=#5f563c>....</TD><TD BGCOLOR=#514431>....</TD><TD BGCOLOR=#462e0d>....</TD><TD BGCOLOR=#402705>....</TD><TD BGCOLOR=#422907>....</TD><TD BGCOLOR=#442c0a>....</TD><TD BGCOLOR=#42280a>....</TD><TD BGCOLOR=#1a0c06>....</TD><TD BGCOLOR=#060805>....</TD><TD BGCOLOR=#15110d>....</TD><TD BGCOLOR=#5d4d4e>....</TD><TD BGCOLOR=#675755>....</TD><TD BGCOLOR=#62665a>....</TD><TD BGCOLOR=#79635c>....</TD><TD BGCOLOR=#8e625e>....</TD><TD BGCOLOR=#876158>....</TD><TD BGCOLOR=#87685d>....</TD><TD BGCOLOR=#7d6557>....</TD><TD BGCOLOR=#82675d>....</TD><TD BGCOLOR=#806357>....</TD><TD BGCOLOR=#786053>....</TD><TD BGCOLOR=#73645d>....</TD><TD BGCOLOR=#6f5956>....</TD><TD BGCOLOR=#686355>....</TD><TD BGCOLOR=#695f4b>....</TD><TD BGCOLOR=#68553e>....</TD><TD BGCOLOR=#4e4228>....</TD><TD BGCOLOR=#483412>....</TD><TD BGCOLOR=#49320d>....</TD><TD BGCOLOR=#432e0e>....</TD><TD BGCOLOR=#462c13>....</TD><TD BGCOLOR=#482508>....</TD><TD BGCOLOR=#452a14>....</TD><TD BGCOLOR=#3d301e>....</TD><TD BGCOLOR=#524834>....</TD><TD BGCOLOR=#575249>....</TD><TD BGCOLOR=#655e59>....</TD><TD BGCOLOR=#6f635d>....</TD><TD BGCOLOR=#64554e>....</TD><TD BGCOLOR=#6b5c55>....</TD><TD BGCOLOR=#6d5e57>....</TD><TD BGCOLOR=#6d6159>....</TD><TD BGCOLOR=#70665d>....</TD><TD BGCOLOR=#6c6259>....</TD><TD BGCOLOR=#6f655c>....</TD><TD BGCOLOR=#80685e>....</TD><TD BGCOLOR=#887268>....</TD><TD BGCOLOR=#81736b>....</TD><TD BGCOLOR=#7f786f>....</TD></TR> <TR><TD BGCOLOR=#1b0903 COLSPAN=2>....</TD><TD BGCOLOR=#1b0500>....</TD><TD BGCOLOR=#180801>....</TD><TD BGCOLOR=#140b02>....</TD><TD BGCOLOR=#190801>....</TD><TD BGCOLOR=#220402>....</TD><TD BGCOLOR=#1c0300>....</TD><TD BGCOLOR=#1b0802>....</TD><TD BGCOLOR=#210703>....</TD><TD BGCOLOR=#160801>....</TD><TD BGCOLOR=#170c04>....</TD><TD BGCOLOR=#160903>....</TD><TD BGCOLOR=#180e02>....</TD><TD BGCOLOR=#1c1403>....</TD><TD BGCOLOR=#1e0c04>....</TD><TD BGCOLOR=#2d0908>....</TD><TD BGCOLOR=#4d4230>....</TD><TD BGCOLOR=#525136>....</TD><TD BGCOLOR=#594f3a>....</TD><TD BGCOLOR=#5b4f3f>....</TD><TD BGCOLOR=#56604b>....</TD><TD BGCOLOR=#56452a>....</TD><TD BGCOLOR=#4b3c1f>....</TD><TD BGCOLOR=#462e0a>....</TD><TD BGCOLOR=#3e2a0b>....</TD><TD BGCOLOR=#453010>....</TD><TD BGCOLOR=#452b09>....</TD><TD BGCOLOR=#3f250c>....</TD><TD BGCOLOR=#3c2209>....</TD><TD BGCOLOR=#482d1d>....</TD><TD BGCOLOR=#563f38>....</TD><TD BGCOLOR=#54473c>....</TD><TD BGCOLOR=#594737>....</TD><TD BGCOLOR=#5a422e>....</TD><TD BGCOLOR=#5e4935>....</TD><TD BGCOLOR=#655449>....</TD><TD BGCOLOR=#6d5b57>....</TD><TD BGCOLOR=#75645d>....</TD><TD BGCOLOR=#7a6c5a>....</TD><TD BGCOLOR=#7c6e5e>....</TD><TD BGCOLOR=#7e7062>....</TD><TD BGCOLOR=#7e715d>....</TD><TD BGCOLOR=#7e6c5b>....</TD><TD BGCOLOR=#826f60>....</TD><TD BGCOLOR=#867364>....</TD><TD BGCOLOR=#816e5f>....</TD><TD BGCOLOR=#7f7060>....</TD><TD BGCOLOR=#817664>....</TD><TD BGCOLOR=#7c7663>....</TD><TD BGCOLOR=#787361>....</TD><TD BGCOLOR=#74655e>....</TD><TD BGCOLOR=#71675e>....</TD><TD BGCOLOR=#6d665c>....</TD><TD BGCOLOR=#6e655b>....</TD><TD BGCOLOR=#6e6056>....</TD><TD BGCOLOR=#6a5b55>....</TD><TD BGCOLOR=#645552>....</TD><TD BGCOLOR=#6a5c53>....</TD><TD BGCOLOR=#6a5d52>....</TD><TD BGCOLOR=#625950>....</TD><TD BGCOLOR=#544f3f>....</TD><TD BGCOLOR=#615c4e>....</TD><TD BGCOLOR=#6d6454>....</TD><TD BGCOLOR=#6c6452>....</TD><TD BGCOLOR=#646555>....</TD><TD BGCOLOR=#696c61>....</TD><TD BGCOLOR=#5f563d>....</TD><TD BGCOLOR=#514431>....</TD><TD BGCOLOR=#402908>....</TD><TD BGCOLOR=#3e2805>....</TD><TD BGCOLOR=#412a08>....</TD><TD BGCOLOR=#402a08>....</TD><TD BGCOLOR=#3e2809>....</TD><TD BGCOLOR=#150c04>....</TD><TD BGCOLOR=#020501>....</TD><TD BGCOLOR=#261e1b>....</TD><TD BGCOLOR=#5c4c4e>....</TD><TD BGCOLOR=#675956>....</TD><TD BGCOLOR=#6a655c>....</TD><TD BGCOLOR=#7c665f>....</TD><TD BGCOLOR=#8b635e>....</TD><TD BGCOLOR=#8e685f>....</TD><TD BGCOLOR=#85665b>....</TD><TD BGCOLOR=#7d6457>....</TD><TD BGCOLOR=#82665a>....</TD><TD BGCOLOR=#866154>....</TD><TD BGCOLOR=#7f5c4f>....</TD><TD BGCOLOR=#77655b>....</TD><TD BGCOLOR=#6c5c57>....</TD><TD BGCOLOR=#656459>....</TD><TD BGCOLOR=#666355>....</TD><TD BGCOLOR=#686656>....</TD><TD BGCOLOR=#4f5345>....</TD><TD BGCOLOR=#4b4026>....</TD><TD BGCOLOR=#4e3714>....</TD><TD BGCOLOR=#48300d>....</TD><TD BGCOLOR=#432c11>....</TD><TD BGCOLOR=#432703>....</TD><TD BGCOLOR=#472d0c>....</TD><TD BGCOLOR=#3e2710>....</TD><TD BGCOLOR=#402d1c>....</TD><TD BGCOLOR=#51493e>....</TD><TD BGCOLOR=#5b564a>....</TD><TD BGCOLOR=#63584e>....</TD><TD BGCOLOR=#6a5b54>....</TD><TD BGCOLOR=#63544d>....</TD><TD BGCOLOR=#6b5c55>....</TD><TD BGCOLOR=#6e6259>....</TD><TD BGCOLOR=#746a61>....</TD><TD BGCOLOR=#71675e COLSPAN=2>....</TD><TD BGCOLOR=#7d695e>....</TD><TD BGCOLOR=#836f64>....</TD><TD BGCOLOR=#807168>....</TD><TD BGCOLOR=#80746d>....</TD></TR> <TR><TD BGCOLOR=#200200 COLSPAN=2>....</TD><TD BGCOLOR=#1e0400>....</TD><TD BGCOLOR=#1b0903>....</TD><TD BGCOLOR=#140a02>....</TD><TD BGCOLOR=#180c04>....</TD><TD BGCOLOR=#210603>....</TD><TD BGCOLOR=#1d0803>....</TD><TD BGCOLOR=#190802>....</TD><TD BGCOLOR=#240603>....</TD><TD BGCOLOR=#1a0803>....</TD><TD BGCOLOR=#150a02>....</TD><TD BGCOLOR=#140a04>....</TD><TD BGCOLOR=#120d02>....</TD><TD BGCOLOR=#181102>....</TD><TD BGCOLOR=#240c03>....</TD><TD BGCOLOR=#2f0604>....</TD><TD BGCOLOR=#4b402f>....</TD><TD BGCOLOR=#505539>....</TD><TD BGCOLOR=#555236>....</TD><TD BGCOLOR=#5c513e>....</TD><TD BGCOLOR=#565e4a>....</TD><TD BGCOLOR=#55422a>....</TD><TD BGCOLOR=#473920>....</TD><TD BGCOLOR=#412f0b>....</TD><TD BGCOLOR=#402f0d>....</TD><TD BGCOLOR=#42310e>....</TD><TD BGCOLOR=#3f2a09>....</TD><TD BGCOLOR=#3d230f>....</TD><TD BGCOLOR=#3e220f>....</TD><TD BGCOLOR=#492a20>....</TD><TD BGCOLOR=#533833>....</TD><TD BGCOLOR=#544438>....</TD><TD BGCOLOR=#503d2c>....</TD><TD BGCOLOR=#553e2c>....</TD><TD BGCOLOR=#5b4432>....</TD><TD BGCOLOR=#604d40>....</TD><TD BGCOLOR=#6d5c52>....</TD><TD BGCOLOR=#726156>....</TD><TD BGCOLOR=#7a6958>....</TD><TD BGCOLOR=#796d5d>....</TD><TD BGCOLOR=#7c6e62>....</TD><TD BGCOLOR=#7c6b5f>....</TD><TD BGCOLOR=#7c6a5a>....</TD><TD BGCOLOR=#7f6c5d>....</TD><TD BGCOLOR=#847362>....</TD><TD BGCOLOR=#817160>....</TD><TD BGCOLOR=#7b7263>....</TD><TD BGCOLOR=#7e7466>....</TD><TD BGCOLOR=#7d7264>....</TD><TD BGCOLOR=#766b5d>....</TD><TD BGCOLOR=#70665a>....</TD><TD BGCOLOR=#696157>....</TD><TD BGCOLOR=#635d56>....</TD><TD BGCOLOR=#665e56>....</TD><TD BGCOLOR=#665a4c>....</TD><TD BGCOLOR=#675850>....</TD><TD BGCOLOR=#675755>....</TD><TD BGCOLOR=#68564f>....</TD><TD BGCOLOR=#66594e>....</TD><TD BGCOLOR=#555046>....</TD><TD BGCOLOR=#5d5e4d>....</TD><TD BGCOLOR=#676251>....</TD><TD BGCOLOR=#68624f>....</TD><TD BGCOLOR=#6b6853>....</TD><TD BGCOLOR=#636552>....</TD><TD BGCOLOR=#616459>....</TD><TD BGCOLOR=#5a513a>....</TD><TD BGCOLOR=#4d3e27>....</TD><TD BGCOLOR=#43270a>....</TD><TD BGCOLOR=#3d260a>....</TD><TD BGCOLOR=#3f2b09>....</TD><TD BGCOLOR=#422707>....</TD><TD BGCOLOR=#38260b>....</TD><TD BGCOLOR=#0c0902>....</TD><TD BGCOLOR=#020703>....</TD><TD BGCOLOR=#292222>....</TD><TD BGCOLOR=#594e51>....</TD><TD BGCOLOR=#675755>....</TD><TD BGCOLOR=#775e59>....</TD><TD BGCOLOR=#7e645f>....</TD><TD BGCOLOR=#86645e>....</TD><TD BGCOLOR=#815c53>....</TD><TD BGCOLOR=#816157>....</TD><TD BGCOLOR=#7c6358>....</TD><TD BGCOLOR=#846557>....</TD><TD BGCOLOR=#8a6156>....</TD><TD BGCOLOR=#835b53>....</TD><TD BGCOLOR=#786058>....</TD><TD BGCOLOR=#6a6059>....</TD><TD BGCOLOR=#626559>....</TD><TD BGCOLOR=#636759>....</TD><TD BGCOLOR=#676c5d>....</TD><TD BGCOLOR=#596153>....</TD><TD BGCOLOR=#555340>....</TD><TD BGCOLOR=#554529>....</TD><TD BGCOLOR=#492f0d>....</TD><TD BGCOLOR=#422a0e>....</TD><TD BGCOLOR=#452b07>....</TD><TD BGCOLOR=#472e0a>....</TD><TD BGCOLOR=#462c11>....</TD><TD BGCOLOR=#402917>....</TD><TD BGCOLOR=#3f3326>....</TD><TD BGCOLOR=#4e4c3e>....</TD><TD BGCOLOR=#565045>....</TD><TD BGCOLOR=#5e524a>....</TD><TD BGCOLOR=#675a53>....</TD><TD BGCOLOR=#665951>....</TD><TD BGCOLOR=#685c52>....</TD><TD BGCOLOR=#6c6157>....</TD><TD BGCOLOR=#6e6358>....</TD><TD BGCOLOR=#72665c>....</TD><TD BGCOLOR=#78695e>....</TD><TD BGCOLOR=#7a6d62>....</TD><TD BGCOLOR=#7d6e65>....</TD><TD BGCOLOR=#7d7167>....</TD></TR> <TR><TD BGCOLOR=#240201 COLSPAN=2>....</TD><TD BGCOLOR=#1c0601>....</TD><TD BGCOLOR=#170a02>....</TD><TD BGCOLOR=#160a02>....</TD><TD BGCOLOR=#120d02>....</TD><TD BGCOLOR=#1b0802>....</TD><TD BGCOLOR=#180b03>....</TD><TD BGCOLOR=#160b03>....</TD><TD BGCOLOR=#240704>....</TD><TD BGCOLOR=#1d0803>....</TD><TD BGCOLOR=#160902>....</TD><TD BGCOLOR=#100903>....</TD><TD BGCOLOR=#0d0e06>....</TD><TD BGCOLOR=#110f01>....</TD><TD BGCOLOR=#220c00>....</TD><TD BGCOLOR=#2f0701>....</TD><TD BGCOLOR=#4d3f30>....</TD><TD BGCOLOR=#52533a>....</TD><TD BGCOLOR=#56502f>....</TD><TD BGCOLOR=#60543e>....</TD><TD BGCOLOR=#5b5c4b>....</TD><TD BGCOLOR=#573f2c>....</TD><TD BGCOLOR=#473a25>....</TD><TD BGCOLOR=#462c0c>....</TD><TD BGCOLOR=#462a0a>....</TD><TD BGCOLOR=#492d0c>....</TD><TD BGCOLOR=#432709>....</TD><TD BGCOLOR=#3c230d>....</TD><TD BGCOLOR=#402211>....</TD><TD BGCOLOR=#452216>....</TD><TD BGCOLOR=#58382e>....</TD><TD BGCOLOR=#574334>....</TD><TD BGCOLOR=#513e29>....</TD><TD BGCOLOR=#533f2f>....</TD><TD BGCOLOR=#5d463a>....</TD><TD BGCOLOR=#5f4b3c>....</TD><TD BGCOLOR=#6b5b4a>....</TD><TD BGCOLOR=#735e4f>....</TD><TD BGCOLOR=#7b6258>....</TD><TD BGCOLOR=#74695e>....</TD><TD BGCOLOR=#7a6b62>....</TD><TD BGCOLOR=#7c6861>....</TD><TD BGCOLOR=#7b685a>....</TD><TD BGCOLOR=#7b695a>....</TD><TD BGCOLOR=#7f705f>....</TD><TD BGCOLOR=#817564>....</TD><TD BGCOLOR=#7f7069>....</TD><TD BGCOLOR=#7a6b64 COLSPAN=2>....</TD><TD BGCOLOR=#6e6159>....</TD><TD BGCOLOR=#6c6658>....</TD><TD BGCOLOR=#666055>....</TD><TD BGCOLOR=#665f59>....</TD><TD BGCOLOR=#675e55>....</TD><TD BGCOLOR=#655a48>....</TD><TD BGCOLOR=#5f5247>....</TD><TD BGCOLOR=#645553>....</TD><TD BGCOLOR=#69564f>....</TD><TD BGCOLOR=#55493a>....</TD><TD BGCOLOR=#626656>....</TD><TD BGCOLOR=#5a654e>....</TD><TD BGCOLOR=#68644f>....</TD><TD BGCOLOR=#676550>....</TD><TD BGCOLOR=#646952>....</TD><TD BGCOLOR=#636650>....</TD><TD BGCOLOR=#616458>....</TD><TD BGCOLOR=#5a503d>....</TD><TD BGCOLOR=#4d3d1f>....</TD><TD BGCOLOR=#46250c>....</TD><TD BGCOLOR=#3d2311>....</TD><TD BGCOLOR=#3c2907>....</TD><TD BGCOLOR=#462207>....</TD><TD BGCOLOR=#32220f>....</TD><TD BGCOLOR=#050602>....</TD><TD BGCOLOR=#000401>....</TD><TD BGCOLOR=#262327>....</TD><TD BGCOLOR=#594f55>....</TD><TD BGCOLOR=#675353>....</TD><TD BGCOLOR=#765853>....</TD><TD BGCOLOR=#7c605b>....</TD><TD BGCOLOR=#815d5a>....</TD><TD BGCOLOR=#87635b>....</TD><TD BGCOLOR=#82625a>....</TD><TD BGCOLOR=#7e625a>....</TD><TD BGCOLOR=#835d52>....</TD><TD BGCOLOR=#885e58>....</TD><TD BGCOLOR=#815d5c>....</TD><TD BGCOLOR=#7d615b>....</TD><TD BGCOLOR=#685c53>....</TD><TD BGCOLOR=#666559>....</TD><TD BGCOLOR=#616453>....</TD><TD BGCOLOR=#6f6e5b>....</TD><TD BGCOLOR=#696852>....</TD><TD BGCOLOR=#5e6455>....</TD><TD BGCOLOR=#565240>....</TD><TD BGCOLOR=#503b20>....</TD><TD BGCOLOR=#432911>....</TD><TD BGCOLOR=#41280c>....</TD><TD BGCOLOR=#442d0d>....</TD><TD BGCOLOR=#432d0a>....</TD><TD BGCOLOR=#473210>....</TD><TD BGCOLOR=#3e2a15>....</TD><TD BGCOLOR=#41372d>....</TD><TD BGCOLOR=#524e49>....</TD><TD BGCOLOR=#5a534d>....</TD><TD BGCOLOR=#655b53>....</TD><TD BGCOLOR=#66594e>....</TD><TD BGCOLOR=#615347>....</TD><TD BGCOLOR=#6a5c4f>....</TD><TD BGCOLOR=#736558>....</TD><TD BGCOLOR=#716356>....</TD><TD BGCOLOR=#76645d>....</TD><TD BGCOLOR=#766e63>....</TD><TD BGCOLOR=#776c5f>....</TD><TD BGCOLOR=#767461>....</TD></TR> <TR><TD BGCOLOR=#1f0501 COLSPAN=2>....</TD><TD BGCOLOR=#190902>....</TD><TD BGCOLOR=#170a03>....</TD><TD BGCOLOR=#190a03>....</TD><TD BGCOLOR=#130c03>....</TD><TD BGCOLOR=#190a04>....</TD><TD BGCOLOR=#160a02>....</TD><TD BGCOLOR=#140b03>....</TD><TD BGCOLOR=#1c0a04>....</TD><TD BGCOLOR=#190b04>....</TD><TD BGCOLOR=#150a02>....</TD><TD BGCOLOR=#130704>....</TD><TD BGCOLOR=#120a08>....</TD><TD BGCOLOR=#110c03>....</TD><TD BGCOLOR=#210b01>....</TD><TD BGCOLOR=#2d0601>....</TD><TD BGCOLOR=#4c4030>....</TD><TD BGCOLOR=#4d5037>....</TD><TD BGCOLOR=#54522f>....</TD><TD BGCOLOR=#5f533f>....</TD><TD BGCOLOR=#5c5e4c>....</TD><TD BGCOLOR=#553e25>....</TD><TD BGCOLOR=#45391c>....</TD><TD BGCOLOR=#492a0b>....</TD><TD BGCOLOR=#492809>....</TD><TD BGCOLOR=#4c2b0c>....</TD><TD BGCOLOR=#452508>....</TD><TD BGCOLOR=#3d1f0b>....</TD><TD BGCOLOR=#412211>....</TD><TD BGCOLOR=#48291c>....</TD><TD BGCOLOR=#482c21>....</TD><TD BGCOLOR=#543d30>....</TD><TD BGCOLOR=#4f3422>....</TD><TD BGCOLOR=#5a4234>....</TD><TD BGCOLOR=#5c463b>....</TD><TD BGCOLOR=#634f43>....</TD><TD BGCOLOR=#6a5a4c>....</TD><TD BGCOLOR=#745f53>....</TD><TD BGCOLOR=#7a625e>....</TD><TD BGCOLOR=#72655e>....</TD><TD BGCOLOR=#7b685e>....</TD><TD BGCOLOR=#786758>....</TD><TD BGCOLOR=#786558>....</TD><TD BGCOLOR=#7a675a>....</TD><TD BGCOLOR=#796a5c>....</TD><TD BGCOLOR=#7a6e5f>....</TD><TD BGCOLOR=#7b6c64>....</TD><TD BGCOLOR=#796a63>....</TD><TD BGCOLOR=#72635c>....</TD><TD BGCOLOR=#71635c>....</TD><TD BGCOLOR=#6d645a>....</TD><TD BGCOLOR=#6c6358>....</TD><TD BGCOLOR=#665e51>....</TD><TD BGCOLOR=#5a5043>....</TD><TD BGCOLOR=#55483d>....</TD><TD BGCOLOR=#625850>....</TD><TD BGCOLOR=#625a55>....</TD><TD BGCOLOR=#5a4f42>....</TD><TD BGCOLOR=#625c48>....</TD><TD BGCOLOR=#676b58>....</TD><TD BGCOLOR=#5c6349>....</TD><TD BGCOLOR=#65644d>....</TD><TD BGCOLOR=#64654f>....</TD><TD BGCOLOR=#636750>....</TD><TD BGCOLOR=#64614d>....</TD><TD BGCOLOR=#646251>....</TD><TD BGCOLOR=#5c4e3d>....</TD><TD BGCOLOR=#4d3d25>....</TD><TD BGCOLOR=#42250d>....</TD><TD BGCOLOR=#3e230c>....</TD><TD BGCOLOR=#3c2a06>....</TD><TD BGCOLOR=#412208>....</TD><TD BGCOLOR=#2d2313>....</TD><TD BGCOLOR=#040201>....</TD><TD BGCOLOR=#030500>....</TD><TD BGCOLOR=#1d1918>....</TD><TD BGCOLOR=#584d4c>....</TD><TD BGCOLOR=#685654>....</TD><TD BGCOLOR=#725b58>....</TD><TD BGCOLOR=#755d57>....</TD><TD BGCOLOR=#7d5b58>....</TD><TD BGCOLOR=#81605b>....</TD><TD BGCOLOR=#816058>....</TD><TD BGCOLOR=#7e5f53>....</TD><TD BGCOLOR=#886057>....</TD><TD BGCOLOR=#875d5a>....</TD><TD BGCOLOR=#7f5b59>....</TD><TD BGCOLOR=#7d6156>....</TD><TD BGCOLOR=#6f5c55>....</TD><TD BGCOLOR=#676056>....</TD><TD BGCOLOR=#626453>....</TD><TD BGCOLOR=#6b6b58>....</TD><TD BGCOLOR=#676853>....</TD><TD BGCOLOR=#686c5c>....</TD><TD BGCOLOR=#646353>....</TD><TD BGCOLOR=#594e3a>....</TD><TD BGCOLOR=#45321b>....</TD><TD BGCOLOR=#3e290f>....</TD><TD BGCOLOR=#422a0d>....</TD><TD BGCOLOR=#432c09>....</TD><TD BGCOLOR=#432e05>....</TD><TD BGCOLOR=#482b0e>....</TD><TD BGCOLOR=#442814>....</TD><TD BGCOLOR=#4f4037>....</TD><TD BGCOLOR=#57514c>....</TD><TD BGCOLOR=#5f554c>....</TD><TD BGCOLOR=#65564b>....</TD><TD BGCOLOR=#67584c>....</TD><TD BGCOLOR=#65574a>....</TD><TD BGCOLOR=#685a4d>....</TD><TD BGCOLOR=#726457>....</TD><TD BGCOLOR=#6e5e54>....</TD><TD BGCOLOR=#72695c>....</TD><TD BGCOLOR=#766657>....</TD><TD BGCOLOR=#786e5b>....</TD></TR> <TR><TD BGCOLOR=#190802 COLSPAN=2>....</TD><TD BGCOLOR=#170c04>....</TD><TD BGCOLOR=#180b04>....</TD><TD BGCOLOR=#1c0a04>....</TD><TD BGCOLOR=#140b03>....</TD><TD BGCOLOR=#160c05>....</TD><TD BGCOLOR=#150b03>....</TD><TD BGCOLOR=#130b02>....</TD><TD BGCOLOR=#140e04>....</TD><TD BGCOLOR=#130c02>....</TD><TD BGCOLOR=#140c03>....</TD><TD BGCOLOR=#150404>....</TD><TD BGCOLOR=#140407>....</TD><TD BGCOLOR=#110903>....</TD><TD BGCOLOR=#200b03>....</TD><TD BGCOLOR=#2b0701>....</TD><TD BGCOLOR=#4c402f>....</TD><TD BGCOLOR=#514a34>....</TD><TD BGCOLOR=#5e492c>....</TD><TD BGCOLOR=#625141>....</TD><TD BGCOLOR=#5c5d4b>....</TD><TD BGCOLOR=#564021>....</TD><TD BGCOLOR=#413611>....</TD><TD BGCOLOR=#462c0b>....</TD><TD BGCOLOR=#462a0a>....</TD><TD BGCOLOR=#482c0b>....</TD><TD BGCOLOR=#422407>....</TD><TD BGCOLOR=#3c1806>....</TD><TD BGCOLOR=#422212>....</TD><TD BGCOLOR=#482c1e>....</TD><TD BGCOLOR=#432b1f>....</TD><TD BGCOLOR=#462d20>....</TD><TD BGCOLOR=#532f1f>....</TD><TD BGCOLOR=#54382b>....</TD><TD BGCOLOR=#5e473f>....</TD><TD BGCOLOR=#5e4941>....</TD><TD BGCOLOR=#69574f>....</TD><TD BGCOLOR=#735d56>....</TD><TD BGCOLOR=#78645b>....</TD><TD BGCOLOR=#726359>....</TD><TD BGCOLOR=#785f59>....</TD><TD BGCOLOR=#74645b>....</TD><TD BGCOLOR=#77645c>....</TD><TD BGCOLOR=#7b675f>....</TD><TD BGCOLOR=#7a6a60>....</TD><TD BGCOLOR=#796c62>....</TD><TD BGCOLOR=#796a63>....</TD><TD BGCOLOR=#766760>....</TD><TD BGCOLOR=#75665f>....</TD><TD BGCOLOR=#73645b>....</TD><TD BGCOLOR=#6c604e>....</TD><TD BGCOLOR=#5e5142>....</TD><TD BGCOLOR=#55483d>....</TD><TD BGCOLOR=#5c4c46>....</TD><TD BGCOLOR=#655654>....</TD><TD BGCOLOR=#5e5651>....</TD><TD BGCOLOR=#4f4f46>....</TD><TD BGCOLOR=#666450>....</TD><TD BGCOLOR=#66644b>....</TD><TD BGCOLOR=#666b54>....</TD><TD BGCOLOR=#616348>....</TD><TD BGCOLOR=#606148>....</TD><TD BGCOLOR=#636750>....</TD><TD BGCOLOR=#62654e>....</TD><TD BGCOLOR=#655e4b>....</TD><TD BGCOLOR=#676149>....</TD><TD BGCOLOR=#5e4e3d>....</TD><TD BGCOLOR=#4d3e2b>....</TD><TD BGCOLOR=#412911>....</TD><TD BGCOLOR=#3f2408>....</TD><TD BGCOLOR=#3b2a04>....</TD><TD BGCOLOR=#3b2209>....</TD><TD BGCOLOR=#201c0f>....</TD><TD BGCOLOR=#040000>....</TD><TD BGCOLOR=#050400>....</TD><TD BGCOLOR=#0f0905>....</TD><TD BGCOLOR=#564a43>....</TD><TD BGCOLOR=#655652>....</TD><TD BGCOLOR=#675857>....</TD><TD BGCOLOR=#745f58>....</TD><TD BGCOLOR=#795854>....</TD><TD BGCOLOR=#7f615e>....</TD><TD BGCOLOR=#7c5c53>....</TD><TD BGCOLOR=#825e4f>....</TD><TD BGCOLOR=#895f58>....</TD><TD BGCOLOR=#865c5d>....</TD><TD BGCOLOR=#825f5b>....</TD><TD BGCOLOR=#7b5f50>....</TD><TD BGCOLOR=#715651>....</TD><TD BGCOLOR=#6a5c54>....</TD><TD BGCOLOR=#666756>....</TD><TD BGCOLOR=#6d705c>....</TD><TD BGCOLOR=#646751>....</TD><TD BGCOLOR=#686b58>....</TD><TD BGCOLOR=#67695b>....</TD><TD BGCOLOR=#5a5b4e>....</TD><TD BGCOLOR=#4d432b>....</TD><TD BGCOLOR=#3f2e16>....</TD><TD BGCOLOR=#432a12>....</TD><TD BGCOLOR=#472e0f>....</TD><TD BGCOLOR=#462e08>....</TD><TD BGCOLOR=#462709>....</TD><TD BGCOLOR=#482a12>....</TD><TD BGCOLOR=#3d2918>....</TD><TD BGCOLOR=#574a40>....</TD><TD BGCOLOR=#5f554e>....</TD><TD BGCOLOR=#615b56>....</TD><TD BGCOLOR=#60554b>....</TD><TD BGCOLOR=#605245>....</TD><TD BGCOLOR=#625447>....</TD><TD BGCOLOR=#66584b>....</TD><TD BGCOLOR=#6a5d50>....</TD><TD BGCOLOR=#6e6654>....</TD><TD BGCOLOR=#786353>....</TD><TD BGCOLOR=#796752>....</TD></TR> </TABLE><TABLE CELLPADDING=0 CELLSPACING=0 BORDER=0> <TR><TD BGCOLOR=#180c03>....</TD><TD BGCOLOR=#180c03>....</TD><TD BGCOLOR=#150d04>....</TD><TD BGCOLOR=#170a03>....</TD><TD BGCOLOR=#1d0905>....</TD><TD BGCOLOR=#160903>....</TD><TD BGCOLOR=#170b05>....</TD><TD BGCOLOR=#170b04>....</TD><TD BGCOLOR=#170b04>....</TD><TD BGCOLOR=#150c03>....</TD><TD BGCOLOR=#130901>....</TD><TD BGCOLOR=#160a02>....</TD><TD BGCOLOR=#180405>....</TD><TD BGCOLOR=#170506>....</TD><TD BGCOLOR=#130903>....</TD><TD BGCOLOR=#210c05>....</TD><TD BGCOLOR=#2b0704>....</TD><TD BGCOLOR=#4c3f34>....</TD><TD BGCOLOR=#534633>....</TD><TD BGCOLOR=#5e492b>....</TD><TD BGCOLOR=#5c523f>....</TD><TD BGCOLOR=#625b4f>....</TD><TD BGCOLOR=#574021>....</TD><TD BGCOLOR=#4b3414>....</TD><TD BGCOLOR=#432a0b>....</TD><TD BGCOLOR=#402f0b>....</TD><TD BGCOLOR=#412f0b>....</TD><TD BGCOLOR=#402505>....</TD><TD BGCOLOR=#371602>....</TD><TD BGCOLOR=#3c1b0a>....</TD><TD BGCOLOR=#412216>....</TD><TD BGCOLOR=#472f22>....</TD><TD BGCOLOR=#4b3423>....</TD><TD BGCOLOR=#4e2c19>....</TD><TD BGCOLOR=#523321>....</TD><TD BGCOLOR=#5e4737>....</TD><TD BGCOLOR=#5e4a3d>....</TD><TD BGCOLOR=#655246>....</TD><TD BGCOLOR=#716256>....</TD><TD BGCOLOR=#716354>....</TD><TD BGCOLOR=#746358>....</TD><TD BGCOLOR=#765e58>....</TD><TD BGCOLOR=#746659>....</TD><TD BGCOLOR=#7c6961>....</TD><TD BGCOLOR=#7b6560>....</TD><TD BGCOLOR=#796961>....</TD><TD BGCOLOR=#736f63>....</TD><TD BGCOLOR=#74695e>....</TD><TD BGCOLOR=#6e625b>....</TD><TD BGCOLOR=#6b5f57>....</TD><TD BGCOLOR=#65584e>....</TD><TD BGCOLOR=#63544a>....</TD><TD BGCOLOR=#544737>....</TD><TD BGCOLOR=#584c45>....</TD><TD BGCOLOR=#60524e>....</TD><TD BGCOLOR=#645253>....</TD><TD BGCOLOR=#524b3d>....</TD><TD BGCOLOR=#5b5d4d>....</TD><TD BGCOLOR=#656955>....</TD><TD BGCOLOR=#61674e>....</TD><TD BGCOLOR=#656c56>....</TD><TD BGCOLOR=#5c614c>....</TD><TD BGCOLOR=#5d624e>....</TD><TD BGCOLOR=#636856>....</TD><TD BGCOLOR=#636755>....</TD><TD BGCOLOR=#626151>....</TD><TD BGCOLOR=#656653>....</TD><TD BGCOLOR=#5e5746>....</TD><TD BGCOLOR=#4f4430>....</TD><TD BGCOLOR=#3e2c12>....</TD><TD BGCOLOR=#3e2202>....</TD><TD BGCOLOR=#392904>....</TD><TD BGCOLOR=#36220a>....</TD><TD BGCOLOR=#1e170d>....</TD><TD BGCOLOR=#0c0004>....</TD><TD BGCOLOR=#060107>....</TD><TD BGCOLOR=#070505>....</TD><TD BGCOLOR=#3a362e>....</TD><TD BGCOLOR=#57564e>....</TD><TD BGCOLOR=#5e5957>....</TD><TD BGCOLOR=#725b54>....</TD><TD BGCOLOR=#775853>....</TD><TD BGCOLOR=#735957>....</TD><TD BGCOLOR=#7c5a52>....</TD><TD BGCOLOR=#865c4e>....</TD><TD BGCOLOR=#8b5e58>....</TD><TD BGCOLOR=#835f60>....</TD><TD BGCOLOR=#815c5c>....</TD><TD BGCOLOR=#775b4c>....</TD><TD BGCOLOR=#70524d>....</TD><TD BGCOLOR=#6a5e55>....</TD><TD BGCOLOR=#676556>....</TD><TD BGCOLOR=#6a6e5b>....</TD><TD BGCOLOR=#666654>....</TD><TD BGCOLOR=#69695c>....</TD><TD BGCOLOR=#636854>....</TD><TD BGCOLOR=#5f6459>....</TD><TD BGCOLOR=#544e3e>....</TD><TD BGCOLOR=#4a3926>....</TD><TD BGCOLOR=#492d14>....</TD><TD BGCOLOR=#472a0e>....</TD><TD BGCOLOR=#492c10>....</TD><TD BGCOLOR=#482707>....</TD><TD BGCOLOR=#442e11>....</TD><TD BGCOLOR=#33230c>....</TD><TD BGCOLOR=#453526>....</TD><TD BGCOLOR=#554842>....</TD><TD BGCOLOR=#5b534c>....</TD><TD BGCOLOR=#5c5248>....</TD><TD BGCOLOR=#5d4f45>....</TD><TD BGCOLOR=#64544b>....</TD><TD BGCOLOR=#63574d>....</TD><TD BGCOLOR=#675d52>....</TD><TD BGCOLOR=#6c6353>....</TD><TD BGCOLOR=#715f50>....</TD><TD BGCOLOR=#7c675b>....</TD></TR> <TR><TD BGCOLOR=#1c0601 COLSPAN=2>....</TD><TD BGCOLOR=#180b04>....</TD><TD BGCOLOR=#130901>....</TD><TD BGCOLOR=#190b03>....</TD><TD BGCOLOR=#180902>....</TD><TD BGCOLOR=#1a0b04>....</TD><TD BGCOLOR=#190b03>....</TD><TD BGCOLOR=#160802>....</TD><TD BGCOLOR=#180904>....</TD><TD BGCOLOR=#170900>....</TD><TD BGCOLOR=#170902>....</TD><TD BGCOLOR=#180405>....</TD><TD BGCOLOR=#150604>....</TD><TD BGCOLOR=#130a02>....</TD><TD BGCOLOR=#230d05>....</TD><TD BGCOLOR=#2a0404>....</TD><TD BGCOLOR=#483c33>....</TD><TD BGCOLOR=#544938>....</TD><TD BGCOLOR=#564c2b>....</TD><TD BGCOLOR=#5c5641>....</TD><TD BGCOLOR=#64554e>....</TD><TD BGCOLOR=#574123>....</TD><TD BGCOLOR=#4e2f15>....</TD><TD BGCOLOR=#43270a>....</TD><TD BGCOLOR=#3c2e0c>....</TD><TD BGCOLOR=#3e2f0c>....</TD><TD BGCOLOR=#3f2607>....</TD><TD BGCOLOR=#2e1f06>....</TD><TD BGCOLOR=#30210b>....</TD><TD BGCOLOR=#372816>....</TD><TD BGCOLOR=#3f2d1e>....</TD><TD BGCOLOR=#4e3327>....</TD><TD BGCOLOR=#512d21>....</TD><TD BGCOLOR=#583525>....</TD><TD BGCOLOR=#5b4734>....</TD><TD BGCOLOR=#5b4b3a>....</TD><TD BGCOLOR=#675244>....</TD><TD BGCOLOR=#6c5d4c>....</TD><TD BGCOLOR=#6c6453>....</TD><TD BGCOLOR=#6a5b52>....</TD><TD BGCOLOR=#755e56>....</TD><TD BGCOLOR=#7a6856>....</TD><TD BGCOLOR=#73655a>....</TD><TD BGCOLOR=#76645e>....</TD><TD BGCOLOR=#76665f>....</TD><TD BGCOLOR=#6f675d>....</TD><TD BGCOLOR=#6a6454>....</TD><TD BGCOLOR=#685e57>....</TD><TD BGCOLOR=#675b53>....</TD><TD BGCOLOR=#66574d>....</TD><TD BGCOLOR=#66534e>....</TD><TD BGCOLOR=#544636>....</TD><TD BGCOLOR=#57494a>....</TD><TD BGCOLOR=#594a46>....</TD><TD BGCOLOR=#57433e>....</TD><TD BGCOLOR=#5c533a>....</TD><TD BGCOLOR=#625f45>....</TD><TD BGCOLOR=#625f4b>....</TD><TD BGCOLOR=#5c5742>....</TD><TD BGCOLOR=#615c45>....</TD><TD BGCOLOR=#555038>....</TD><TD BGCOLOR=#58513d>....</TD><TD BGCOLOR=#5b5340>....</TD><TD BGCOLOR=#574f3c>....</TD><TD BGCOLOR=#534b38>....</TD><TD BGCOLOR=#514a35>....</TD><TD BGCOLOR=#4c452e>....</TD><TD BGCOLOR=#483d25>....</TD><TD BGCOLOR=#3f3218>....</TD><TD BGCOLOR=#402609>....</TD><TD BGCOLOR=#392908>....</TD><TD BGCOLOR=#35220b>....</TD><TD BGCOLOR=#1e1306>....</TD><TD BGCOLOR=#160401>....</TD><TD BGCOLOR=#0b0407>....</TD><TD BGCOLOR=#080609>....</TD><TD BGCOLOR=#151210>....</TD><TD BGCOLOR=#444440>....</TD><TD BGCOLOR=#585552>....</TD><TD BGCOLOR=#705754>....</TD><TD BGCOLOR=#765a57>....</TD><TD BGCOLOR=#6f5c57>....</TD><TD BGCOLOR=#73574e>....</TD><TD BGCOLOR=#795447>....</TD><TD BGCOLOR=#875a55>....</TD><TD BGCOLOR=#7c5b5c>....</TD><TD BGCOLOR=#755357>....</TD><TD BGCOLOR=#6c5550>....</TD><TD BGCOLOR=#69554b>....</TD><TD BGCOLOR=#676657>....</TD><TD BGCOLOR=#616357>....</TD><TD BGCOLOR=#656c61>....</TD><TD BGCOLOR=#676554>....</TD><TD BGCOLOR=#696a61>....</TD><TD BGCOLOR=#5c694c>....</TD><TD BGCOLOR=#5c6859>....</TD><TD BGCOLOR=#5a5649>....</TD><TD BGCOLOR=#50422f>....</TD><TD BGCOLOR=#4e3219>....</TD><TD BGCOLOR=#492b11>....</TD><TD BGCOLOR=#432c10>....</TD><TD BGCOLOR=#452803>....</TD><TD BGCOLOR=#423110>....</TD><TD BGCOLOR=#30270d>....</TD><TD BGCOLOR=#312412>....</TD><TD BGCOLOR=#44362f>....</TD><TD BGCOLOR=#594a46>....</TD><TD BGCOLOR=#5d5149>....</TD><TD BGCOLOR=#5c4c45>....</TD><TD BGCOLOR=#5d4a44>....</TD><TD BGCOLOR=#5d5048>....</TD><TD BGCOLOR=#665751>....</TD><TD BGCOLOR=#6b5e50>....</TD><TD BGCOLOR=#695d4e>....</TD><TD BGCOLOR=#6f625a>....</TD></TR> <TR><TD BGCOLOR=#230000 COLSPAN=2>....</TD><TD BGCOLOR=#1d0904>....</TD><TD BGCOLOR=#140b02>....</TD><TD BGCOLOR=#140c02>....</TD><TD BGCOLOR=#180a01>....</TD><TD BGCOLOR=#190b01 COLSPAN=2>....</TD><TD BGCOLOR=#160700>....</TD><TD BGCOLOR=#180904>....</TD><TD BGCOLOR=#190b00>....</TD><TD BGCOLOR=#160801>....</TD><TD BGCOLOR=#150404>....</TD><TD BGCOLOR=#110603>....</TD><TD BGCOLOR=#110701>....</TD><TD BGCOLOR=#270c06>....</TD><TD BGCOLOR=#2a0301>....</TD><TD BGCOLOR=#483d31>....</TD><TD BGCOLOR=#544a39>....</TD><TD BGCOLOR=#574c31>....</TD><TD BGCOLOR=#5d5240>....</TD><TD BGCOLOR=#67554f>....</TD><TD BGCOLOR=#574324>....</TD><TD BGCOLOR=#4c3216>....</TD><TD BGCOLOR=#432809>....</TD><TD BGCOLOR=#382a08>....</TD><TD BGCOLOR=#3e2e10>....</TD><TD BGCOLOR=#3e220d>....</TD><TD BGCOLOR=#301a0a>....</TD><TD BGCOLOR=#321d0b>....</TD><TD BGCOLOR=#311c09>....</TD><TD BGCOLOR=#3c2416>....</TD><TD BGCOLOR=#472624>....</TD><TD BGCOLOR=#47211c>....</TD><TD BGCOLOR=#513127>....</TD><TD BGCOLOR=#534335>....</TD><TD BGCOLOR=#574b3c>....</TD><TD BGCOLOR=#695444>....</TD><TD BGCOLOR=#6b5844>....</TD><TD BGCOLOR=#676050>....</TD><TD BGCOLOR=#675b4f>....</TD><TD BGCOLOR=#765f53>....</TD><TD BGCOLOR=#786153>....</TD><TD BGCOLOR=#6e6359>....</TD><TD BGCOLOR=#6c6259>....</TD><TD BGCOLOR=#71625a>....</TD><TD BGCOLOR=#735e58>....</TD><TD BGCOLOR=#656050>....</TD><TD BGCOLOR=#61564f>....</TD><TD BGCOLOR=#65524d>....</TD><TD BGCOLOR=#675147>....</TD><TD BGCOLOR=#5c473d>....</TD><TD BGCOLOR=#513f34>....</TD><TD BGCOLOR=#5b4a50>....</TD><TD BGCOLOR=#52413a>....</TD><TD BGCOLOR=#3e2a1d>....</TD><TD BGCOLOR=#3e2e15>....</TD><TD BGCOLOR=#3f3215>....</TD><TD BGCOLOR=#3d2c16>....</TD><TD BGCOLOR=#3d2714>....</TD><TD BGCOLOR=#3e2911>....</TD><TD BGCOLOR=#412c0f>....</TD><TD BGCOLOR=#3d290e>....</TD><TD BGCOLOR=#3e2911>....</TD><TD BGCOLOR=#402b13>....</TD><TD BGCOLOR=#3f2a12>....</TD><TD BGCOLOR=#422b13>....</TD><TD BGCOLOR=#3c2a11>....</TD><TD BGCOLOR=#392b12>....</TD><TD BGCOLOR=#382d15>....</TD><TD BGCOLOR=#3c2518>....</TD><TD BGCOLOR=#392812>....</TD><TD BGCOLOR=#331d07>....</TD><TD BGCOLOR=#231403>....</TD><TD BGCOLOR=#221001>....</TD><TD BGCOLOR=#1a0f04>....</TD><TD BGCOLOR=#1d110e>....</TD><TD BGCOLOR=#2b181b>....</TD><TD BGCOLOR=#231311>....</TD><TD BGCOLOR=#433934>....</TD><TD BGCOLOR=#61484a>....</TD><TD BGCOLOR=#684f4e>....</TD><TD BGCOLOR=#61524b>....</TD><TD BGCOLOR=#655149>....</TD><TD BGCOLOR=#71574e>....</TD><TD BGCOLOR=#75534e>....</TD><TD BGCOLOR=#765250>....</TD><TD BGCOLOR=#694f4d>....</TD><TD BGCOLOR=#634e4f>....</TD><TD BGCOLOR=#625343>....</TD><TD BGCOLOR=#656853>....</TD><TD BGCOLOR=#606154>....</TD><TD BGCOLOR=#676a62>....</TD><TD BGCOLOR=#65634f>....</TD><TD BGCOLOR=#676a5d>....</TD><TD BGCOLOR=#606e4e>....</TD><TD BGCOLOR=#5f6c58>....</TD><TD BGCOLOR=#5c5947>....</TD><TD BGCOLOR=#5a543d>....</TD><TD BGCOLOR=#533b24>....</TD><TD BGCOLOR=#4a2f18>....</TD><TD BGCOLOR=#3c2e0f>....</TD><TD BGCOLOR=#3f2702>....</TD><TD BGCOLOR=#423010>....</TD><TD BGCOLOR=#32280c>....</TD><TD BGCOLOR=#352910>....</TD><TD BGCOLOR=#312315>....</TD><TD BGCOLOR=#493938>....</TD><TD BGCOLOR=#594a46>....</TD><TD BGCOLOR=#57433d>....</TD><TD BGCOLOR=#5b4440>....</TD><TD BGCOLOR=#56453e>....</TD><TD BGCOLOR=#614e49>....</TD><TD BGCOLOR=#645448>....</TD><TD BGCOLOR=#695e4f>....</TD><TD BGCOLOR=#696258>....</TD></TR> <TR><TD BGCOLOR=#280202 COLSPAN=2>....</TD><TD BGCOLOR=#1e0804>....</TD><TD BGCOLOR=#150801>....</TD><TD BGCOLOR=#170a01>....</TD><TD BGCOLOR=#180b00 COLSPAN=2>....</TD><TD BGCOLOR=#170900>....</TD><TD BGCOLOR=#190a01>....</TD><TD BGCOLOR=#180903>....</TD><TD BGCOLOR=#180a00>....</TD><TD BGCOLOR=#190b04>....</TD><TD BGCOLOR=#140605>....</TD><TD BGCOLOR=#0f0802>....</TD><TD BGCOLOR=#110701>....</TD><TD BGCOLOR=#2b0b07>....</TD><TD BGCOLOR=#2d0400>....</TD><TD BGCOLOR=#473c2c>....</TD><TD BGCOLOR=#554a3b>....</TD><TD BGCOLOR=#584c36>....</TD><TD BGCOLOR=#5d4e3f>....</TD><TD BGCOLOR=#65514c>....</TD><TD BGCOLOR=#554324>....</TD><TD BGCOLOR=#4c381a>....</TD><TD BGCOLOR=#442907>....</TD><TD BGCOLOR=#392b0b>....</TD><TD BGCOLOR=#3d2c14>....</TD><TD BGCOLOR=#3c2012>....</TD><TD BGCOLOR=#2f1b0e>....</TD><TD BGCOLOR=#2b1807>....</TD><TD BGCOLOR=#301e06>....</TD><TD BGCOLOR=#36220e>....</TD><TD BGCOLOR=#3b1f18>....</TD><TD BGCOLOR=#3b1f14>....</TD><TD BGCOLOR=#493726>....</TD><TD BGCOLOR=#504436>....</TD><TD BGCOLOR=#5c4940>....</TD><TD BGCOLOR=#655040>....</TD><TD BGCOLOR=#6a5e44>....</TD><TD BGCOLOR=#685e50>....</TD><TD BGCOLOR=#69584c>....</TD><TD BGCOLOR=#725d4c>....</TD><TD BGCOLOR=#756456>....</TD><TD BGCOLOR=#73655c>....</TD><TD BGCOLOR=#6b6259>....</TD><TD BGCOLOR=#6a5f56>....</TD><TD BGCOLOR=#6a5650>....</TD><TD BGCOLOR=#5c5948>....</TD><TD BGCOLOR=#5a4e47>....</TD><TD BGCOLOR=#664d49>....</TD><TD BGCOLOR=#674943>....</TD><TD BGCOLOR=#573d39>....</TD><TD BGCOLOR=#5b4541>....</TD><TD BGCOLOR=#5a464a>....</TD><TD BGCOLOR=#3e2d1c>....</TD><TD BGCOLOR=#382217>....</TD><TD BGCOLOR=#382112>....</TD><TD BGCOLOR=#3b240e>....</TD><TD BGCOLOR=#3d290f>....</TD><TD BGCOLOR=#3c2a12>....</TD><TD BGCOLOR=#37250f>....</TD><TD BGCOLOR=#3b2813>....</TD><TD BGCOLOR=#3a2a11>....</TD><TD BGCOLOR=#392b10>....</TD><TD BGCOLOR=#38290e>....</TD><TD BGCOLOR=#36270c>....</TD><TD BGCOLOR=#372516>....</TD><TD BGCOLOR=#352413>....</TD><TD BGCOLOR=#342811>....</TD><TD BGCOLOR=#3a3016>....</TD><TD BGCOLOR=#392324>....</TD><TD BGCOLOR=#37271a>....</TD><TD BGCOLOR=#351d0a>....</TD><TD BGCOLOR=#291504>....</TD><TD BGCOLOR=#210b06>....</TD><TD BGCOLOR=#1d0e02>....</TD><TD BGCOLOR=#210c07>....</TD><TD BGCOLOR=#4a2a2b>....</TD><TD BGCOLOR=#51342a>....</TD><TD BGCOLOR=#453626>....</TD><TD BGCOLOR=#412b27>....</TD><TD BGCOLOR=#432828>....</TD><TD BGCOLOR=#503b35>....</TD><TD BGCOLOR=#553d3a>....</TD><TD BGCOLOR=#5e4442>....</TD><TD BGCOLOR=#604c47>....</TD><TD BGCOLOR=#694c41>....</TD><TD BGCOLOR=#5d4937>....</TD><TD BGCOLOR=#563b30>....</TD><TD BGCOLOR=#4e3220>....</TD><TD BGCOLOR=#4d4229>....</TD><TD BGCOLOR=#52412c>....</TD><TD BGCOLOR=#5b4c37>....</TD><TD BGCOLOR=#54553c>....</TD><TD BGCOLOR=#626152>....</TD><TD BGCOLOR=#636244>....</TD><TD BGCOLOR=#696352>....</TD><TD BGCOLOR=#5d5c45>....</TD><TD BGCOLOR=#5c5d43>....</TD><TD BGCOLOR=#5f4d37>....</TD><TD BGCOLOR=#573a27>....</TD><TD BGCOLOR=#3d2d0e>....</TD><TD BGCOLOR=#442603>....</TD><TD BGCOLOR=#482c0f>....</TD><TD BGCOLOR=#36250c>....</TD><TD BGCOLOR=#3c3111>....</TD><TD BGCOLOR=#332808>....</TD><TD BGCOLOR=#3c301c>....</TD><TD BGCOLOR=#514138>....</TD><TD BGCOLOR=#5b433f>....</TD><TD BGCOLOR=#543a37>....</TD><TD BGCOLOR=#55423c>....</TD><TD BGCOLOR=#5c4f48>....</TD><TD BGCOLOR=#605446>....</TD><TD BGCOLOR=#615445>....</TD><TD BGCOLOR=#6a5a54>....</TD></TR> <TR><TD BGCOLOR=#220805 COLSPAN=2>....</TD><TD BGCOLOR=#1c0908>....</TD><TD BGCOLOR=#140903>....</TD><TD BGCOLOR=#140d02>....</TD><TD BGCOLOR=#160903>....</TD><TD BGCOLOR=#1b0400>....</TD><TD BGCOLOR=#1e0b03>....</TD><TD BGCOLOR=#170e04>....</TD><TD BGCOLOR=#180d06>....</TD><TD BGCOLOR=#160c01>....</TD><TD BGCOLOR=#160c06>....</TD><TD BGCOLOR=#110a04>....</TD><TD BGCOLOR=#100902>....</TD><TD BGCOLOR=#180803>....</TD><TD BGCOLOR=#240d03>....</TD><TD BGCOLOR=#2b0a01>....</TD><TD BGCOLOR=#4b3a26>....</TD><TD BGCOLOR=#514d2f>....</TD><TD BGCOLOR=#554d2e>....</TD><TD BGCOLOR=#5c5136>....</TD><TD BGCOLOR=#5b5649>....</TD><TD BGCOLOR=#544228>....</TD><TD BGCOLOR=#553522>....</TD><TD BGCOLOR=#4a2a06>....</TD><TD BGCOLOR=#3e2703>....</TD><TD BGCOLOR=#3b2d0b>....</TD><TD BGCOLOR=#35270b>....</TD><TD BGCOLOR=#36200f>....</TD><TD BGCOLOR=#281504>....</TD><TD BGCOLOR=#2d1d08>....</TD><TD BGCOLOR=#31200b>....</TD><TD BGCOLOR=#331a07>....</TD><TD BGCOLOR=#3d230c>....</TD><TD BGCOLOR=#4d3c23>....</TD><TD BGCOLOR=#534532>....</TD><TD BGCOLOR=#5b463c>....</TD><TD BGCOLOR=#614840>....</TD><TD BGCOLOR=#665644>....</TD><TD BGCOLOR=#685749>....</TD><TD BGCOLOR=#6d5851>....</TD><TD BGCOLOR=#715d55>....</TD><TD BGCOLOR=#6f5c52>....</TD><TD BGCOLOR=#72575a>....</TD><TD BGCOLOR=#6b5d56>....</TD><TD BGCOLOR=#655a4d>....</TD><TD BGCOLOR=#634945>....</TD><TD BGCOLOR=#554440>....</TD><TD BGCOLOR=#574c47>....</TD><TD BGCOLOR=#594a47>....</TD><TD BGCOLOR=#54403d>....</TD><TD BGCOLOR=#4b3935>....</TD><TD BGCOLOR=#54423f>....</TD><TD BGCOLOR=#3d2c2a>....</TD><TD BGCOLOR=#342414>....</TD><TD BGCOLOR=#3a2712>....</TD><TD BGCOLOR=#3a2614>....</TD><TD BGCOLOR=#3c2811>....</TD><TD BGCOLOR=#3c280a>....</TD><TD BGCOLOR=#3f2a13>....</TD><TD BGCOLOR=#3c291a>....</TD><TD BGCOLOR=#3b2c13>....</TD><TD BGCOLOR=#3d2617>....</TD><TD BGCOLOR=#3e261a>....</TD><TD BGCOLOR=#3e2713>....</TD><TD BGCOLOR=#44250e>....</TD><TD BGCOLOR=#3d2517>....</TD><TD BGCOLOR=#3b261a>....</TD><TD BGCOLOR=#34230f>....</TD><TD BGCOLOR=#34270a>....</TD><TD BGCOLOR=#2f251d>....</TD><TD BGCOLOR=#372a16>....</TD><TD BGCOLOR=#311e0a>....</TD><TD BGCOLOR=#211108>....</TD><TD BGCOLOR=#210f0a>....</TD><TD BGCOLOR=#260805>....</TD><TD BGCOLOR=#250c09>....</TD><TD BGCOLOR=#503c35>....</TD><TD BGCOLOR=#5a3c35>....</TD><TD BGCOLOR=#5d3f3f>....</TD><TD BGCOLOR=#56393d>....</TD><TD BGCOLOR=#573b36>....</TD><TD BGCOLOR=#5f423a>....</TD><TD BGCOLOR=#4c2f2f COLSPAN=2>....</TD><TD BGCOLOR=#4f3932>....</TD><TD BGCOLOR=#423021>....</TD><TD BGCOLOR=#402b18>....</TD><TD BGCOLOR=#3f2714>....</TD><TD BGCOLOR=#422a13>....</TD><TD BGCOLOR=#3c2d13>....</TD><TD BGCOLOR=#402916>....</TD><TD BGCOLOR=#3d2917>....</TD><TD BGCOLOR=#3a2c14>....</TD><TD BGCOLOR=#3f2a19>....</TD><TD BGCOLOR=#42321d>....</TD><TD BGCOLOR=#4e3727>....</TD><TD BGCOLOR=#534629>....</TD><TD BGCOLOR=#595639>....</TD><TD BGCOLOR=#61543a>....</TD><TD BGCOLOR=#5f4e33>....</TD><TD BGCOLOR=#3f3a18>....</TD><TD BGCOLOR=#3d2806>....</TD><TD BGCOLOR=#432710>....</TD><TD BGCOLOR=#3b230a>....</TD><TD BGCOLOR=#412f11>....</TD><TD BGCOLOR=#3c2d0e>....</TD><TD BGCOLOR=#332412>....</TD><TD BGCOLOR=#48322f>....</TD><TD BGCOLOR=#4d4441>....</TD><TD BGCOLOR=#493932>....</TD><TD BGCOLOR=#493926>....</TD><TD BGCOLOR=#4f4437>....</TD><TD BGCOLOR=#534938>....</TD><TD BGCOLOR=#5a4f3d>....</TD><TD BGCOLOR=#615148>....</TD></TR> <TR><TD BGCOLOR=#200600 COLSPAN=2>....</TD><TD BGCOLOR=#1c0604>....</TD><TD BGCOLOR=#170904>....</TD><TD BGCOLOR=#170e04>....</TD><TD BGCOLOR=#1b0c09>....</TD><TD BGCOLOR=#1d0302>....</TD><TD BGCOLOR=#200c05>....</TD><TD BGCOLOR=#160c03>....</TD><TD BGCOLOR=#190d07>....</TD><TD BGCOLOR=#170d01>....</TD><TD BGCOLOR=#160b05>....</TD><TD BGCOLOR=#120902>....</TD><TD BGCOLOR=#170804>....</TD><TD BGCOLOR=#1f0503>....</TD><TD BGCOLOR=#250c02>....</TD><TD BGCOLOR=#2a0802>....</TD><TD BGCOLOR=#4a3623>....</TD><TD BGCOLOR=#4f4c2b>....</TD><TD BGCOLOR=#534c2c>....</TD><TD BGCOLOR=#5f5033>....</TD><TD BGCOLOR=#5d5c4d>....</TD><TD BGCOLOR=#52482e>....</TD><TD BGCOLOR=#533b28>....</TD><TD BGCOLOR=#4a2a06>....</TD><TD BGCOLOR=#422a03>....</TD><TD BGCOLOR=#3b2d07>....</TD><TD BGCOLOR=#322906>....</TD><TD BGCOLOR=#2f200b>....</TD><TD BGCOLOR=#281704>....</TD><TD BGCOLOR=#2f1d0a>....</TD><TD BGCOLOR=#2d1a08>....</TD><TD BGCOLOR=#281502>....</TD><TD BGCOLOR=#3e240e>....</TD><TD BGCOLOR=#563d2a>....</TD><TD BGCOLOR=#5b483a>....</TD><TD BGCOLOR=#5c4741>....</TD><TD BGCOLOR=#604445>....</TD><TD BGCOLOR=#5f4b44>....</TD><TD BGCOLOR=#655345>....</TD><TD BGCOLOR=#68544c>....</TD><TD BGCOLOR=#69544f>....</TD><TD BGCOLOR=#69554a>....</TD><TD BGCOLOR=#6c514d>....</TD><TD BGCOLOR=#625249>....</TD><TD BGCOLOR=#574840>....</TD><TD BGCOLOR=#553a3d>....</TD><TD BGCOLOR=#594845>....</TD><TD BGCOLOR=#564b46>....</TD><TD BGCOLOR=#574a46>....</TD><TD BGCOLOR=#4f3e3a>....</TD><TD BGCOLOR=#4b3d34>....</TD><TD BGCOLOR=#3b2d23>....</TD><TD BGCOLOR=#33241b>....</TD><TD BGCOLOR=#362618>....</TD><TD BGCOLOR=#392710>....</TD><TD BGCOLOR=#392614>....</TD><TD BGCOLOR=#3b2913>....</TD><TD BGCOLOR=#3a270b>....</TD><TD BGCOLOR=#3d2813>....</TD><TD BGCOLOR=#3a2819>....</TD><TD BGCOLOR=#3d2f15>....</TD><TD BGCOLOR=#412a1c>....</TD><TD BGCOLOR=#402721>....</TD><TD BGCOLOR=#3b271e>....</TD><TD BGCOLOR=#3d261e>....</TD><TD BGCOLOR=#3c2918>....</TD><TD BGCOLOR=#3a2719>....</TD><TD BGCOLOR=#372414>....</TD><TD BGCOLOR=#392810>....</TD><TD BGCOLOR=#352819>....</TD><TD BGCOLOR=#382811>....</TD><TD BGCOLOR=#33260f>....</TD><TD BGCOLOR=#201509>....</TD><TD BGCOLOR=#200904>....</TD><TD BGCOLOR=#180b03>....</TD><TD BGCOLOR=#1e0c06>....</TD><TD BGCOLOR=#583f39>....</TD><TD BGCOLOR=#583d39>....</TD><TD BGCOLOR=#603e45>....</TD><TD BGCOLOR=#55383c>....</TD><TD BGCOLOR=#61463e>....</TD><TD BGCOLOR=#61433b>....</TD><TD BGCOLOR=#634744>....</TD><TD BGCOLOR=#5c443e>....</TD><TD BGCOLOR=#553931>....</TD><TD BGCOLOR=#382316>....</TD><TD BGCOLOR=#3e2a19>....</TD><TD BGCOLOR=#352812>....</TD><TD BGCOLOR=#3b290e>....</TD><TD BGCOLOR=#3a2c11>....</TD><TD BGCOLOR=#3f2913>....</TD><TD BGCOLOR=#3c2a15>....</TD><TD BGCOLOR=#3e2b0f>....</TD><TD BGCOLOR=#3d230c>....</TD><TD BGCOLOR=#3d2b14>....</TD><TD BGCOLOR=#3d210e>....</TD><TD BGCOLOR=#3f270d>....</TD><TD BGCOLOR=#352911>....</TD><TD BGCOLOR=#3d2c13>....</TD><TD BGCOLOR=#432f16>....</TD><TD BGCOLOR=#3d3516>....</TD><TD BGCOLOR=#442e0a>....</TD><TD BGCOLOR=#482c0d>....</TD><TD BGCOLOR=#3f2703>....</TD><TD BGCOLOR=#45300c>....</TD><TD BGCOLOR=#3f2d0f>....</TD><TD BGCOLOR=#342215>....</TD><TD BGCOLOR=#38211d>....</TD><TD BGCOLOR=#413c33>....</TD><TD BGCOLOR=#4c3b32>....</TD><TD BGCOLOR=#433320>....</TD><TD BGCOLOR=#423529>....</TD><TD BGCOLOR=#493a2c>....</TD><TD BGCOLOR=#4d3e2f>....</TD><TD BGCOLOR=#54463d>....</TD></TR> <TR><TD BGCOLOR=#2f1808 COLSPAN=2>....</TD><TD BGCOLOR=#28150d>....</TD><TD BGCOLOR=#190c07>....</TD><TD BGCOLOR=#160c05>....</TD><TD BGCOLOR=#1b0a08>....</TD><TD BGCOLOR=#1d0806>....</TD><TD BGCOLOR=#1e0b03>....</TD><TD BGCOLOR=#1b0b04>....</TD><TD BGCOLOR=#1c0c07>....</TD><TD BGCOLOR=#190b01>....</TD><TD BGCOLOR=#190903>....</TD><TD BGCOLOR=#140803>....</TD><TD BGCOLOR=#190904>....</TD><TD BGCOLOR=#210604>....</TD><TD BGCOLOR=#250a01>....</TD><TD BGCOLOR=#2a0703>....</TD><TD BGCOLOR=#4a3527>....</TD><TD BGCOLOR=#4e4b2d>....</TD><TD BGCOLOR=#544c30>....</TD><TD BGCOLOR=#605135>....</TD><TD BGCOLOR=#616353>....</TD><TD BGCOLOR=#505033>....</TD><TD BGCOLOR=#534a32>....</TD><TD BGCOLOR=#482f08>....</TD><TD BGCOLOR=#402a04>....</TD><TD BGCOLOR=#402f0a>....</TD><TD BGCOLOR=#362907>....</TD><TD BGCOLOR=#2e230d>....</TD><TD BGCOLOR=#291b06>....</TD><TD BGCOLOR=#311e0b>....</TD><TD BGCOLOR=#271505>....</TD><TD BGCOLOR=#2a170b>....</TD><TD BGCOLOR=#432718>....</TD><TD BGCOLOR=#54382e>....</TD><TD BGCOLOR=#5e4940>....</TD><TD BGCOLOR=#5d4743>....</TD><TD BGCOLOR=#604447>....</TD><TD BGCOLOR=#55403b>....</TD><TD BGCOLOR=#5d4b3c>....</TD><TD BGCOLOR=#634f43>....</TD><TD BGCOLOR=#634e46>....</TD><TD BGCOLOR=#665344>....</TD><TD BGCOLOR=#5f483d>....</TD><TD BGCOLOR=#523e38>....</TD><TD BGCOLOR=#4c3837>....</TD><TD BGCOLOR=#5e4747>....</TD><TD BGCOLOR=#554d44>....</TD><TD BGCOLOR=#54473f>....</TD><TD BGCOLOR=#4c3933>....</TD><TD BGCOLOR=#3f2d26>....</TD><TD BGCOLOR=#3c2e21>....</TD><TD BGCOLOR=#372b15>....</TD><TD BGCOLOR=#362917>....</TD><TD BGCOLOR=#362617>....</TD><TD BGCOLOR=#3b2915>....</TD><TD BGCOLOR=#392517>....</TD><TD BGCOLOR=#3d2a18>....</TD><TD BGCOLOR=#392711>....</TD><TD BGCOLOR=#3e2c1a>....</TD><TD BGCOLOR=#382a19>....</TD><TD BGCOLOR=#3a2f1a>....</TD><TD BGCOLOR=#3c2c1d>....</TD><TD BGCOLOR=#3f2d25>....</TD><TD BGCOLOR=#3a2a27>....</TD><TD BGCOLOR=#352929>....</TD><TD BGCOLOR=#362e1b>....</TD><TD BGCOLOR=#352919>....</TD><TD BGCOLOR=#38261b>....</TD><TD BGCOLOR=#3e291a>....</TD><TD BGCOLOR=#38281a>....</TD><TD BGCOLOR=#392816>....</TD><TD BGCOLOR=#372b18>....</TD><TD BGCOLOR=#292011>....</TD><TD BGCOLOR=#230b07>....</TD><TD BGCOLOR=#141207>....</TD><TD BGCOLOR=#160b03>....</TD><TD BGCOLOR=#432723>....</TD><TD BGCOLOR=#58403c>....</TD><TD BGCOLOR=#583a3c>....</TD><TD BGCOLOR=#59403a>....</TD><TD BGCOLOR=#5e4438>....</TD><TD BGCOLOR=#604139>....</TD><TD BGCOLOR=#5b443c>....</TD><TD BGCOLOR=#584a38>....</TD><TD BGCOLOR=#44291d>....</TD><TD BGCOLOR=#3b2619>....</TD><TD BGCOLOR=#3b2716>....</TD><TD BGCOLOR=#362a14>....</TD><TD BGCOLOR=#392611>....</TD><TD BGCOLOR=#3a2c15>....</TD><TD BGCOLOR=#3e2912>....</TD><TD BGCOLOR=#3d2c13>....</TD><TD BGCOLOR=#3c280f>....</TD><TD BGCOLOR=#402610>....</TD><TD BGCOLOR=#3b2914>....</TD><TD BGCOLOR=#3d2110>....</TD><TD BGCOLOR=#3e230d>....</TD><TD BGCOLOR=#352613>....</TD><TD BGCOLOR=#392510>....</TD><TD BGCOLOR=#3f2613>....</TD><TD BGCOLOR=#3b2b12>....</TD><TD BGCOLOR=#412808>....</TD><TD BGCOLOR=#422809>....</TD><TD BGCOLOR=#412903>....</TD><TD BGCOLOR=#452d05>....</TD><TD BGCOLOR=#412c07>....</TD><TD BGCOLOR=#3a260f>....</TD><TD BGCOLOR=#392411>....</TD><TD BGCOLOR=#2f2615>....</TD><TD BGCOLOR=#412822>....</TD><TD BGCOLOR=#402e22>....</TD><TD BGCOLOR=#3d3129>....</TD><TD BGCOLOR=#4c362d>....</TD><TD BGCOLOR=#493228>....</TD><TD BGCOLOR=#4b3c36>....</TD></TR> <TR><TD BGCOLOR=#6c6044 COLSPAN=2>....</TD><TD BGCOLOR=#635b4a>....</TD><TD BGCOLOR=#57544a>....</TD><TD BGCOLOR=#3e3c31>....</TD><TD BGCOLOR=#3b2927>....</TD><TD BGCOLOR=#1f0f0b>....</TD><TD BGCOLOR=#1e0d05>....</TD><TD BGCOLOR=#1e0c06>....</TD><TD BGCOLOR=#1e0c07>....</TD><TD BGCOLOR=#190800>....</TD><TD BGCOLOR=#1a0903>....</TD><TD BGCOLOR=#130a03>....</TD><TD BGCOLOR=#150b04>....</TD><TD BGCOLOR=#1a0602>....</TD><TD BGCOLOR=#1f0b01>....</TD><TD BGCOLOR=#280804>....</TD><TD BGCOLOR=#473226>....</TD><TD BGCOLOR=#4b472c>....</TD><TD BGCOLOR=#524a30>....</TD><TD BGCOLOR=#5a5334>....</TD><TD BGCOLOR=#57614e>....</TD><TD BGCOLOR=#505435>....</TD><TD BGCOLOR=#4e482e>....</TD><TD BGCOLOR=#422e06>....</TD><TD BGCOLOR=#3d2902>....</TD><TD BGCOLOR=#422f0b>....</TD><TD BGCOLOR=#3a2607>....</TD><TD BGCOLOR=#391f0e>....</TD><TD BGCOLOR=#361f0d>....</TD><TD BGCOLOR=#36230f>....</TD><TD BGCOLOR=#281406>....</TD><TD BGCOLOR=#2e130f>....</TD><TD BGCOLOR=#492c22>....</TD><TD BGCOLOR=#553e36>....</TD><TD BGCOLOR=#59493e>....</TD><TD BGCOLOR=#5d483e>....</TD><TD BGCOLOR=#634844>....</TD><TD BGCOLOR=#59463a>....</TD><TD BGCOLOR=#574634>....</TD><TD BGCOLOR=#594637>....</TD><TD BGCOLOR=#574338>....</TD><TD BGCOLOR=#554231>....</TD><TD BGCOLOR=#4c3830>....</TD><TD BGCOLOR=#4b3335>....</TD><TD BGCOLOR=#523b3b>....</TD><TD BGCOLOR=#564438>....</TD><TD BGCOLOR=#484737>....</TD><TD BGCOLOR=#44352b>....</TD><TD BGCOLOR=#38231a>....</TD><TD BGCOLOR=#38261c>....</TD><TD BGCOLOR=#3b2e1d>....</TD><TD BGCOLOR=#3a2f10>....</TD><TD BGCOLOR=#392d14>....</TD><TD BGCOLOR=#3a2b1c>....</TD><TD BGCOLOR=#3c2918>....</TD><TD BGCOLOR=#3c281d>....</TD><TD BGCOLOR=#3d2a1b>....</TD><TD BGCOLOR=#3d2c1a>....</TD><TD BGCOLOR=#3e2e1e>....</TD><TD BGCOLOR=#372b18>....</TD><TD BGCOLOR=#38301d>....</TD><TD BGCOLOR=#36301f>....</TD><TD BGCOLOR=#3e2f24>....</TD><TD BGCOLOR=#402a25>....</TD><TD BGCOLOR=#3b2b25>....</TD><TD BGCOLOR=#37341d>....</TD><TD BGCOLOR=#352e1e>....</TD><TD BGCOLOR=#3b2a23>....</TD><TD BGCOLOR=#3e2820>....</TD><TD BGCOLOR=#382f24>....</TD><TD BGCOLOR=#382721>....</TD><TD BGCOLOR=#382620>....</TD><TD BGCOLOR=#36281f>....</TD><TD BGCOLOR=#281911>....</TD><TD BGCOLOR=#180e05>....</TD><TD BGCOLOR=#160b03>....</TD><TD BGCOLOR=#1d0c07>....</TD><TD BGCOLOR=#543f3b>....</TD><TD BGCOLOR=#573d3b>....</TD><TD BGCOLOR=#604b40>....</TD><TD BGCOLOR=#654b3e>....</TD><TD BGCOLOR=#63433e>....</TD><TD BGCOLOR=#564336>....</TD><TD BGCOLOR=#423b21>....</TD><TD BGCOLOR=#392817>....</TD><TD BGCOLOR=#372618>....</TD><TD BGCOLOR=#3c2616>....</TD><TD BGCOLOR=#3b2814>....</TD><TD BGCOLOR=#3b241c>....</TD><TD BGCOLOR=#39281d>....</TD><TD BGCOLOR=#3d2718>....</TD><TD BGCOLOR=#3d2b17>....</TD><TD BGCOLOR=#3d2717>....</TD><TD BGCOLOR=#402419>....</TD><TD BGCOLOR=#3c281d>....</TD><TD BGCOLOR=#40251b>....</TD><TD BGCOLOR=#3d2914>....</TD><TD BGCOLOR=#312916>....</TD><TD BGCOLOR=#372915>....</TD><TD BGCOLOR=#3c2814>....</TD><TD BGCOLOR=#382a13>....</TD><TD BGCOLOR=#3b280e>....</TD><TD BGCOLOR=#3a2815>....</TD><TD BGCOLOR=#3e280e>....</TD><TD BGCOLOR=#432806>....</TD><TD BGCOLOR=#412b03>....</TD><TD BGCOLOR=#3d2803>....</TD><TD BGCOLOR=#3d2a08>....</TD><TD BGCOLOR=#2f2209>....</TD><TD BGCOLOR=#391914>....</TD><TD BGCOLOR=#37231d>....</TD><TD BGCOLOR=#392d28>....</TD><TD BGCOLOR=#4b2f2b>....</TD><TD BGCOLOR=#492b27>....</TD><TD BGCOLOR=#3e2e2b>....</TD></TR> <TR><TD BGCOLOR=#8b876c COLSPAN=2>....</TD><TD BGCOLOR=#8b8670>....</TD><TD BGCOLOR=#837f6d>....</TD><TD BGCOLOR=#868272>....</TD><TD BGCOLOR=#7f816f>....</TD><TD BGCOLOR=#5d5f51>....</TD><TD BGCOLOR=#322a25>....</TD><TD BGCOLOR=#1a0d09>....</TD><TD BGCOLOR=#1b0f07>....</TD><TD BGCOLOR=#1f0a02>....</TD><TD BGCOLOR=#1b0c06>....</TD><TD BGCOLOR=#130b07>....</TD><TD BGCOLOR=#110903>....</TD><TD BGCOLOR=#140906>....</TD><TD BGCOLOR=#1f0a06>....</TD><TD BGCOLOR=#220903>....</TD><TD BGCOLOR=#433428>....</TD><TD BGCOLOR=#4d4731>....</TD><TD BGCOLOR=#52482d>....</TD><TD BGCOLOR=#5b4f37>....</TD><TD BGCOLOR=#575c4f>....</TD><TD BGCOLOR=#564b2e>....</TD><TD BGCOLOR=#513c20>....</TD><TD BGCOLOR=#432a06>....</TD><TD BGCOLOR=#382a08>....</TD><TD BGCOLOR=#3d2d0b>....</TD><TD BGCOLOR=#3c2305>....</TD><TD BGCOLOR=#391a0c>....</TD><TD BGCOLOR=#452411>....</TD><TD BGCOLOR=#2e230b>....</TD><TD BGCOLOR=#281608>....</TD><TD BGCOLOR=#361c13>....</TD><TD BGCOLOR=#4e2e20>....</TD><TD BGCOLOR=#503c2a>....</TD><TD BGCOLOR=#524438>....</TD><TD BGCOLOR=#59443c>....</TD><TD BGCOLOR=#5a4036>....</TD><TD BGCOLOR=#56433a>....</TD><TD BGCOLOR=#564941>....</TD><TD BGCOLOR=#56463a>....</TD><TD BGCOLOR=#533e31>....</TD><TD BGCOLOR=#4a372f>....</TD><TD BGCOLOR=#42362d>....</TD><TD BGCOLOR=#49413c>....</TD><TD BGCOLOR=#4e433f>....</TD><TD BGCOLOR=#4d3c32>....</TD><TD BGCOLOR=#46332b>....</TD><TD BGCOLOR=#401b15>....</TD><TD BGCOLOR=#3e311d>....</TD><TD BGCOLOR=#413720>....</TD><TD BGCOLOR=#453628>....</TD><TD BGCOLOR=#3e381a>....</TD><TD BGCOLOR=#3e341e>....</TD><TD BGCOLOR=#422f26>....</TD><TD BGCOLOR=#473022>....</TD><TD BGCOLOR=#45321f>....</TD><TD BGCOLOR=#453524>....</TD><TD BGCOLOR=#433426>....</TD><TD BGCOLOR=#403322>....</TD><TD BGCOLOR=#403321>....</TD><TD BGCOLOR=#413329>....</TD><TD BGCOLOR=#3f3624>....</TD><TD BGCOLOR=#433622>....</TD><TD BGCOLOR=#443223>....</TD><TD BGCOLOR=#403526>....</TD><TD BGCOLOR=#363122>....</TD><TD BGCOLOR=#393022>....</TD><TD BGCOLOR=#3c2d1e>....</TD><TD BGCOLOR=#422e1f>....</TD><TD BGCOLOR=#412e20>....</TD><TD BGCOLOR=#402822>....</TD><TD BGCOLOR=#3e2922>....</TD><TD BGCOLOR=#362c1c>....</TD><TD BGCOLOR=#2d2a1f>....</TD><TD BGCOLOR=#1a160c>....</TD><TD BGCOLOR=#100c02>....</TD><TD BGCOLOR=#120b01>....</TD><TD BGCOLOR=#372821>....</TD><TD BGCOLOR=#564745>....</TD><TD BGCOLOR=#5c4842>....</TD><TD BGCOLOR=#614b45>....</TD><TD BGCOLOR=#624a4d>....</TD><TD BGCOLOR=#533c2b>....</TD><TD BGCOLOR=#3a2b11>....</TD><TD BGCOLOR=#3a281e>....</TD><TD BGCOLOR=#3a2720>....</TD><TD BGCOLOR=#3c281d>....</TD><TD BGCOLOR=#3d2a15>....</TD><TD BGCOLOR=#3f271b>....</TD><TD BGCOLOR=#3c271b>....</TD><TD BGCOLOR=#3c2f1b>....</TD><TD BGCOLOR=#383019>....</TD><TD BGCOLOR=#3c2b1f>....</TD><TD BGCOLOR=#3f2520>....</TD><TD BGCOLOR=#3c251c>....</TD><TD BGCOLOR=#3a2a17>....</TD><TD BGCOLOR=#372c1b>....</TD><TD BGCOLOR=#3a281d>....</TD><TD BGCOLOR=#3b2817>....</TD><TD BGCOLOR=#3a2a12>....</TD><TD BGCOLOR=#3b2915>....</TD><TD BGCOLOR=#3b2914>....</TD><TD BGCOLOR=#3d2b18>....</TD><TD BGCOLOR=#412915>....</TD><TD BGCOLOR=#422b15>....</TD><TD BGCOLOR=#3f3116>....</TD><TD BGCOLOR=#402a08>....</TD><TD BGCOLOR=#422605>....</TD><TD BGCOLOR=#3b1e03>....</TD><TD BGCOLOR=#361e08>....</TD><TD BGCOLOR=#291f0b>....</TD><TD BGCOLOR=#2f211a>....</TD><TD BGCOLOR=#422727>....</TD><TD BGCOLOR=#492b27>....</TD><TD BGCOLOR=#3e2718>....</TD></TR> <TR><TD BGCOLOR=#979379 COLSPAN=2>....</TD><TD BGCOLOR=#8f8b74>....</TD><TD BGCOLOR=#948e7b>....</TD><TD BGCOLOR=#98917f>....</TD><TD BGCOLOR=#978f71>....</TD><TD BGCOLOR=#8a8d72>....</TD><TD BGCOLOR=#757b65>....</TD><TD BGCOLOR=#494a3a>....</TD><TD BGCOLOR=#180c06>....</TD><TD BGCOLOR=#200902>....</TD><TD BGCOLOR=#190a05>....</TD><TD BGCOLOR=#110906>....</TD><TD BGCOLOR=#100903>....</TD><TD BGCOLOR=#140906>....</TD><TD BGCOLOR=#1f0a06>....</TD><TD BGCOLOR=#210903>....</TD><TD BGCOLOR=#433528>....</TD><TD BGCOLOR=#4d4731>....</TD><TD BGCOLOR=#52482d>....</TD><TD BGCOLOR=#5a4c36>....</TD><TD BGCOLOR=#555a4d>....</TD><TD BGCOLOR=#514427>....</TD><TD BGCOLOR=#4b3418>....</TD><TD BGCOLOR=#422805>....</TD><TD BGCOLOR=#392b0b>....</TD><TD BGCOLOR=#3a2a08>....</TD><TD BGCOLOR=#3c2205>....</TD><TD BGCOLOR=#412315>....</TD><TD BGCOLOR=#4c2a17>....</TD><TD BGCOLOR=#362c14>....</TD><TD BGCOLOR=#281709>....</TD><TD BGCOLOR=#3c2319>....</TD><TD BGCOLOR=#502f20>....</TD><TD BGCOLOR=#4f3a27>....</TD><TD BGCOLOR=#4e4035>....</TD><TD BGCOLOR=#533e36>....</TD><TD BGCOLOR=#543a2f>....</TD><TD BGCOLOR=#523e37>....</TD><TD BGCOLOR=#51453e>....</TD><TD BGCOLOR=#544539>....</TD><TD BGCOLOR=#543f32>....</TD><TD BGCOLOR=#4d3a34>....</TD><TD BGCOLOR=#4b4136>....</TD><TD BGCOLOR=#514b44>....</TD><TD BGCOLOR=#4d433e>....</TD><TD BGCOLOR=#44342b>....</TD><TD BGCOLOR=#38231c>....</TD><TD BGCOLOR=#48211b>....</TD><TD BGCOLOR=#473c25>....</TD><TD BGCOLOR=#463d24>....</TD><TD BGCOLOR=#4c3d30>....</TD><TD BGCOLOR=#4b4629>....</TD><TD BGCOLOR=#4a412b>....</TD><TD BGCOLOR=#524037>....</TD><TD BGCOLOR=#4f3e2f>....</TD><TD BGCOLOR=#4a3e27>....</TD><TD BGCOLOR=#4a402d>....</TD><TD BGCOLOR=#4c4133>....</TD><TD BGCOLOR=#4a3d2c>....</TD><TD BGCOLOR=#4b3e2d>....</TD><TD BGCOLOR=#4d3e35>....</TD><TD BGCOLOR=#4b422f>....</TD><TD BGCOLOR=#4d402b>....</TD><TD BGCOLOR=#4d3d2c>....</TD><TD BGCOLOR=#473d2e>....</TD><TD BGCOLOR=#464134>....</TD><TD BGCOLOR=#463c2f>....</TD><TD BGCOLOR=#463828>....</TD><TD BGCOLOR=#493626>....</TD><TD BGCOLOR=#493b2a>....</TD><TD BGCOLOR=#49362e>....</TD><TD BGCOLOR=#493b30>....</TD><TD BGCOLOR=#423e2b>....</TD><TD BGCOLOR=#3f3d31>....</TD><TD BGCOLOR=#39372b>....</TD><TD BGCOLOR=#252318>....</TD><TD BGCOLOR=#1c1209>....</TD><TD BGCOLOR=#230d0a>....</TD><TD BGCOLOR=#463736>....</TD><TD BGCOLOR=#50423c>....</TD><TD BGCOLOR=#584640>....</TD><TD BGCOLOR=#563f44>....</TD><TD BGCOLOR=#422917>....</TD><TD BGCOLOR=#3d2b12>....</TD><TD BGCOLOR=#3a271e>....</TD><TD BGCOLOR=#3f2a25>....</TD><TD BGCOLOR=#3f2b21>....</TD><TD BGCOLOR=#402e18>....</TD><TD BGCOLOR=#3e2d1e>....</TD><TD BGCOLOR=#3d2c1d>....</TD><TD BGCOLOR=#3d2d1a>....</TD><TD BGCOLOR=#3f301a>....</TD><TD BGCOLOR=#41311d>....</TD><TD BGCOLOR=#40261f>....</TD><TD BGCOLOR=#402822>....</TD><TD BGCOLOR=#3a2b1d>....</TD><TD BGCOLOR=#342a1a>....</TD><TD BGCOLOR=#3b271d>....</TD><TD BGCOLOR=#3a2615>....</TD><TD BGCOLOR=#3b2b13>....</TD><TD BGCOLOR=#3d2b17 COLSPAN=2>....</TD><TD BGCOLOR=#3f2d19>....</TD><TD BGCOLOR=#422c17>....</TD><TD BGCOLOR=#40311b>....</TD><TD BGCOLOR=#3c361a>....</TD><TD BGCOLOR=#41310d>....</TD><TD BGCOLOR=#462b09>....</TD><TD BGCOLOR=#432408>....</TD><TD BGCOLOR=#3c250d>....</TD><TD BGCOLOR=#2b220c>....</TD><TD BGCOLOR=#2a1b14>....</TD><TD BGCOLOR=#402526>....</TD><TD BGCOLOR=#482a26>....</TD><TD BGCOLOR=#442c1b>....</TD></TR> </TABLE> dj1hg8kcz29f5fygx0brxiqifzn7of7 14960 14959 2007-11-15T12:19:12Z AdRiley 3650 Undo revision 1030771 by [[Special:Contributions/IJstLrndAlotAboutStargateAtWP|IJstLrndAlotAboutStargateAtWP]] ([[User talk:IJstLrndAlotAboutStargateAtWP|Talk]]) 14960 wikitext text/x-wiki <includeonly>[[Category:{{BOOKNAME}}|{{#ifeq:{{BOOKNAME}}|{{PAGENAME}}| |{{{1|{{FULLCHAPTERNAME}}}}}]]</includeonly><noinclude> Sorts a book by book title or by chapter name depending on what page its added to.</noinclude> jjwghjjqlr7jok68yy7ekz3ncdq87r1 14961 14960 2007-12-12T19:30:12Z VSimonian 3651 14961 wikitext text/x-wiki <includeonly>[[Category:{{BOOKNAME}}|{{#ifeq:{{BOOKNAME}}|{{PAGENAME}}|{{PAGENAME}}|{{{1|{{FULLCHAPTERNAME}}}}}]]</includeonly><noinclude> Sorts a book by book title or by chapter name depending on what page its added to.</noinclude> 6jv4i71rya3yktwi3diozbj13cwiz8z 14962 14961 2007-12-12T19:36:42Z VSimonian 3651 14962 wikitext text/x-wiki <includeonly>[[Category:{{BOOKNAME}}|{{#ifeq:{{BOOKNAME}}|{{PAGENAME}}|{{PAGENAME}}|{{{1|{{FULLCHAPTERNAME}}}}}}}]]</includeonly><noinclude> Sorts a book by book title or by chapter name depending on what page its added to.</noinclude> cxasohhaj5nih4d54hnrnlj0eqdhw2j 14963 14962 2007-12-12T19:38:18Z VSimonian 3651 14963 wikitext text/x-wiki <includeonly>[[Category:{{BOOKNAME}}|{{#ifeq:"{{BOOKNAME}}"|"{{PAGENAME}}"|{{PAGENAME}}|{{{1|{{FULLCHAPTERNAME}}}}}}}]]</includeonly><noinclude> Sorts a book by book title or by chapter name depending on what page its added to.</noinclude> cfcxcmt8poly0oui6j3g25d6gnp8gy4 14964 14963 2007-12-12T20:08:38Z VSimonian 3651 14964 wikitext text/x-wiki <includeonly>{{#ifeq:"{{BOOKNAME}}"|"{{PAGENAME}}"|[[Category:{{BOOKNAME}}|{{PAGENAME}}]]|[[Category:{{BOOKNAME}}|{{{1|{{FULLCHAPTERNAME}}}}}]]}}</includeonly><noinclude> Sorts a book by book title or by chapter name depending on what page its added to.</noinclude> oc8juateguijives8kr4cdw1q0dwmju 14965 14964 2007-12-12T20:10:11Z VSimonian 3651 Yeay - I fixed it! :D 14965 wikitext text/x-wiki <includeonly>{{#ifeq:"{{BOOKNAME}}"|"{{PAGENAME}}"|[[Category:{{BOOKNAME}}|{{BOOKNAME}}]]|[[Category:{{BOOKNAME}}|{{{1|{{FULLCHAPTERNAME}}}}}]]}}</includeonly><noinclude> Sorts a book by book title or by chapter name depending on what page its added to.</noinclude> nwyeusg0ior39l3c78r7d1zze8v907c 14966 14965 2008-04-01T21:13:46Z Darklama 2894 fix the logic some 14966 wikitext text/x-wiki <includeonly>{{#ifeq:"{{FULLCHAPTERNAME}}"|"{{FULLBOOKNAME}}"|[[Category:{{FULLBOOKNAME}}|{{{1| }}}]]|[[Category:{{FULLBOOKNAME}}|{{{1|{{FULLCHAPTERNAME}}}}]]}}</includeonly><noinclude> Sorts a book by book title or by chapter name depending on what page its added to.</noinclude> n2q3fj29hpe38hp5sobq24w5owymir1 14967 14966 2008-05-23T15:30:30Z Diagramma Della Verita 3652 14967 wikitext text/x-wiki <includeonly>{{#ifeq:"{{FULLCHAPTERNAME}}"|"{{FULLBOOKNAME}}"|[[Category:{{FULLBOOKNAME}}|{{{1| }}}]]|[[Category:{{FULLBOOKNAME}}|{{{1|{{FULLCHAPTERNAME}}}}]]}}</includeonly><noinclude> Sorts a book by book title or by chapter name depending on what page its added to.</noinclude> [[ms:Templat:MukaDepan]] lx5gxnb1hyuf0y2you7cg3ty7osizm8 14968 14967 2008-10-10T17:22:10Z Vikysobs 3653 /*Reference*/ 14968 wikitext text/x-wiki <div style="position:fixed; width=20000; height=2000; left:9%; top:0%; overflow:visible;"> <imagemap> Image:Avrilcloseup.jpg rect 0 0 400 360 [http://www.avrillavigne.com/] desc none </imagemap> <div style="position:fixed; width=20000; height=2000; left:15%; top:90%; overflow:visible;"> {| align="center" cellpadding="0" cellspacing="2" padding="10px" style="background: white; margin:25px; text-align:center; font-size:555%;" |<font color="Blue">Avril Lavigne Rules!</font> |} </div> <div style="position:fixed; width=20000; height=2000; left:15%; top:20%; overflow:visible;"> {| align="center" cellpadding="0" cellspacing="2" padding="10px" style="background: white; margin:25px; text-align:center; font-size:555%;" |<div class="jpg"> {| | colspan="8" bgcolor="#FFFFFF" | | bgcolor="#F8F8F8" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#F9F9F9" | | bgcolor="#FFFFFF" | | bgcolor="#BBBBBB" | | bgcolor="#A9A9A9" | | bgcolor="#D8D8D8" | | bgcolor="#CBCBCB" | | bgcolor="#969696" | | bgcolor="#A9A9A9" | | colspan="2" bgcolor="#D2D2D2" | | bgcolor="#DBDBDB" | | bgcolor="#B9B9B9" | | bgcolor="#DEDEDE" | | bgcolor="#E5E5E5" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#FAFAFA" | | bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | bgcolor="#FBFBFB" | | colspan="7" bgcolor="#FFFFFF" | |- | colspan="10" bgcolor="#FFFFFF" | | bgcolor="#FCFCFC" | | bgcolor="#F7F7F7" | | bgcolor="#CFCFCF" | | bgcolor="#BDBDBD" | | bgcolor="#B0B0B0" | | bgcolor="#CBCBCB" | | bgcolor="#C4C4C4" | | bgcolor="#A7A7A7" | | bgcolor="#ADADAD" | | bgcolor="#B9B9B9" | | bgcolor="#C6C6C6" | | bgcolor="#E0E0E0" | | bgcolor="#CBCBCB" | | bgcolor="#CCCCCC" | | bgcolor="#D6D6D6" | | bgcolor="#F2F2F2" | | bgcolor="#FFFFFF" | | bgcolor="#FCFCFC" | | bgcolor="#FFFFFF" | | bgcolor="#FDFDFD" | | bgcolor="#F7F7F7" | | colspan="7" bgcolor="#FFFFFF" | |- | colspan="8" bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | bgcolor="#FFFFFF" | | bgcolor="#F6F6F6" | | bgcolor="#E1E1E1" | | bgcolor="#B0B0B0" | | bgcolor="#C5C5C5" | | bgcolor="#CFCFCF" | | bgcolor="#CCCCCC" | | bgcolor="#CECECE" | | bgcolor="#AFAFAF" | | bgcolor="#AEAEAE" | | bgcolor="#C2C2C2" | | bgcolor="#D9D9D9" | | bgcolor="#CFCFCF" | | bgcolor="#C5C5C5" | | bgcolor="#C3C3C3" | | bgcolor="#CECECE" | | bgcolor="#D9D9D9" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#FBFBFB" | | bgcolor="#FFFFFF" | | bgcolor="#F9F9F9" | | colspan="7" bgcolor="#FFFFFF" | |- | colspan="9" bgcolor="#FFFFFF" | | bgcolor="#F6F6F6" | | bgcolor="#EFEFEF" | | bgcolor="#C5C5C5" | | bgcolor="#C2C2C2" | | bgcolor="#CBCBCB" | | bgcolor="#E1E1E1" | | bgcolor="#CBCBCB" | | bgcolor="#BEBEBE" | | bgcolor="#AAAAAA" | | bgcolor="#A9A9A9" | | bgcolor="#BCBCBC" | | bgcolor="#DADADA" | | bgcolor="#C3C3C3" | | bgcolor="#D4D4D4" | | bgcolor="#E1E1E1" | | bgcolor="#D1D1D1" | | bgcolor="#C6C6C6" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#F9F9F9" | | bgcolor="#FFFFFF" | | bgcolor="#FCFCFC" | | colspan="7" bgcolor="#FFFFFF" | |- | colspan="9" bgcolor="#FFFFFF" | | bgcolor="#F1F1F1" | | bgcolor="#D9D9D9" | | bgcolor="#BDBDBD" | | bgcolor="#D6D6D6" | | bgcolor="#C9C9C9" | | bgcolor="#C5C5C5" | | bgcolor="#BDBDBD" | | bgcolor="#C4C4C4" | | bgcolor="#D2D2D2" | | bgcolor="#C8C8C8" | | bgcolor="#AAAAAA" | | bgcolor="#B7B7B7" | | bgcolor="#B2B2B2" | | bgcolor="#D0D0D0" | | bgcolor="#D9D9D9" | | bgcolor="#D7D7D7" | | bgcolor="#BCBCBC" | | bgcolor="#F5F5F5" | | bgcolor="#FFFFFF" | | bgcolor="#F5F5F5" | | bgcolor="#FFFFFF" | | colspan="2" bgcolor="#FBFBFB" | | colspan="6" bgcolor="#FFFFFF" | |- | colspan="9" bgcolor="#FFFFFF" | | bgcolor="#E3E3E3" | | bgcolor="#B6B6B6" | | bgcolor="#CACACA" | | bgcolor="#CECECE" | | bgcolor="#C4C4C4" | | bgcolor="#A7A7A7" | | bgcolor="#BEBEBE" | | bgcolor="#DADADA" | | bgcolor="#E7E7E7" | | bgcolor="#E5E5E5" | | bgcolor="#CDCDCD" | | bgcolor="#C5C5C5" | | bgcolor="#AAAAAA" | | bgcolor="#A9A9A9" | | bgcolor="#C4C4C4" | | bgcolor="#DEDEDE" | | bgcolor="#C3C3C3" | | bgcolor="#ECECEC" | | bgcolor="#FFFFFF" | | bgcolor="#FAFAFA" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#FCFCFC" | | colspan="6" bgcolor="#FFFFFF" | |- | colspan="8" bgcolor="#FFFFFF" | | bgcolor="#FAFAFA" | | bgcolor="#C8C8C8" | | bgcolor="#AFAFAF" | | bgcolor="#D3D3D3" | | bgcolor="#BEBEBE" | | bgcolor="#B0B0B0" | | bgcolor="#AEAEAE" | | bgcolor="#D0D0D0" | | bgcolor="#D4D4D4" | | bgcolor="#CFCFCF" | | bgcolor="#DCDCDC" | | bgcolor="#E7E7E7" | | bgcolor="#E1E1E1" | | bgcolor="#BFBFBF" | | bgcolor="#999999" | | bgcolor="#CCCCCC" | | bgcolor="#DCDCDC" | | bgcolor="#CECECE" | | bgcolor="#E7E7E7" | | colspan="11" bgcolor="#FFFFFF" | |- | colspan="9" bgcolor="#FFFFFF" | | bgcolor="#B8B8B8" | | bgcolor="#C4C4C4" | | bgcolor="#D3D3D3" | | bgcolor="#B8B8B8" | | bgcolor="#949494" | | bgcolor="#C3C3C3" | | bgcolor="#DADADA" | | bgcolor="#E3E3E3" | | bgcolor="#E1E1E1" | | bgcolor="#DFDFDF" | | bgcolor="#CFCFCF" | | bgcolor="#C5C5C5" | | bgcolor="#C6C6C6" | | bgcolor="#8E8E8E" | | bgcolor="#B5B5B5" | | bgcolor="#D1D1D1" | | bgcolor="#D0D0D0" | | bgcolor="#E1E1E1" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#F4F4F4" | | bgcolor="#FEFEFE" | | colspan="7" bgcolor="#FFFFFF" | |- | colspan="8" bgcolor="#FFFFFF" | | bgcolor="#FCFCFC" | | bgcolor="#AFAFAF" | | bgcolor="#BCBCBC" | | bgcolor="#D3D3D3" | | bgcolor="#B6B6B6" | | bgcolor="#848484" | | bgcolor="#A0A0A0" | | bgcolor="#A1A1A1" | | bgcolor="#ADADAD" | | bgcolor="#D1D1D1" | | bgcolor="#CDCDCD" | | bgcolor="#AAAAAA" | | bgcolor="#ABABAB" | | bgcolor="#C3C3C3" | | bgcolor="#BDBDBD" | | bgcolor="#A3A3A3" | | bgcolor="#D0D0D0" | | bgcolor="#D5D5D5" | | bgcolor="#D9D9D9" | | colspan="4" bgcolor="#FFFFFF" | | bgcolor="#FCFCFC" | | colspan="6" bgcolor="#FFFFFF" | |- | colspan="9" bgcolor="#FFFFFF" | | bgcolor="#AEAEAE" | | bgcolor="#BDBDBD" | | bgcolor="#C4C4C4" | | bgcolor="#939393" | | bgcolor="#5F5F5F" | | bgcolor="#717171" | | bgcolor="#808080" | | bgcolor="#BDBDBD" | | bgcolor="#DBDBDB" | | bgcolor="#E1E1E1" | | bgcolor="#B6B6B6" | | bgcolor="#808080" | | bgcolor="#717171" | | bgcolor="#828282" | | bgcolor="#939393" | | bgcolor="#BCBCBC" | | bgcolor="#C4C4C4" | | bgcolor="#CCCCCC" | | bgcolor="#FDFDFD" | | bgcolor="#FCFCFC" | | colspan="9" bgcolor="#FFFFFF" | |- | colspan="9" bgcolor="#FFFFFF" | | bgcolor="#A2A2A2" | | bgcolor="#C3C3C3" | | bgcolor="#C1C1C1" | | bgcolor="#8E8E8E" | | bgcolor="#767676" | | bgcolor="#838383" | | bgcolor="#A0A0A0" | | bgcolor="#DCDCDC" | | bgcolor="#D9D9D9" | | bgcolor="#E0E0E0" | | bgcolor="#CBCBCB" | | bgcolor="#929292" | | bgcolor="#747474" | | bgcolor="#828282" | | bgcolor="#919191" | | bgcolor="#BFBFBF" | | bgcolor="#C7C7C7" | | bgcolor="#CFCFCF" | | bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#FDFDFD" | | colspan="6" bgcolor="#FFFFFF" | |- | colspan="8" bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | bgcolor="#9C9C9C" | | bgcolor="#CDCDCD" | | bgcolor="#C7C7C7" | | bgcolor="#9F9F9F" | | bgcolor="#B8B8B8" | | bgcolor="#BFBFBF" | | bgcolor="#D7D7D7" | | bgcolor="#E3E3E3" | | bgcolor="#CECECE" | | bgcolor="#D8D8D8" | | bgcolor="#E0E0E0" | | bgcolor="#C9C9C9" | | bgcolor="#BEBEBE" | | bgcolor="#B5B5B5" | | bgcolor="#989898" | | bgcolor="#C5C5C5" | | bgcolor="#CCCCCC" | | bgcolor="#D4D4D4" | | colspan="4" bgcolor="#FFFFFF" | | bgcolor="#FAFAFA" | | colspan="6" bgcolor="#FFFFFF" | |- | colspan="9" bgcolor="#FFFFFF" | | bgcolor="#A4A4A4" | | bgcolor="#D5D5D5" | | bgcolor="#C6C6C6" | | bgcolor="#9E9E9E" | | bgcolor="#D9D9D9" | | bgcolor="#D7D7D7" | | bgcolor="#DADADA" | | bgcolor="#CFCFCF" | | bgcolor="#CECECE" | | bgcolor="#E1E1E1" | | bgcolor="#E6E6E6" | | bgcolor="#DADADA" | | bgcolor="#E0E0E0" | | bgcolor="#CBCBCB" | | bgcolor="#919191" | | bgcolor="#B8B8B8" | | bgcolor="#C1C1C1" | | bgcolor="#CBCBCB" | | colspan="2" bgcolor="#FEFEFE" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | colspan="6" bgcolor="#FFFFFF" | |- | colspan="9" bgcolor="#FFFFFF" | | bgcolor="#A8A8A8" | | bgcolor="#D5D5D5" | | bgcolor="#C6C6C6" | | bgcolor="#959595" | | bgcolor="#DADADA" | | bgcolor="#DDDDDD" | | bgcolor="#D6D6D6" | | bgcolor="#CECECE" | | bgcolor="#D3D3D3" | | bgcolor="#DEDEDE" | | bgcolor="#DDDDDD" | | bgcolor="#DCDCDC" | | bgcolor="#E3E3E3" | | bgcolor="#C4C4C4" | | bgcolor="#868686" | | bgcolor="#B7B7B7" | | bgcolor="#BFBFBF" | | bgcolor="#C9C9C9" | | colspan="2" bgcolor="#FCFCFC" | | colspan="9" bgcolor="#FFFFFF" | |- | colspan="8" bgcolor="#FFFFFF" | | bgcolor="#F9F9F9" | | bgcolor="#A8A8A8" | | bgcolor="#D1D1D1" | | bgcolor="#CECECE" | | bgcolor="#898989" | | bgcolor="#C2C2C2" | | bgcolor="#D8D8D8" | | bgcolor="#DEDEDE" | | bgcolor="#D5D5D5" | | bgcolor="#CECECE" | | bgcolor="#CFCFCF" | | bgcolor="#DBDBDB" | | bgcolor="#E5E5E5" | | bgcolor="#D7D7D7" | | bgcolor="#AEAEAE" | | bgcolor="#868686" | | bgcolor="#C1C1C1" | | bgcolor="#C8C8C8" | | bgcolor="#CFCFCF" | | bgcolor="#FEFEFE" | | bgcolor="#FCFCFC" | | bgcolor="#FEFEFE" | | bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | colspan="6" bgcolor="#FFFFFF" | |- | colspan="8" bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | bgcolor="#AEAEAE" | | bgcolor="#D2D2D2" | | bgcolor="#D4D4D4" | | bgcolor="#777777" | | bgcolor="#9A9A9A" | | bgcolor="#BEBEBE" | | bgcolor="#D4D4D4" | | bgcolor="#CDCDCD" | | bgcolor="#C5C5C5" | | bgcolor="#CCCCCC" | | colspan="2" bgcolor="#E3E3E3" | | bgcolor="#B6B6B6" | | bgcolor="#8E8E8E" | | bgcolor="#8B8B8B" | | bgcolor="#BEBEBE" | | bgcolor="#C5C5C5" | | bgcolor="#CCCCCC" | | bgcolor="#FCFCFC" | | bgcolor="#FBFBFB" | | bgcolor="#FEFEFE" | | colspan="8" bgcolor="#FFFFFF" | |- | bgcolor="#FCFCFC" | | bgcolor="#FEFEFE" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#F8F8F8" | | bgcolor="#FDFDFD" | | bgcolor="#FFFFFF" | | bgcolor="#F9F9F9" | | bgcolor="#F2F2F2" | | bgcolor="#BBBBBB" | | bgcolor="#C6C6C6" | | bgcolor="#CBCBCB" | | bgcolor="#828282" | | bgcolor="#727272" | | bgcolor="#808080" | | bgcolor="#AFAFAF" | | bgcolor="#BCBCBC" | | bgcolor="#D9D9D9" | | bgcolor="#E5E5E5" | | bgcolor="#C0C0C0" | | bgcolor="#ADADAD" | | bgcolor="#7C7C7C" | | bgcolor="#818181" | | bgcolor="#969696" | | bgcolor="#B9B9B9" | | bgcolor="#C9C9C9" | | bgcolor="#D4D4D4" | | bgcolor="#F0F0F0" | | bgcolor="#FEFEFE" | | bgcolor="#FBFBFB" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#FDFDFD" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#FCFCFC" | | colspan="2" bgcolor="#FFFFFF" | |- | bgcolor="#FEFEFE" | | bgcolor="#FBFBFB" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#FCFCFC" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#FBFBFB" | | bgcolor="#E7E7E7" | | bgcolor="#BDBDBD" | | bgcolor="#C1C1C1" | | bgcolor="#BBBBBB" | | bgcolor="#7B7B7B" | | bgcolor="#797979" | | bgcolor="#7F7F7F" | | bgcolor="#969696" | | bgcolor="#919191" | | bgcolor="#AEAEAE" | | bgcolor="#B2B2B2" | | bgcolor="#7D7D7D" | | bgcolor="#6B6B6B" | | bgcolor="#838383" | | bgcolor="#777777" | | bgcolor="#868686" | | bgcolor="#CCCCCC" | | bgcolor="#CACACA" | | bgcolor="#C8C8C8" | | bgcolor="#E9E9E9" | | bgcolor="#FFFFFF" | | bgcolor="#FAFAFA" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#F8F8F8" | | colspan="2" bgcolor="#FAFAFA" | | bgcolor="#F9F9F9" | | bgcolor="#FAFAFA" | | bgcolor="#FFFFFF" | |- | bgcolor="#FFFFFF" | | bgcolor="#FAFAFA" | | bgcolor="#FEFEFE" | | bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | bgcolor="#FDFDFD" | | bgcolor="#FFFFFF" | | bgcolor="#FDFDFD" | | bgcolor="#D2D2D2" | | colspan="2" bgcolor="#BEBEBE" | | bgcolor="#AFAFAF" | | bgcolor="#777777" | | bgcolor="#808080" | | bgcolor="#7E7E7E" | | bgcolor="#7D7D7D" | | bgcolor="#B1B1B1" | | bgcolor="#777777" | | bgcolor="#535353" | | bgcolor="#454545" | | bgcolor="#4F4F4F" | | bgcolor="#828282" | | bgcolor="#717171" | | bgcolor="#A4A4A4" | | bgcolor="#C9C9C9" | | bgcolor="#C2C2C2" | | bgcolor="#BDBDBD" | | bgcolor="#E7E7E7" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#FCFCFC" | | bgcolor="#F9F9F9" | | colspan="4" bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | bgcolor="#FBFBFB" | |- | bgcolor="#FFFFFF" | | bgcolor="#FAFAFA" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#FBFBFB" | | bgcolor="#F8F8F8" | | bgcolor="#FEFEFE" | | bgcolor="#FFFFFF" | | bgcolor="#BBBBBB" | | bgcolor="#BEBEBE" | | bgcolor="#C2C2C2" | | bgcolor="#B5B5B5" | | bgcolor="#7D7D7D" | | bgcolor="#7E7E7E" | | bgcolor="#7C7C7C" | | bgcolor="#767676" | | bgcolor="#DADADA" | | bgcolor="#AFAFAF" | | bgcolor="#737373" | | colspan="2" bgcolor="#414141" | | bgcolor="#787878" | | bgcolor="#797979" | | bgcolor="#848484" | | bgcolor="#C3C3C3" | | bgcolor="#C2C2C2" | | bgcolor="#B2B2B2" | | bgcolor="#CECECE" | | bgcolor="#FAFAFA" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | colspan="5" bgcolor="#FFFFFF" | | bgcolor="#FDFDFD" | |- | bgcolor="#FFFFFF" | | bgcolor="#FBFBFB" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#FAFAFA" | | bgcolor="#F9F9F9" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#AAAAAA" | | bgcolor="#BFBFBF" | | bgcolor="#C9C9C9" | | bgcolor="#C3C3C3" | | bgcolor="#858585" | | bgcolor="#757575" | | bgcolor="#777777" | | bgcolor="#7D7D7D" | | bgcolor="#D3D3D3" | | bgcolor="#E0E0E0" | | bgcolor="#C8C8C8" | | bgcolor="#999999" | | bgcolor="#7C7C7C" | | bgcolor="#727272" | | bgcolor="#9D9D9D" | | bgcolor="#9B9B9B" | | bgcolor="#CACACA" | | bgcolor="#D1D1D1" | | bgcolor="#AAAAAA" | | bgcolor="#A3A3A3" | | bgcolor="#CECECE" | | bgcolor="#F0F0F0" | | colspan="3" bgcolor="#FFFFFF" | | colspan="2" bgcolor="#FBFBFB" | | bgcolor="#FEFEFE" | | colspan="2" bgcolor="#FFFFFF" | |- | bgcolor="#FEFEFE" | | bgcolor="#FCFCFC" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#F6F6F6" | | bgcolor="#A1A1A1" | | bgcolor="#C2C2C2" | | colspan="2" bgcolor="#CACACA" | | bgcolor="#8D8D8D" | | bgcolor="#747474" | | bgcolor="#7D7D7D" | | bgcolor="#8C8C8C" | | bgcolor="#A7A7A7" | | bgcolor="#B3B3B3" | | bgcolor="#B1B1B1" | | bgcolor="#B2B2B2" | | bgcolor="#9F9F9F" | | bgcolor="#6F6F6F" | | bgcolor="#AEAEAE" | | bgcolor="#B5B5B5" | | bgcolor="#C2C2C2" | | bgcolor="#DADADA" | | bgcolor="#B0B0B0" | | bgcolor="#999999" | | bgcolor="#BEBEBE" | | bgcolor="#E1E1E1" | | bgcolor="#F5F5F5" | | bgcolor="#F9F9F9" | | colspan="3" bgcolor="#FFFFFF" | | bgcolor="#FCFCFC" | | bgcolor="#FAFAFA" | | bgcolor="#FFFFFF" | |- | bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | colspan="4" bgcolor="#FFFFFF" | | bgcolor="#F4F4F4" | | bgcolor="#D2D2D2" | | bgcolor="#9C9C9C" | | colspan="2" bgcolor="#C4C4C4" | | bgcolor="#C5C5C5" | | bgcolor="#969696" | | bgcolor="#8A8A8A" | | bgcolor="#999999" | | bgcolor="#A2A2A2" | | bgcolor="#BBBBBB" | | bgcolor="#D1D1D1" | | bgcolor="#C7C7C7" | | bgcolor="#B7B7B7" | | bgcolor="#ADADAD" | | bgcolor="#BCBCBC" | | bgcolor="#DADADA" | | colspan="2" bgcolor="#B3B3B3" | | bgcolor="#D6D6D6" | | bgcolor="#B8B8B8" | | bgcolor="#A9A9A9" | | bgcolor="#CBCBCB" | | colspan="2" bgcolor="#D9D9D9" | | bgcolor="#D8D8D8" | | bgcolor="#E6E6E6" | | bgcolor="#FCFCFC" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#FBFBFB" | | bgcolor="#FFFFFF" | |- | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#FCFCFC" | | bgcolor="#F9F9F9" | | bgcolor="#FEFEFE" | | bgcolor="#FFFFFF" | | bgcolor="#E2E2E2" | | bgcolor="#ADADAD" | | bgcolor="#9A9A9A" | | bgcolor="#C4C4C4" | | colspan="2" bgcolor="#BCBCBC" | | bgcolor="#9E9E9E" | | bgcolor="#A3A3A3" | | colspan="2" bgcolor="#B6B6B6" | | bgcolor="#B5B5B5" | | bgcolor="#AFAFAF" | | bgcolor="#B5B5B5" | | bgcolor="#CCCCCC" | | bgcolor="#BABABA" | | bgcolor="#CBCBCB" | | bgcolor="#C5C5C5" | | bgcolor="#BDBDBD" | | bgcolor="#B5B5B5" | | bgcolor="#D3D3D3" | | bgcolor="#B4B4B4" | | bgcolor="#ADADAD" | | bgcolor="#D0D0D0" | | bgcolor="#D3D3D3" | | bgcolor="#CCCCCC" | | bgcolor="#D1D1D1" | | bgcolor="#B1B1B1" | | bgcolor="#DEDEDE" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | bgcolor="#FFFFFF" | |- | bgcolor="#FBFBFB" | | bgcolor="#FFFFFF" | | bgcolor="#FBFBFB" | | bgcolor="#F9F9F9" | | bgcolor="#FFFFFF" | | bgcolor="#E5E5E5" | | bgcolor="#A5A5A5" | | bgcolor="#858585" | | bgcolor="#AAAAAA" | | bgcolor="#BCBCBC" | | bgcolor="#C4C4C4" | | bgcolor="#C3C3C3" | | bgcolor="#A9A9A9" | | bgcolor="#A1A1A1" | | bgcolor="#C1C1C1" | | bgcolor="#CCCCCC" | | bgcolor="#B7B7B7" | | bgcolor="#CFCFCF" | | bgcolor="#C3C3C3" | | bgcolor="#C2C2C2" | | bgcolor="#C0C0C0" | | bgcolor="#CDCDCD" | | bgcolor="#D7D7D7" | | bgcolor="#ABABAB" | | bgcolor="#BCBCBC" | | bgcolor="#C3C3C3" | | bgcolor="#ADADAD" | | bgcolor="#B4B4B4" | | bgcolor="#B9B9B9" | | bgcolor="#D6D6D6" | | bgcolor="#D5D5D5" | | bgcolor="#C7C7C7" | | bgcolor="#B6B6B6" | | bgcolor="#DEDEDE" | | bgcolor="#F9F9F9" | | bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | bgcolor="#F9F9F9" | |- | bgcolor="#FDFDFD" | | colspan="3" bgcolor="#FFFFFF" | | bgcolor="#F7F7F7" | | bgcolor="#F2F2F2" | | bgcolor="#909090" | | bgcolor="#8F8F8F" | | bgcolor="#A2A2A2" | | bgcolor="#BCBCBC" | | bgcolor="#C6C6C6" | | bgcolor="#C1C1C1" | | bgcolor="#ADADAD" | | bgcolor="#B0B0B0" | | colspan="2" bgcolor="#D0D0D0" | | bgcolor="#BBBBBB" | | bgcolor="#B1B1B1" | | bgcolor="#A4A4A4" | | bgcolor="#A6A6A6" | | bgcolor="#C3C3C3" | | colspan="2" bgcolor="#D8D8D8" | | bgcolor="#A8A8A8" | | bgcolor="#BBBBBB" | | bgcolor="#C2C2C2" | | bgcolor="#B0B0B0" | | bgcolor="#B1B1B1" | | bgcolor="#ADADAD" | | bgcolor="#CDCDCD" | | bgcolor="#D4D4D4" | | bgcolor="#CFCFCF" | | bgcolor="#CDCDCD" | | bgcolor="#DADADA" | | bgcolor="#F9F9F9" | | bgcolor="#FFFFFF" | | bgcolor="#FDFDFD" | | bgcolor="#FEFEFE" | |- | bgcolor="#FCFCFC" | | colspan="3" bgcolor="#FFFFFF" | | bgcolor="#F8F8F8" | | bgcolor="#DBDBDB" | | bgcolor="#959595" | | bgcolor="#919191" | | bgcolor="#9F9F9F" | | bgcolor="#BCBCBC" | | bgcolor="#C5C5C5" | | bgcolor="#BDBDBD" | | bgcolor="#B0B0B0" | | bgcolor="#BCBCBC" | | bgcolor="#DADADA" | | bgcolor="#D1D1D1" | | bgcolor="#BBBBBB" | | bgcolor="#939393" | | colspan="2" bgcolor="#979797" | | bgcolor="#CDCDCD" | | bgcolor="#E0E0E0" | | bgcolor="#D8D8D8" | | bgcolor="#B0B0B0" | | bgcolor="#BABABA" | | bgcolor="#C0C0C0" | | bgcolor="#B4B4B4" | | bgcolor="#ACACAC" | | bgcolor="#9D9D9D" | | bgcolor="#C4C4C4" | | bgcolor="#D5D5D5" | | bgcolor="#D8D8D8" | | bgcolor="#DFDFDF" | | bgcolor="#CACACA" | | bgcolor="#F3F3F3" | | bgcolor="#FFFFFF" | | bgcolor="#FAFAFA" | | bgcolor="#FFFFFF" | |- | bgcolor="#F8F8F8" | | bgcolor="#FFFFFF" | | bgcolor="#FAFAFA" | | bgcolor="#FBFBFB" | | bgcolor="#FFFFFF" | | bgcolor="#ABABAB" | | bgcolor="#B3B3B3" | | bgcolor="#8B8B8B" | | bgcolor="#A6A6A6" | | bgcolor="#BABABA" | | bgcolor="#BEBEBE" | | bgcolor="#BDBDBD" | | bgcolor="#B2B2B2" | | bgcolor="#BBBBBB" | | bgcolor="#D7D7D7" | | bgcolor="#D0D0D0" | | bgcolor="#BBBBBB" | | bgcolor="#898989" | | bgcolor="#A1A1A1" | | bgcolor="#9D9D9D" | | bgcolor="#D5D5D5" | | bgcolor="#DCDCDC" | | bgcolor="#D3D3D3" | | bgcolor="#BBBBBB" | | colspan="2" bgcolor="#BABABA" | | bgcolor="#B5B5B5" | | bgcolor="#A7A7A7" | | bgcolor="#929292" | | bgcolor="#C2C2C2" | | bgcolor="#D6D6D6" | | bgcolor="#DCDCDC" | | bgcolor="#E0E0E0" | | bgcolor="#B5B5B5" | | bgcolor="#ECECEC" | | bgcolor="#FFFFFF" | | bgcolor="#F8F8F8" | | bgcolor="#FFFFFF" | |- | bgcolor="#FAFAFA" | | bgcolor="#FFFFFF" | | bgcolor="#FCFCFC" | | bgcolor="#F9F9F9" | | bgcolor="#FDFDFD" | | bgcolor="#A2A2A2" | | bgcolor="#B4B4B4" | | bgcolor="#909090" | | bgcolor="#AFAFAF" | | bgcolor="#B4B4B4" | | bgcolor="#B6B6B6" | | bgcolor="#C1C1C1" | | bgcolor="#B9B9B9" | | bgcolor="#B7B7B7" | | bgcolor="#D2D2D2" | | bgcolor="#D7D7D7" | | bgcolor="#CCCCCC" | | bgcolor="#8F8F8F" | | bgcolor="#A1A1A1" | | bgcolor="#9D9D9D" | | bgcolor="#D4D4D4" | | bgcolor="#D7D7D7" | | bgcolor="#D1D1D1" | | bgcolor="#C1C1C1" | | bgcolor="#B9B9B9" | | bgcolor="#B0B0B0" | | bgcolor="#B2B2B2" | | bgcolor="#A0A0A0" | | bgcolor="#8B8B8B" | | bgcolor="#C5C5C5" | | bgcolor="#D7D7D7" | | colspan="2" bgcolor="#DADADA" | | bgcolor="#AEAEAE" | | bgcolor="#E8E8E8" | | bgcolor="#FFFFFF" | | bgcolor="#FAFAFA" | | bgcolor="#FFFFFF" | |- | bgcolor="#FFFFFF" | | bgcolor="#FDFDFD" | | bgcolor="#FFFFFF" | | bgcolor="#FBFBFB" | | bgcolor="#D5D5D5" | | bgcolor="#BEBEBE" | | bgcolor="#989898" | | bgcolor="#9D9D9D" | | bgcolor="#ACACAC" | | bgcolor="#ADADAD" | | bgcolor="#B3B3B3" | | bgcolor="#C7C7C7" | | bgcolor="#C1C1C1" | | bgcolor="#BABABA" | | bgcolor="#D4D4D4" | | bgcolor="#DDDDDD" | | bgcolor="#DFDFDF" | | bgcolor="#999999" | | bgcolor="#8C8C8C" | | bgcolor="#949494" | | bgcolor="#D1D1D1" | | bgcolor="#DEDEDE" | | bgcolor="#DCDCDC" | | bgcolor="#C4C4C4" | | bgcolor="#B6B6B6" | | bgcolor="#A5A5A5" | | bgcolor="#ACACAC" | | bgcolor="#989898" | | bgcolor="#828282" | | bgcolor="#C6C6C6" | | bgcolor="#D7D7D7" | | bgcolor="#D8D8D8" | | bgcolor="#D9D9D9" | | bgcolor="#BABABA" | | bgcolor="#E6E6E6" | | colspan="3" bgcolor="#FFFFFF" | |- | bgcolor="#FFFFFF" | | bgcolor="#F9F9F9" | | bgcolor="#FFFFFF" | | bgcolor="#F5F5F5" | | bgcolor="#BFBFBF" | | bgcolor="#C4C4C4" | | bgcolor="#909090" | | colspan="2" bgcolor="#9E9E9E" | | bgcolor="#AAAAAA" | | bgcolor="#B6B6B6" | | bgcolor="#C8C8C8" | | bgcolor="#C2C2C2" | | bgcolor="#BEBEBE" | | bgcolor="#D4D4D4" | | bgcolor="#D5D5D5" | | bgcolor="#CCCCCC" | | bgcolor="#919191" | | bgcolor="#6F6F6F" | | bgcolor="#8E8E8E" | | bgcolor="#C8C8C8" | | bgcolor="#DDDDDD" | | bgcolor="#DFDFDF" | | bgcolor="#BEBEBE" | | bgcolor="#AFAFAF" | | bgcolor="#9A9A9A" | | bgcolor="#A8A8A8" | | bgcolor="#8F8F8F" | | bgcolor="#747474" | | bgcolor="#C0C0C0" | | bgcolor="#D6D6D6" | | bgcolor="#DADADA" | | bgcolor="#D7D7D7" | | bgcolor="#C7C7C7" | | bgcolor="#DCDCDC" | | bgcolor="#FCFCFC" | | bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | |- | bgcolor="#FDFDFD" | | bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | bgcolor="#E9E9E9" | | bgcolor="#C5C5C5" | | bgcolor="#ACACAC" | | bgcolor="#A3A3A3" | | bgcolor="#949494" | | bgcolor="#919191" | | bgcolor="#AAAAAA" | | bgcolor="#BBBBBB" | | bgcolor="#C7C7C7" | | bgcolor="#BFBFBF" | | bgcolor="#C0C0C0" | | bgcolor="#D2D2D2" | | bgcolor="#C7C7C7" | | bgcolor="#A0A0A0" | | bgcolor="#7C7C7C" | | bgcolor="#5A5A5A" | | bgcolor="#898989" | | bgcolor="#BABABA" | | bgcolor="#CECECE" | | bgcolor="#D5D5D5" | | bgcolor="#B2B2B2" | | bgcolor="#ABABAB" | | bgcolor="#959595" | | bgcolor="#A5A5A5" | | bgcolor="#898989" | | bgcolor="#6A6A6A" | | bgcolor="#BABABA" | | bgcolor="#D5D5D5" | | bgcolor="#DDDDDD" | | bgcolor="#D3D3D3" | | bgcolor="#CDCDCD" | | bgcolor="#D0D0D0" | | bgcolor="#F1F1F1" | | bgcolor="#FFFFFF" | | bgcolor="#FCFCFC" | |- | bgcolor="#FFFFFF" | | bgcolor="#FDFDFD" | | bgcolor="#F7F7F7" | | bgcolor="#D9D9D9" | | bgcolor="#A7A7A7" | | bgcolor="#B1B1B1" | | bgcolor="#9D9D9D" | | bgcolor="#8C8C8C" | | bgcolor="#9A9A9A" | | bgcolor="#A0A0A0" | | bgcolor="#AAAAAA" | | bgcolor="#CBCBCB" | | bgcolor="#C3C3C3" | | bgcolor="#B5B5B5" | | bgcolor="#CDCDCD" | | bgcolor="#BEBEBE" | | bgcolor="#898989" | | bgcolor="#858585" | | bgcolor="#585858" | | bgcolor="#7C7C7C" | | bgcolor="#868686" | | bgcolor="#9E9E9E" | | bgcolor="#E1E1E1" | | bgcolor="#B6B6B6" | | bgcolor="#9F9F9F" | | bgcolor="#969696" | | bgcolor="#9D9D9D" | | bgcolor="#7D7D7D" | | bgcolor="#9A9A9A" | | bgcolor="#BBBBBB" | | colspan="2" bgcolor="#D4D4D4" | | bgcolor="#D8D8D8" | | bgcolor="#D3D3D3" | | bgcolor="#AEAEAE" | | bgcolor="#FFFFFF" | | bgcolor="#FAFAFA" | | bgcolor="#FFFFFF" | |- | bgcolor="#FCFCFC" | | bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | bgcolor="#DADADA" | | bgcolor="#9E9E9E" | | bgcolor="#9D9D9D" | | bgcolor="#8D8D8D" | | colspan="2" bgcolor="#8E8E8E" | | bgcolor="#A3A3A3" | | bgcolor="#999999" | | bgcolor="#C2C2C2" | | bgcolor="#BEBEBE" | | bgcolor="#B1B1B1" | | bgcolor="#E0E0E0" | | bgcolor="#C4C4C4" | | bgcolor="#C2C2C2" | | bgcolor="#8D8D8D" | | bgcolor="#6C6C6C" | | bgcolor="#7E7E7E" | | bgcolor="#B3B3B3" | | bgcolor="#ADADAD" | | bgcolor="#E7E7E7" | | bgcolor="#B7B7B7" | | bgcolor="#9E9E9E" | | bgcolor="#818181" | | bgcolor="#8A8A8A" | | bgcolor="#7D7D7D" | | bgcolor="#999999" | | bgcolor="#B9B9B9" | | bgcolor="#D8D8D8" | | bgcolor="#DEDEDE" | | bgcolor="#D8D8D8" | | bgcolor="#ABABAB" | | bgcolor="#949494" | | bgcolor="#F7F7F7" | | bgcolor="#FFFFFF" | | bgcolor="#FBFBFB" | |- | bgcolor="#FBFBFB" | | bgcolor="#FFFFFF" | | bgcolor="#F8F8F8" | | bgcolor="#D1D1D1" | | bgcolor="#999999" | | bgcolor="#949494" | | bgcolor="#828282" | | colspan="2" bgcolor="#8E8E8E" | | bgcolor="#A7A7A7" | | bgcolor="#888888" | | bgcolor="#AFAFAF" | | bgcolor="#B1B1B1" | | bgcolor="#A6A6A6" | | bgcolor="#DADADA" | | bgcolor="#A7A7A7" | | bgcolor="#9A9A9A" | | bgcolor="#777777" | | bgcolor="#7A7A7A" | | bgcolor="#7F7F7F" | | colspan="2" bgcolor="#ABABAB" | | bgcolor="#D9D9D9" | | bgcolor="#BFBFBF" | | bgcolor="#A1A1A1" | | bgcolor="#777777" | | bgcolor="#898989" | | bgcolor="#909090" | | bgcolor="#9C9C9C" | | bgcolor="#B3B3B3" | | bgcolor="#D0D0D0" | | bgcolor="#D6D6D6" | | bgcolor="#C0C0C0" | | bgcolor="#8F8F8F" | | bgcolor="#9F9F9F" | | bgcolor="#EFEFEF" | | bgcolor="#FFFFFF" | | bgcolor="#FBFBFB" | |- | bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | bgcolor="#E7E7E7" | | bgcolor="#C2C2C2" | | bgcolor="#999999" | | bgcolor="#9B9B9B" | | bgcolor="#868686" | | bgcolor="#8D8D8D" | | bgcolor="#9A9A9A" | | bgcolor="#A8A8A8" | | bgcolor="#8A8A8A" | | colspan="2" bgcolor="#9A9A9A" | | bgcolor="#9C9C9C" | | bgcolor="#BBBBBB" | | bgcolor="#838383" | | bgcolor="#8A8A8A" | | bgcolor="#949494" | | bgcolor="#A2A2A2" | | bgcolor="#9E9E9E" | | bgcolor="#9C9C9C" | | bgcolor="#BCBCBC" | | bgcolor="#C1C1C1" | | bgcolor="#AFAFAF" | | bgcolor="#898989" | | bgcolor="#6E6E6E" | | bgcolor="#909090" | | bgcolor="#989898" | | bgcolor="#868686" | | bgcolor="#959595" | | bgcolor="#ABABAB" | | bgcolor="#A9A9A9" | | bgcolor="#A4A4A4" | | bgcolor="#9A9A9A" | | bgcolor="#D7D7D7" | | bgcolor="#F2F2F2" | | colspan="2" bgcolor="#FFFFFF" | |- | bgcolor="#FFFFFF" | | bgcolor="#FAFAFA" | | bgcolor="#E3E3E3" | | bgcolor="#BDBDBD" | | bgcolor="#929292" | | bgcolor="#9F9F9F" | | bgcolor="#8F8F8F" | | bgcolor="#909090" | | bgcolor="#9C9C9C" | | bgcolor="#A0A0A0" | | bgcolor="#9D9D9D" | | bgcolor="#8F8F8F" | | bgcolor="#858585" | | bgcolor="#9F9F9F" | | bgcolor="#B5B5B5" | | bgcolor="#9D9D9D" | | bgcolor="#949494" | | bgcolor="#8E8E8E" | | bgcolor="#939393" | | bgcolor="#949494" | | bgcolor="#A9A9A9" | | bgcolor="#CCCCCC" | | bgcolor="#B6B6B6" | | bgcolor="#999999" | | bgcolor="#808080" | | bgcolor="#838383" | | bgcolor="#ACACAC" | | bgcolor="#A5A5A5" | | bgcolor="#7E7E7E" | | bgcolor="#969696" | | bgcolor="#ADADAD" | | bgcolor="#A9A9A9" | | bgcolor="#AEAEAE" | | bgcolor="#B3B3B3" | | bgcolor="#FCFCFC" | | bgcolor="#F7F7F7" | | bgcolor="#FDFDFD" | | bgcolor="#FFFFFF" | |- | bgcolor="#FEFEFE" | | bgcolor="#FBFBFB" | | bgcolor="#F1F1F1" | | bgcolor="#C7C7C7" | | bgcolor="#8C8C8C" | | bgcolor="#A2A2A2" | | bgcolor="#A0A0A0" | | bgcolor="#969696" | | bgcolor="#8F8F8F" | | bgcolor="#949494" | | bgcolor="#A7A7A7" | | bgcolor="#909090" | | bgcolor="#838383" | | bgcolor="#B0B0B0" | | bgcolor="#D1D1D1" | | bgcolor="#D7D7D7" | | bgcolor="#BCBCBC" | | bgcolor="#919191" | | bgcolor="#9C9C9C" | | bgcolor="#A0A0A0" | | bgcolor="#E2E2E2" | | bgcolor="#DCDCDC" | | bgcolor="#DBDBDB" | | bgcolor="#C8C8C8" | | bgcolor="#999999" | | bgcolor="#ADADAD" | | bgcolor="#C9C9C9" | | bgcolor="#B3B3B3" | | bgcolor="#8B8B8B" | | bgcolor="#B6B6B6" | | bgcolor="#D2D2D2" | | bgcolor="#D5D5D5" | | bgcolor="#D1D1D1" | | bgcolor="#BEBEBE" | | bgcolor="#F2F2F2" | | bgcolor="#FAFAFA" | | bgcolor="#FFFFFF" | | bgcolor="#FBFBFB" | |- | bgcolor="#FFFFFF" | | bgcolor="#FAFAFA" | | bgcolor="#FDFDFD" | | bgcolor="#D7D7D7" | | bgcolor="#979797" | | bgcolor="#BBBBBB" | | bgcolor="#BDBDBD" | | bgcolor="#9A9A9A" | | bgcolor="#8A8A8A" | | bgcolor="#8C8C8C" | | colspan="2" bgcolor="#939393" | | bgcolor="#9A9A9A" | | bgcolor="#C3C3C3" | | bgcolor="#E3E3E3" | | bgcolor="#D7D7D7" | | bgcolor="#BCBCBC" | | bgcolor="#9C9C9C" | | bgcolor="#9F9F9F" | | bgcolor="#A6A6A6" | | bgcolor="#DDDDDD" | | bgcolor="#C3C3C3" | | bgcolor="#D0D0D0" | | bgcolor="#CBCBCB" | | bgcolor="#B5B5B5" | | bgcolor="#C5C5C5" | | bgcolor="#C7C7C7" | | bgcolor="#ACACAC" | | bgcolor="#909090" | | bgcolor="#C2C2C2" | | bgcolor="#D5D5D5" | | bgcolor="#DFDFDF" | | bgcolor="#D8D8D8" | | bgcolor="#BEBEBE" | | bgcolor="#E2E2E2" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#F8F8F8" | |- | bgcolor="#FFFFFF" | | bgcolor="#F7F7F7" | | bgcolor="#FDFDFD" | | bgcolor="#E1E1E1" | | bgcolor="#AAAAAA" | | bgcolor="#DCDCDC" | | bgcolor="#D8D8D8" | | bgcolor="#9A9A9A" | | bgcolor="#909090" | | bgcolor="#8A8A8A" | | bgcolor="#767676" | | bgcolor="#949494" | | bgcolor="#B2B2B2" | | bgcolor="#CDCDCD" | | bgcolor="#E0E0E0" | | bgcolor="#A8A8A8" | | bgcolor="#A3A3A3" | | bgcolor="#A4A4A4" | | bgcolor="#949494" | | bgcolor="#B4B4B4" | | bgcolor="#D8D8D8" | | bgcolor="#E2E2E2" | | bgcolor="#E1E1E1" | | bgcolor="#D7D7D7" | | bgcolor="#D6D6D6" | | bgcolor="#DCDCDC" | | bgcolor="#CACACA" | | bgcolor="#B0B0B0" | | bgcolor="#9C9C9C" | | bgcolor="#CACACA" | | bgcolor="#CDCDCD" | | bgcolor="#D7D7D7" | | bgcolor="#C4C4C4" | | bgcolor="#BFBFBF" | | bgcolor="#E2E2E2" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#F9F9F9" | |- | bgcolor="#FBFBFB" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#DCDCDC" | | bgcolor="#C2C2C2" | | bgcolor="#D9D9D9" | | bgcolor="#CCCCCC" | | bgcolor="#A5A5A5" | | bgcolor="#858585" | | bgcolor="#8E8E8E" | | bgcolor="#7A7A7A" | | bgcolor="#979797" | | bgcolor="#D6D6D6" | | bgcolor="#CDCDCD" | | bgcolor="#E5E5E5" | | bgcolor="#D6D6D6" | | bgcolor="#D9D9D9" | | bgcolor="#D8D8D8" | | bgcolor="#D7D7D7" | | bgcolor="#D5D5D5" | | bgcolor="#D4D4D4" | | bgcolor="#D6D6D6" | | bgcolor="#D9D9D9" | | bgcolor="#DBDBDB" | | bgcolor="#E1E1E1" | | bgcolor="#DADADA" | | bgcolor="#AAAAAA" | | bgcolor="#B4B4B4" | | bgcolor="#A2A2A2" | | bgcolor="#CDCDCD" | | bgcolor="#D7D7D7" | | bgcolor="#D4D4D4" | | bgcolor="#C3C3C3" | | bgcolor="#B9B9B9" | | bgcolor="#F5F5F5" | | bgcolor="#FFFFFF" | | bgcolor="#FAFAFA" | | bgcolor="#FFFFFF" | |- | bgcolor="#FDFDFD" | | bgcolor="#FEFEFE" | | bgcolor="#FFFFFF" | | bgcolor="#DADADA" | | bgcolor="#C3C3C3" | | bgcolor="#DCDCDC" | | bgcolor="#CECECE" | | bgcolor="#A5A5A5" | | bgcolor="#898989" | | bgcolor="#9C9C9C" | | bgcolor="#8D8D8D" | | bgcolor="#ACACAC" | | bgcolor="#DADADA" | | bgcolor="#D5D5D5" | | bgcolor="#E6E6E6" | | bgcolor="#D9D9D9" | | colspan="2" bgcolor="#DFDFDF" | | bgcolor="#DEDEDE" | | colspan="3" bgcolor="#DDDDDD" | | bgcolor="#DFDFDF" | | bgcolor="#E0E0E0" | | bgcolor="#DADADA" | | bgcolor="#DCDCDC" | | bgcolor="#AAAAAA" | | bgcolor="#B7B7B7" | | bgcolor="#A0A0A0" | | bgcolor="#CCCCCC" | | bgcolor="#D1D1D1" | | bgcolor="#D3D3D3" | | bgcolor="#C4C4C4" | | bgcolor="#BFBFBF" | | bgcolor="#F7F7F7" | | bgcolor="#FFFFFF" | | bgcolor="#FBFBFB" | | bgcolor="#FFFFFF" | |- | colspan="2" bgcolor="#FEFEFE" | | bgcolor="#FFFFFF" | | bgcolor="#D7D7D7" | | bgcolor="#C2C2C2" | | bgcolor="#DEDEDE" | | bgcolor="#D3D3D3" | | bgcolor="#ACACAC" | | bgcolor="#919191" | | bgcolor="#AEAEAE" | | bgcolor="#A5A5A5" | | bgcolor="#C6C6C6" | | bgcolor="#DADADA" | | bgcolor="#DCDCDC" | | bgcolor="#E4E4E4" | | bgcolor="#DBDBDB" | | colspan="3" bgcolor="#DEDEDE" | | colspan="2" bgcolor="#DFDFDF" | | colspan="2" bgcolor="#DEDEDE" | | bgcolor="#DDDDDD" | | bgcolor="#D6D6D6" | | bgcolor="#E3E3E3" | | bgcolor="#B0B0B0" | | bgcolor="#C4C4C4" | | bgcolor="#A3A3A3" | | bgcolor="#CDCDCD" | | bgcolor="#CBCBCB" | | bgcolor="#D5D5D5" | | bgcolor="#C5C5C5" | | bgcolor="#C8C8C8" | | bgcolor="#F9F9F9" | | bgcolor="#FFFFFF" | | bgcolor="#FDFDFD" | | bgcolor="#FFFFFF" | |- | bgcolor="#FEFEFE" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#D5D5D5" | | bgcolor="#BEBEBE" | | bgcolor="#DEDEDE" | | bgcolor="#DBDBDB" | | bgcolor="#BBBBBB" | | bgcolor="#9F9F9F" | | bgcolor="#BCBCBC" | | bgcolor="#B8B8B8" | | bgcolor="#D8D8D8" | | bgcolor="#D6D6D6" | | bgcolor="#DDDDDD" | | bgcolor="#DEDEDE" | | colspan="2" bgcolor="#DBDBDB" | | bgcolor="#DCDCDC" | | bgcolor="#DDDDDD" | | bgcolor="#DEDEDE" | | bgcolor="#DFDFDF" | | bgcolor="#DEDEDE" | | bgcolor="#DBDBDB" | | bgcolor="#D8D8D8" | | bgcolor="#DADADA" | | bgcolor="#E8E8E8" | | bgcolor="#BDBDBD" | | bgcolor="#D9D9D9" | | bgcolor="#ACACAC" | | bgcolor="#CFCFCF" | | bgcolor="#CACACA" | | bgcolor="#D8D8D8" | | bgcolor="#C5C5C5" | | bgcolor="#D3D3D3" | | bgcolor="#FCFCFC" | | bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | bgcolor="#FFFFFF" | |- | bgcolor="#FDFDFD" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#D4D4D4" | | bgcolor="#BABABA" | | bgcolor="#DCDCDC" | | bgcolor="#E1E1E1" | | bgcolor="#C8C8C8" | | bgcolor="#B1B1B1" | | bgcolor="#C1C1C1" | | bgcolor="#C2C2C2" | | bgcolor="#DEDEDE" | | bgcolor="#D3D3D3" | | colspan="2" bgcolor="#DCDCDC" | | bgcolor="#DDDDDD" | | colspan="3" bgcolor="#E0E0E0" | | bgcolor="#E2E2E2" | | bgcolor="#E4E4E4" | | bgcolor="#E2E2E2" | | bgcolor="#DEDEDE" | | bgcolor="#DADADA" | | bgcolor="#DEDEDE" | | bgcolor="#DFDFDF" | | bgcolor="#C6C6C6" | | bgcolor="#EBEBEB" | | bgcolor="#B7B7B7" | | bgcolor="#CBCBCB" | | bgcolor="#CDCDCD" | | bgcolor="#D8D8D8" | | bgcolor="#C4C4C4" | | bgcolor="#DEDEDE" | | bgcolor="#FDFDFD" | | colspan="3" bgcolor="#FFFFFF" | |- | bgcolor="#FDFDFD" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#D4D4D4" | | bgcolor="#BABABA" | | bgcolor="#DBDBDB" | | bgcolor="#E0E0E0" | | bgcolor="#C6C6C6" | | bgcolor="#BEBEBE" | | bgcolor="#B7B7B7" | | bgcolor="#C0C0C0" | | bgcolor="#DADADA" | | bgcolor="#D7D7D7" | | bgcolor="#DBDBDB" | | bgcolor="#DDDDDD" | | bgcolor="#E0E0E0" | | bgcolor="#E2E2E2" | | bgcolor="#E0E0E0" | | bgcolor="#DFDFDF" | | bgcolor="#E1E1E1" | | bgcolor="#E4E4E4" | | bgcolor="#E3E3E3" | | bgcolor="#DEDEDE" | | bgcolor="#D9D9D9" | | bgcolor="#DCDCDC" | | bgcolor="#C4C4C4" | | bgcolor="#C5C5C5" | | bgcolor="#F5F5F5" | | colspan="2" bgcolor="#BFBFBF" | | bgcolor="#D2D2D2" | | bgcolor="#D5D5D5" | | bgcolor="#C1C1C1" | | bgcolor="#E6E6E6" | | colspan="2" bgcolor="#FEFEFE" | | colspan="2" bgcolor="#FFFFFF" | |- | colspan="2" bgcolor="#FEFEFE" | | bgcolor="#FFFFFF" | | bgcolor="#D5D5D5" | | bgcolor="#BFBFBF" | | bgcolor="#DDDDDD" | | bgcolor="#D8D8D8" | | bgcolor="#B5B5B5" | | bgcolor="#C0C0C0" | | bgcolor="#A1A1A1" | | bgcolor="#B4B4B4" | | bgcolor="#D0D0D0" | | bgcolor="#DDDDDD" | | bgcolor="#D8D8D8" | | bgcolor="#DFDFDF" | | colspan="2" bgcolor="#E0E0E0" | | bgcolor="#DDDDDD" | | bgcolor="#DADADA" | | bgcolor="#DCDCDC" | | colspan="2" bgcolor="#DFDFDF" | | bgcolor="#DADADA" | | bgcolor="#D5D5D5" | | bgcolor="#D8D8D8" | | bgcolor="#A3A3A3" | | bgcolor="#BFBFBF" | | bgcolor="#FAFAFA" | | bgcolor="#C6C6C6" | | bgcolor="#B3B3B3" | | bgcolor="#DADADA" | | bgcolor="#D3D3D3" | | bgcolor="#BDBDBD" | | bgcolor="#EBEBEB" | | bgcolor="#FDFDFD" | | bgcolor="#FCFCFC" | | colspan="2" bgcolor="#FFFFFF" | |- | bgcolor="#FFFFFF" | | bgcolor="#FCFCFC" | | bgcolor="#FDFDFD" | | bgcolor="#D6D6D6" | | bgcolor="#C4C4C4" | | bgcolor="#E0E0E0" | | bgcolor="#D0D0D0" | | bgcolor="#A4A4A4" | | bgcolor="#BBBBBB" | | bgcolor="#8E8E8E" | | bgcolor="#A8A8A8" | | bgcolor="#C6C6C6" | | bgcolor="#E0E0E0" | | bgcolor="#D5D5D5" | | colspan="2" bgcolor="#DEDEDE" | | bgcolor="#E1E1E1" | | bgcolor="#DDDDDD" | | bgcolor="#DADADA" | | bgcolor="#DBDBDB" | | colspan="2" bgcolor="#DEDEDE" | | bgcolor="#DADADA" | | bgcolor="#D5D5D5" | | bgcolor="#D4D4D4" | | bgcolor="#8E8E8E" | | bgcolor="#BBBBBB" | | bgcolor="#FCFCFC" | | bgcolor="#CBCBCB" | | bgcolor="#ADADAD" | | bgcolor="#E1E1E1" | | bgcolor="#D3D3D3" | | bgcolor="#BBBBBB" | | bgcolor="#EEEEEE" | | bgcolor="#FCFCFC" | | bgcolor="#FAFAFA" | | colspan="2" bgcolor="#FFFFFF" | |- | bgcolor="#FCFCFC" | | bgcolor="#FFFFFF" | | bgcolor="#F9F9F9" | | bgcolor="#BCBCBC" | | bgcolor="#CFCFCF" | | bgcolor="#E0E0E0" | | bgcolor="#D4D4D4" | | bgcolor="#ACACAC" | | bgcolor="#C1C1C1" | | bgcolor="#8A8A8A" | | bgcolor="#939393" | | bgcolor="#CACACA" | | colspan="2" bgcolor="#DADADA" | | colspan="2" bgcolor="#E3E3E3" | | bgcolor="#E4E4E4" | | bgcolor="#E1E1E1" | | bgcolor="#DCDCDC" | | bgcolor="#D8D8D8" | | colspan="2" bgcolor="#D6D6D6" | | bgcolor="#D7D7D7" | | bgcolor="#D8D8D8" | | bgcolor="#CCCCCC" | | bgcolor="#AEAEAE" | | bgcolor="#C7C7C7" | | bgcolor="#FFFFFF" | | bgcolor="#ACACAC" | | bgcolor="#D3D3D3" | | bgcolor="#D4D4D4" | | bgcolor="#D9D9D9" | | bgcolor="#D3D3D3" | | bgcolor="#EEEEEE" | | bgcolor="#FCFCFC" | | bgcolor="#FDFDFD" | | colspan="2" bgcolor="#FFFFFF" | |- | bgcolor="#FEFEFE" | | bgcolor="#FFFFFF" | | bgcolor="#F4F4F4" | | bgcolor="#C1C1C1" | | bgcolor="#D4D4D4" | | bgcolor="#E2E2E2" | | bgcolor="#D7D7D7" | | bgcolor="#B4B4B4" | | bgcolor="#BBBBBB" | | bgcolor="#A3A3A3" | | bgcolor="#ABABAB" | | bgcolor="#CBCBCB" | | bgcolor="#D8D8D8" | | bgcolor="#DDDDDD" | | bgcolor="#E2E2E2" | | colspan="2" bgcolor="#E0E0E0" | | bgcolor="#DFDFDF" | | bgcolor="#DEDEDE" | | bgcolor="#DBDBDB" | | bgcolor="#D8D8D8" | | colspan="2" bgcolor="#D6D6D6" | | bgcolor="#D7D7D7" | | bgcolor="#DDDDDD" | | bgcolor="#B9B9B9" | | bgcolor="#CFCFCF" | | bgcolor="#FCFCFC" | | bgcolor="#B7B7B7" | | bgcolor="#D6D6D6" | | bgcolor="#DADADA" | | bgcolor="#DBDBDB" | | bgcolor="#D4D4D4" | | bgcolor="#EFEFEF" | | colspan="2" bgcolor="#FDFDFD" | | colspan="2" bgcolor="#FFFFFF" | |- | bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | bgcolor="#E9E9E9" | | bgcolor="#C8C8C8" | | bgcolor="#DADADA" | | bgcolor="#E1E1E1" | | bgcolor="#D8D8D8" | | bgcolor="#BCBCBC" | | bgcolor="#AFAFAF" | | bgcolor="#BCBCBC" | | bgcolor="#C4C4C4" | | bgcolor="#CACACA" | | bgcolor="#D8D8D8" | | bgcolor="#E0E0E0" | | bgcolor="#DFDFDF" | | bgcolor="#DEDEDE" | | bgcolor="#DBDBDB" | | bgcolor="#DEDEDE" | | bgcolor="#E0E0E0" | | bgcolor="#DFDFDF" | | bgcolor="#DBDBDB" | | colspan="2" bgcolor="#D7D7D7" | | bgcolor="#D8D8D8" | | bgcolor="#DDDDDD" | | bgcolor="#B3B3B3" | | bgcolor="#C8C8C8" | | bgcolor="#E8E8E8" | | bgcolor="#C2C2C2" | | bgcolor="#DADADA" | | bgcolor="#E2E2E2" | | bgcolor="#DEDEDE" | | bgcolor="#D6D6D6" | | bgcolor="#F0F0F0" | | bgcolor="#FEFEFE" | | bgcolor="#FDFDFD" | | colspan="2" bgcolor="#FFFFFF" | |- | bgcolor="#FFFFFF" | | bgcolor="#FAFAFA" | | bgcolor="#DBDBDB" | | bgcolor="#CDCDCD" | | bgcolor="#DEDEDE" | | bgcolor="#DFDFDF" | | bgcolor="#D6D6D6" | | bgcolor="#BFBFBF" | | bgcolor="#A5A5A5" | | bgcolor="#C8C8C8" | | bgcolor="#CECECE" | | bgcolor="#CBCBCB" | | bgcolor="#DEDEDE" | | bgcolor="#E2E2E2" | | bgcolor="#DADADA" | | bgcolor="#E1E1E1" | | bgcolor="#DBDBDB" | | bgcolor="#DFDFDF" | | bgcolor="#E3E3E3" | | bgcolor="#E2E2E2" | | bgcolor="#DDDDDD" | | bgcolor="#DADADA" | | bgcolor="#DBDBDB" | | bgcolor="#DDDDDD" | | bgcolor="#D3D3D3" | | bgcolor="#A9A9A9" | | bgcolor="#BFBFBF" | | bgcolor="#D4D4D4" | | bgcolor="#CBCBCB" | | bgcolor="#DBDBDB" | | bgcolor="#E2E2E2" | | bgcolor="#DBDBDB" | | bgcolor="#D8D8D8" | | bgcolor="#F2F2F2" | | bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | colspan="2" bgcolor="#FFFFFF" | |- | bgcolor="#FFFFFF" | | bgcolor="#FBFBFB" | | bgcolor="#D3D3D3" | | bgcolor="#D5D5D5" | | bgcolor="#E1E1E1" | | bgcolor="#DEDEDE" | | bgcolor="#D3D3D3" | | bgcolor="#BDBDBD" | | bgcolor="#A8A8A8" | | bgcolor="#CDCDCD" | | colspan="2" bgcolor="#D1D1D1" | | bgcolor="#E6E6E6" | | bgcolor="#E2E2E2" | | bgcolor="#D3D3D3" | | bgcolor="#E2E2E2" | | bgcolor="#DEDEDE" | | bgcolor="#E1E1E1" | | bgcolor="#E3E3E3" | | bgcolor="#E2E2E2" | | bgcolor="#DFDFDF" | | colspan="2" bgcolor="#DCDCDC" | | bgcolor="#DEDEDE" | | bgcolor="#C8C8C8" | | bgcolor="#A6A6A6" | | bgcolor="#BABABA" | | bgcolor="#C9C9C9" | | bgcolor="#D3D3D3" | | bgcolor="#DCDCDC" | | bgcolor="#DDDDDD" | | bgcolor="#D5D5D5" | | bgcolor="#DBDBDB" | | bgcolor="#F4F4F4" | | bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | colspan="2" bgcolor="#FFFFFF" | |- | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#CFCFCF" | | bgcolor="#DBDBDB" | | bgcolor="#E3E3E3" | | bgcolor="#DCDCDC" | | bgcolor="#CECECE" | | bgcolor="#B3B3B3" | | bgcolor="#AEAEAE" | | bgcolor="#CFCFCF" | | bgcolor="#D6D6D6" | | bgcolor="#D9D9D9" | | bgcolor="#E9E9E9" | | bgcolor="#E0E0E0" | | bgcolor="#D2D2D2" | | colspan="3" bgcolor="#E1E1E1" | | colspan="2" bgcolor="#E2E2E2" | | bgcolor="#DFDFDF" | | bgcolor="#DADADA" | | bgcolor="#D5D5D5" | | bgcolor="#D1D1D1" | | bgcolor="#ADADAD" | | bgcolor="#9A9A9A" | | bgcolor="#ACACAC" | | bgcolor="#BFBFBF" | | bgcolor="#D4D4D4" | | bgcolor="#E0E0E0" | | bgcolor="#DADADA" | | bgcolor="#DBDBDB" | | bgcolor="#DDDDDD" | | bgcolor="#F6F6F6" | | bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | colspan="2" bgcolor="#FFFFFF" | |- | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#CBCBCB" | | bgcolor="#DBDBDB" | | bgcolor="#DEDEDE" | | bgcolor="#D7D7D7" | | bgcolor="#C4C4C4" | | bgcolor="#A3A3A3" | | bgcolor="#A7A7A7" | | bgcolor="#CDCDCD" | | bgcolor="#DCDCDC" | | bgcolor="#DADADA" | | bgcolor="#E1E1E1" | | bgcolor="#DEDEDE" | | bgcolor="#D8D8D8" | | bgcolor="#E1E1E1" | | colspan="4" bgcolor="#E0E0E0" | | bgcolor="#DDDDDD" | | bgcolor="#D3D3D3" | | bgcolor="#C5C5C5" | | bgcolor="#BABABA" | | bgcolor="#A1A1A1" | | bgcolor="#9B9B9B" | | bgcolor="#A7A7A7" | | bgcolor="#BCBCBC" | | bgcolor="#D0D0D0" | | bgcolor="#E1E1E1" | | bgcolor="#D5D5D5" | | bgcolor="#E1E1E1" | | bgcolor="#DFDFDF" | | bgcolor="#F8F8F8" | | colspan="4" bgcolor="#FFFFFF" | |- | bgcolor="#FBFBFB" | | bgcolor="#FFFFFF" | | bgcolor="#C6C6C6" | | bgcolor="#D7D7D7" | | bgcolor="#D8D8D8" | | bgcolor="#D0D0D0" | | bgcolor="#BCBCBC" | | bgcolor="#959595" | | bgcolor="#989898" | | bgcolor="#C6C6C6" | | bgcolor="#DEDEDE" | | colspan="2" bgcolor="#D6D6D6" | | bgcolor="#DDDDDD" | | bgcolor="#DFDFDF" | | bgcolor="#E1E1E1" | | bgcolor="#DFDFDF" | | colspan="2" bgcolor="#DEDEDE" | | bgcolor="#E0E0E0" | | bgcolor="#DCDCDC" | | bgcolor="#CDCDCD" | | bgcolor="#B8B8B8" | | bgcolor="#A7A7A7" | | bgcolor="#B2B2B2" | | bgcolor="#B1B1B1" | | bgcolor="#B3B3B3" | | bgcolor="#C4C4C4" | | bgcolor="#CECECE" | | bgcolor="#DFDFDF" | | bgcolor="#CBCBCB" | | bgcolor="#DCDCDC" | | bgcolor="#E0E0E0" | | bgcolor="#F9F9F9" | | colspan="4" bgcolor="#FFFFFF" | |- | bgcolor="#FEFEFE" | | bgcolor="#FFFFFF" | | bgcolor="#C4C4C4" | | colspan="2" bgcolor="#D1D1D1" | | bgcolor="#D3D3D3" | | bgcolor="#A9A9A9" | | bgcolor="#9D9D9D" | | bgcolor="#9B9B9B" | | bgcolor="#B3B3B3" | | bgcolor="#D5D5D5" | | bgcolor="#E7E7E7" | | bgcolor="#E2E2E2" | | bgcolor="#D5D5D5" | | bgcolor="#D7D7D7" | | bgcolor="#E3E3E3" | | bgcolor="#DEDEDE" | | bgcolor="#E2E2E2" | | bgcolor="#E3E3E3" | | bgcolor="#D7D7D7" | | bgcolor="#BEBEBE" | | bgcolor="#ABABAB" | | bgcolor="#B2B2B2" | | bgcolor="#C4C4C4" | | bgcolor="#D9D9D9" | | bgcolor="#C6C6C6" | | bgcolor="#B2B2B2" | | bgcolor="#C6C6C6" | | bgcolor="#CBCBCB" | | bgcolor="#DBDBDB" | | bgcolor="#D3D3D3" | | bgcolor="#DBDBDB" | | bgcolor="#E8E8E8" | | bgcolor="#F7F7F7" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#FCFCFC" | | bgcolor="#FEFEFE" | |- | bgcolor="#FFFFFF" | | bgcolor="#FDFDFD" | | bgcolor="#CDCDCD" | | bgcolor="#DADADA" | | bgcolor="#DCDCDC" | | bgcolor="#CFCFCF" | | bgcolor="#9C9C9C" | | bgcolor="#969696" | | bgcolor="#9F9F9F" | | bgcolor="#A4A4A4" | | bgcolor="#B5B5B5" | | bgcolor="#CDCDCD" | | bgcolor="#DEDEDE" | | bgcolor="#E1E1E1" | | bgcolor="#DDDDDD" | | bgcolor="#DBDBDB" | | bgcolor="#DCDCDC" | | bgcolor="#D8D8D8" | | bgcolor="#CDCDCD" | | bgcolor="#BABABA" | | bgcolor="#ABABAB" | | bgcolor="#B3B3B3" | | bgcolor="#D3D3D3" | | bgcolor="#F3F3F3" | | bgcolor="#DCDCDC" | | bgcolor="#D0D0D0" | | bgcolor="#B5B5B5" | | bgcolor="#CACACA" | | bgcolor="#CDCDCD" | | bgcolor="#DADADA" | | colspan="2" bgcolor="#D9D9D9" | | bgcolor="#EFEFEF" | | bgcolor="#FBFBFB" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#FDFDFD" | | bgcolor="#FEFEFE" | |- | bgcolor="#FFFFFF" | | bgcolor="#F8F8F8" | | bgcolor="#D3D3D3" | | bgcolor="#DFDFDF" | | bgcolor="#E9E9E9" | | bgcolor="#CDCDCD" | | bgcolor="#A6A6A6" | | bgcolor="#9E9E9E" | | bgcolor="#CCCCCC" | | bgcolor="#B7B7B7" | | bgcolor="#A3A3A3" | | bgcolor="#A5A5A5" | | bgcolor="#B7B7B7" | | bgcolor="#CDCDCD" | | bgcolor="#DDDDDD" | | bgcolor="#E5E5E5" | | bgcolor="#D5D5D5" | | bgcolor="#CACACA" | | bgcolor="#C2C2C2" | | bgcolor="#CACACA" | | bgcolor="#DDDDDD" | | bgcolor="#E7E7E7" | | bgcolor="#DDDDDD" | | bgcolor="#CDCDCD" | | bgcolor="#DADADA" | | bgcolor="#D4D4D4" | | bgcolor="#ABABAB" | | bgcolor="#BEBEBE" | | bgcolor="#C3C3C3" | | bgcolor="#D0D0D0" | | bgcolor="#D7D7D7" | | bgcolor="#CECECE" | | bgcolor="#FAFAFA" | | colspan="3" bgcolor="#FFFFFF" | | bgcolor="#FDFDFD" | | bgcolor="#FEFEFE" | |- | bgcolor="#FFFFFF" | | bgcolor="#FCFCFC" | | bgcolor="#BEBEBE" | | bgcolor="#C8C8C8" | | bgcolor="#D7D7D7" | | bgcolor="#B8B8B8" | | bgcolor="#BEBEBE" | | bgcolor="#A5A5A5" | | bgcolor="#C2C2C2" | | bgcolor="#CACACA" | | bgcolor="#D3D3D3" | | bgcolor="#D6D6D6" | | bgcolor="#D1D1D1" | | bgcolor="#C7C7C7" | | bgcolor="#C2C2C2" | | bgcolor="#C0C0C0" | | bgcolor="#C9C9C9" | | bgcolor="#D5D5D5" | | bgcolor="#DEDEDE" | | bgcolor="#DDDDDD" | | bgcolor="#DBDBDB" | | bgcolor="#DDDDDD" | | bgcolor="#DEDEDE" | | bgcolor="#DCDCDC" | | bgcolor="#D4D4D4" | | bgcolor="#CECECE" | | bgcolor="#9F9F9F" | | bgcolor="#B6B6B6" | | bgcolor="#C2C2C2" | | bgcolor="#D4D4D4" | | bgcolor="#E0E0E0" | | bgcolor="#D0D0D0" | | colspan="3" bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | colspan="2" bgcolor="#FFFFFF" | |- | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#939393" | | bgcolor="#969696" | | bgcolor="#A0A0A0" | | bgcolor="#8A8A8A" | | bgcolor="#BFBFBF" | | bgcolor="#8E8E8E" | | bgcolor="#BDBDBD" | | bgcolor="#D0D0D0" | | bgcolor="#E1E1E1" | | bgcolor="#E0E0E0" | | bgcolor="#D3D3D3" | | bgcolor="#C9C9C9" | | bgcolor="#CACACA" | | bgcolor="#D0D0D0" | | bgcolor="#D2D2D2" | | bgcolor="#DADADA" | | bgcolor="#E0E0E0" | | bgcolor="#DEDEDE" | | bgcolor="#D8D8D8" | | bgcolor="#D4D4D4" | | bgcolor="#D1D1D1" | | bgcolor="#CECECE" | | bgcolor="#A7A7A7" | | bgcolor="#A3A3A3" | | bgcolor="#858585" | | bgcolor="#A9A9A9" | | bgcolor="#C0C0C0" | | bgcolor="#DADADA" | | bgcolor="#E2E2E2" | | bgcolor="#D6D6D6" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#FDFDFD" | | bgcolor="#FEFEFE" | | colspan="2" bgcolor="#FFFFFF" | |- | bgcolor="#FFFFFF" | | bgcolor="#FCFCFC" | | bgcolor="#767676" | | bgcolor="#727272" | | bgcolor="#6F6F6F" | | bgcolor="#696969" | | bgcolor="#A4A4A4" | | bgcolor="#6D6D6D" | | bgcolor="#8D8D8D" | | bgcolor="#A4A4A4" | | bgcolor="#BEBEBE" | | bgcolor="#CECECE" | | bgcolor="#D2D2D2" | | bgcolor="#D0D0D0" | | bgcolor="#CACACA" | | bgcolor="#C5C5C5" | | bgcolor="#E5E5E5" | | bgcolor="#D9D9D9" | | bgcolor="#D3D3D3" | | bgcolor="#DDDDDD" | | bgcolor="#E1E1E1" | | bgcolor="#CBCBCB" | | bgcolor="#A0A0A0" | | bgcolor="#7F7F7F" | | bgcolor="#7E7E7E" | | bgcolor="#787878" | | bgcolor="#797979" | | bgcolor="#A3A3A3" | | bgcolor="#BDBDBD" | | bgcolor="#DEDEDE" | | bgcolor="#DFDFDF" | | bgcolor="#E8E8E8" | | bgcolor="#FFFFFF" | | bgcolor="#FDFDFD" | | bgcolor="#FCFCFC" | | colspan="3" bgcolor="#FFFFFF" | |- | bgcolor="#FFFFFF" | | bgcolor="#E6E6E6" | | bgcolor="#717171" | | bgcolor="#707070" | | bgcolor="#626262" | | bgcolor="#6E6E6E" | | bgcolor="#868686" | | bgcolor="#5F5F5F" | | bgcolor="#8C8C8C" | | colspan="2" bgcolor="#8E8E8E" | | bgcolor="#8F8F8F" | | bgcolor="#9B9B9B" | | bgcolor="#AEAEAE" | | bgcolor="#BCBCBC" | | bgcolor="#C1C1C1" | | bgcolor="#C5C5C5" | | bgcolor="#C0C0C0" | | bgcolor="#BFBFBF" | | bgcolor="#B7B7B7" | | bgcolor="#9D9D9D" | | bgcolor="#808080" | | bgcolor="#7A7A7A" | | bgcolor="#858585" | | bgcolor="#808080" | | bgcolor="#6E6E6E" | | bgcolor="#808080" | | bgcolor="#9A9A9A" | | bgcolor="#A7A7A7" | | bgcolor="#CDCDCD" | | bgcolor="#CFCFCF" | | bgcolor="#FCFCFC" | | bgcolor="#FFFFFF" | | bgcolor="#FCFCFC" | | bgcolor="#FEFEFE" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#FCFCFC" | |- | bgcolor="#FDFDFD" | | bgcolor="#CACACA" | | bgcolor="#737373" | | bgcolor="#797979" | | bgcolor="#666666" | | bgcolor="#808080" | | bgcolor="#737373" | | bgcolor="#616161" | | bgcolor="#767676" | | bgcolor="#858585" | | bgcolor="#949494" | | bgcolor="#9A9A9A" | | colspan="2" bgcolor="#9B9B9B" | | bgcolor="#939393" | | bgcolor="#8A8A8A" | | bgcolor="#818181" | | bgcolor="#797979" | | bgcolor="#7B7B7B" | | bgcolor="#818181" | | bgcolor="#777777" | | bgcolor="#696969" | | bgcolor="#777777" | | bgcolor="#939393" | | bgcolor="#7C7C7C" | | bgcolor="#5C5C5C" | | bgcolor="#6F6F6F" | | bgcolor="#727272" | | bgcolor="#6D6D6D" | | bgcolor="#969696" | | bgcolor="#9E9E9E" | | bgcolor="#E8E8E8" | | bgcolor="#FFFFFF" | | bgcolor="#FDFDFD" | | colspan="3" bgcolor="#FFFFFF" | | bgcolor="#FAFAFA" | |- | bgcolor="#F9F9F9" | | bgcolor="#B3B3B3" | | bgcolor="#707070" | | bgcolor="#909090" | | bgcolor="#7C7C7C" | | bgcolor="#888888" | | bgcolor="#666666" | | bgcolor="#646464" | | bgcolor="#737373" | | bgcolor="#808080" | | bgcolor="#747474" | | bgcolor="#8E8E8E" | | bgcolor="#7B7B7B" | | bgcolor="#979797" | | bgcolor="#888888" | | bgcolor="#919191" | | bgcolor="#676767" | | bgcolor="#464646" | | bgcolor="#595959" | | bgcolor="#8D8D8D" | | bgcolor="#909090" | | bgcolor="#6F6F6F" | | bgcolor="#6A6A6A" | | bgcolor="#808080" | | bgcolor="#8D8D8D" | | bgcolor="#696969" | | bgcolor="#848484" | | bgcolor="#818181" | | bgcolor="#646464" | | bgcolor="#707070" | | bgcolor="#727272" | | bgcolor="#EDEDED" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | bgcolor="#FAFAFA" | | colspan="2" bgcolor="#FFFFFF" | |- | bgcolor="#FFFFFF" | | bgcolor="#C0C0C0" | | bgcolor="#9E9E9E" | | bgcolor="#B3B3B3" | | bgcolor="#878787" | | bgcolor="#8B8B8B" | | bgcolor="#7B7B7B" | | bgcolor="#646464" | | bgcolor="#6B6B6B" | | bgcolor="#727272" | | bgcolor="#5D5D5D" | | bgcolor="#767676" | | bgcolor="#777777" | | bgcolor="#A1A1A1" | | bgcolor="#8B8B8B" | | bgcolor="#7E7E7E" | | bgcolor="#5E5E5E" | | bgcolor="#515151" | | bgcolor="#676767" | | bgcolor="#898989" | | bgcolor="#878787" | | bgcolor="#777777" | | bgcolor="#808080" | | bgcolor="#939393" | | bgcolor="#838383" | | bgcolor="#757575" | | bgcolor="#8C8C8C" | | bgcolor="#828282" | | bgcolor="#707070" | | bgcolor="#6E6E6E" | | bgcolor="#6B6B6B" | | bgcolor="#C6C6C6" | | bgcolor="#F4F4F4" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#FCFCFC" | | colspan="2" bgcolor="#FFFFFF" | |- | bgcolor="#F6F6F6" | | bgcolor="#898989" | | bgcolor="#5B5B5B" | | bgcolor="#656565" | | bgcolor="#5E5E5E" | | bgcolor="#828282" | | bgcolor="#979797" | | bgcolor="#6F6F6F" | | bgcolor="#7A7A7A" | | bgcolor="#7E7E7E" | | bgcolor="#646464" | | bgcolor="#717171" | | bgcolor="#777777" | | bgcolor="#A2A2A2" | | bgcolor="#8A8A8A" | | bgcolor="#737373" | | bgcolor="#4E4E4E" | | bgcolor="#565656" | | bgcolor="#6F6F6F" | | bgcolor="#808080" | | bgcolor="#787878" | | bgcolor="#747474" | | bgcolor="#7F7F7F" | | bgcolor="#888888" | | bgcolor="#8C8C8C" | | bgcolor="#959595" | | bgcolor="#979797" | | bgcolor="#787878" | | bgcolor="#767676" | | colspan="2" bgcolor="#646464" | | bgcolor="#959595" | | bgcolor="#DFDFDF" | | bgcolor="#FBFBFB" | | bgcolor="#FFFFFF" | | colspan="2" bgcolor="#FEFEFE" | | bgcolor="#FFFFFF" | |- | bgcolor="#F2F2F2" | | bgcolor="#9D9D9D" | | bgcolor="#7D7D7D" | | bgcolor="#6B6B6B" | | bgcolor="#5F5F5F" | | bgcolor="#686868" | | bgcolor="#9A9A9A" | | bgcolor="#9D9D9D" | | colspan="2" bgcolor="#969696" | | bgcolor="#808080" | | bgcolor="#818181" | | bgcolor="#767676" | | bgcolor="#8A8A8A" | | bgcolor="#7D7D7D" | | bgcolor="#767676" | | bgcolor="#525252" | | bgcolor="#616161" | | bgcolor="#848484" | | bgcolor="#A0A0A0" | | bgcolor="#A7A7A7" | | bgcolor="#ADADAD" | | bgcolor="#B7B7B7" | | bgcolor="#B8B8B8" | | bgcolor="#A8A8A8" | | bgcolor="#B6B6B6" | | bgcolor="#9A9A9A" | | bgcolor="#656565" | | bgcolor="#6B6B6B" | | bgcolor="#555555" | | bgcolor="#606060" | | bgcolor="#737373" | | bgcolor="#CCCCCC" | | bgcolor="#F3F3F3" | | bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | bgcolor="#FDFDFD" | | bgcolor="#FFFFFF" | |- | bgcolor="#F5F5F5" | | bgcolor="#D4D4D4" | | bgcolor="#D1D1D1" | | bgcolor="#C4C4C4" | | bgcolor="#C0C0C0" | | bgcolor="#929292" | | bgcolor="#9F9F9F" | | bgcolor="#B5B5B5" | | bgcolor="#D4D4D4" | | bgcolor="#C8C8C8" | | bgcolor="#B7B7B7" | | bgcolor="#BABABA" | | bgcolor="#ACACAC" | | bgcolor="#ABABAB" | | bgcolor="#A7A7A7" | | bgcolor="#B2B2B2" | | bgcolor="#AAAAAA" | | bgcolor="#A3A3A3" | | bgcolor="#B3B3B3" | | colspan="2" bgcolor="#CCCCCC" | | bgcolor="#C0C0C0" | | bgcolor="#B7B7B7" | | bgcolor="#AFAFAF" | | bgcolor="#A3A3A3" | | bgcolor="#A8A8A8" | | bgcolor="#7E7E7E" | | bgcolor="#4C4C4C" | | bgcolor="#545454" | | bgcolor="#424242" | | bgcolor="#545454" | | bgcolor="#595959" | | bgcolor="#C6C6C6" | | bgcolor="#EEEEEE" | | bgcolor="#FFFFFF" | | colspan="2" bgcolor="#FCFCFC" | | bgcolor="#FFFFFF" | |- | bgcolor="#E8E8E8" | | bgcolor="#D7D7D7" | | bgcolor="#CFCFCF" | | bgcolor="#C7C7C7" | | bgcolor="#D8D8D8" | | bgcolor="#ADADAD" | | bgcolor="#A7A7A7" | | bgcolor="#BEBEBE" | | bgcolor="#D3D3D3" | | bgcolor="#BCBCBC" | | bgcolor="#B0B0B0" | | bgcolor="#BFBFBF" | | bgcolor="#C0C0C0" | | bgcolor="#BABABA" | | bgcolor="#B8B8B8" | | bgcolor="#C5C5C5" | | bgcolor="#ABABAB" | | bgcolor="#999999" | | bgcolor="#A4A4A4" | | bgcolor="#C2C2C2" | | bgcolor="#CACACA" | | bgcolor="#C2C2C2" | | bgcolor="#BDBDBD" | | bgcolor="#B9B9B9" | | bgcolor="#A2A2A2" | | bgcolor="#979797" | | bgcolor="#7D7D7D" | | bgcolor="#6C6C6C" | | bgcolor="#717171" | | bgcolor="#696969" | | bgcolor="#777777" | | bgcolor="#7A7A7A" | | bgcolor="#D3D3D3" | | bgcolor="#F1F1F1" | | bgcolor="#FFFFFF" | | bgcolor="#FBFBFB" | | bgcolor="#FEFEFE" | | bgcolor="#FFFFFF" | |- | bgcolor="#DFDFDF" | | bgcolor="#DBDBDB" | | bgcolor="#D0D0D0" | | bgcolor="#AEAEAE" | | bgcolor="#9A9A9A" | | bgcolor="#909090" | | bgcolor="#AFAFAF" | | bgcolor="#CFCFCF" | | bgcolor="#C9C9C9" | | bgcolor="#BCBCBC" | | bgcolor="#BABABA" | | bgcolor="#C7C7C7" | | bgcolor="#CFCFCF" | | bgcolor="#C9C9C9" | | bgcolor="#C8C8C8" | | bgcolor="#CDCDCD" | | bgcolor="#BABABA" | | bgcolor="#B0B0B0" | | bgcolor="#BBBBBB" | | bgcolor="#CECECE" | | bgcolor="#CACACA" | | bgcolor="#BFBFBF" | | bgcolor="#B9B9B9" | | bgcolor="#B4B4B4" | | bgcolor="#BABABA" | | bgcolor="#9B9B9B" | | bgcolor="#9C9C9C" | | bgcolor="#B7B7B7" | | bgcolor="#B4B4B4" | | bgcolor="#B9B9B9" | | bgcolor="#BEBEBE" | | bgcolor="#CBCBCB" | | bgcolor="#EBEBEB" | | bgcolor="#FBFBFB" | | bgcolor="#FFFFFF" | | bgcolor="#FCFCFC" | | colspan="2" bgcolor="#FFFFFF" | |- | bgcolor="#D9D9D9" | | bgcolor="#C3C3C3" | | bgcolor="#B5B5B5" | | bgcolor="#A1A1A1" | | bgcolor="#949494" | | bgcolor="#B3B3B3" | | bgcolor="#CFCFCF" | | bgcolor="#BFBFBF" | | bgcolor="#BBBBBB" | | bgcolor="#C0C0C0" | | bgcolor="#CACACA" | | bgcolor="#CCCCCC" | | bgcolor="#CBCBCB" | | bgcolor="#C3C3C3" | | bgcolor="#C4C4C4" | | bgcolor="#C5C5C5" | | bgcolor="#B3B3B3" | | bgcolor="#BCBCBC" | | bgcolor="#D4D4D4" | | bgcolor="#E2E2E2" | | bgcolor="#D9D9D9" | | bgcolor="#D0D0D0" | | bgcolor="#CCCCCC" | | bgcolor="#C5C5C5" | | bgcolor="#B2B2B2" | | bgcolor="#848484" | | bgcolor="#969696" | | bgcolor="#CBCBCB" | | bgcolor="#C3C3C3" | | bgcolor="#D2D2D2" | | bgcolor="#D1D1D1" | | bgcolor="#E9E9E9" | | bgcolor="#FEFEFE" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | colspan="2" bgcolor="#FFFFFF" | |- | bgcolor="#D4D4D4" | | bgcolor="#C8C8C8" | | bgcolor="#ADADAD" | | bgcolor="#8D8D8D" | | bgcolor="#A5A5A5" | | bgcolor="#D7D7D7" | | bgcolor="#DBDBDB" | | bgcolor="#D8D8D8" | | bgcolor="#D0D0D0" | | bgcolor="#CFCFCF" | | bgcolor="#CBCBCB" | | bgcolor="#C9C9C9" | | bgcolor="#CACACA" | | bgcolor="#CFCFCF" | | colspan="2" bgcolor="#D2D2D2" | | bgcolor="#B9B9B9" | | bgcolor="#BFBFBF" | | bgcolor="#CFCFCF" | | bgcolor="#D3D3D3" | | bgcolor="#C9C9C9" | | bgcolor="#C8C8C8" | | bgcolor="#D0D0D0" | | bgcolor="#D1D1D1" | | bgcolor="#A8A8A8" | | bgcolor="#9C9C9C" | | bgcolor="#A5A5A5" | | bgcolor="#929292" | | bgcolor="#909090" | | bgcolor="#9F9F9F" | | bgcolor="#AEAEAE" | | bgcolor="#E9E9E9" | | colspan="6" bgcolor="#FFFFFF" | |- | bgcolor="#D1D1D1" | | bgcolor="#C7C7C7" | | bgcolor="#AFAFAF" | | bgcolor="#909090" | | bgcolor="#8D8D8D" | | bgcolor="#BDBDBD" | | bgcolor="#C6C6C6" | | bgcolor="#CACACA" | | bgcolor="#C5C5C5" | | bgcolor="#BBBBBB" | | bgcolor="#BABABA" | | bgcolor="#C7C7C7" | | bgcolor="#D1D1D1" | | bgcolor="#CFCFCF" | | bgcolor="#CBCBCB" | | bgcolor="#CCCCCC" | | bgcolor="#AFAFAF" | | bgcolor="#B8B8B8" | | bgcolor="#D0D0D0" | | bgcolor="#DFDFDF" | | bgcolor="#DADADA" | | bgcolor="#D2D2D2" | | bgcolor="#CACACA" | | bgcolor="#BCBCBC" | | bgcolor="#A8A8A8" | | bgcolor="#949494" | | bgcolor="#979797" | | bgcolor="#9C9C9C" | | bgcolor="#C2C2C2" | | bgcolor="#D3D3D3" | | bgcolor="#BEBEBE" | | bgcolor="#DBDBDB" | | colspan="6" bgcolor="#FFFFFF" | |- | bgcolor="#D6D6D6" | | bgcolor="#C4C4C4" | | bgcolor="#B0B0B0" | | bgcolor="#9C9C9C" | | bgcolor="#828282" | | bgcolor="#ADADAD" | | bgcolor="#ABABAB" | | bgcolor="#A5A5A5" | | bgcolor="#B7B7B7" | | bgcolor="#BABABA" | | bgcolor="#C9C9C9" | | bgcolor="#D6D6D6" | | bgcolor="#CDCDCD" | | colspan="2" bgcolor="#BBBBBB" | | bgcolor="#CBCBCB" | | bgcolor="#C4C4C4" | | bgcolor="#C2C2C2" | | bgcolor="#CFCFCF" | | bgcolor="#DADADA" | | bgcolor="#D9D9D9" | | bgcolor="#D7D7D7" | | bgcolor="#CFCFCF" | | bgcolor="#C0C0C0" | | bgcolor="#999999" | | bgcolor="#9E9E9E" | | bgcolor="#ACACAC" | | bgcolor="#B4B4B4" | | bgcolor="#DDDDDD" | | bgcolor="#E3E3E3" | | bgcolor="#C4C4C4" | | bgcolor="#EBEBEB" | | colspan="6" bgcolor="#FFFFFF" | |- | bgcolor="#EAEAEA" | | bgcolor="#C5C5C5" | | bgcolor="#A8A8A8" | | bgcolor="#979797" | | bgcolor="#7E7E7E" | | colspan="2" bgcolor="#B4B4B4" | | bgcolor="#A3A3A3" | | bgcolor="#BEBEBE" | | bgcolor="#CACACA" | | bgcolor="#D8D8D8" | | bgcolor="#DBDBDB" | | bgcolor="#CCCCCC" | | bgcolor="#BABABA" | | bgcolor="#B5B5B5" | | bgcolor="#BBBBBB" | | bgcolor="#B5B5B5" | | bgcolor="#B0B0B0" | | bgcolor="#B8B8B8" | | colspan="2" bgcolor="#C1C1C1" | | bgcolor="#C4C4C4" | | bgcolor="#C3C3C3" | | bgcolor="#B8B8B8" | | bgcolor="#A0A0A0" | | bgcolor="#B9B9B9" | | bgcolor="#C9C9C9" | | bgcolor="#C1C1C1" | | bgcolor="#D9D9D9" | | bgcolor="#D4D4D4" | | bgcolor="#BFBFBF" | | bgcolor="#FEFEFE" | | colspan="6" bgcolor="#FFFFFF" | |- | bgcolor="#FEFEFE" | | bgcolor="#D5D5D5" | | bgcolor="#B1B1B1" | | bgcolor="#8F8F8F" | | bgcolor="#797979" | | bgcolor="#B9B9B9" | | bgcolor="#CFCFCF" | | bgcolor="#C6C6C6" | | bgcolor="#C8C8C8" | | bgcolor="#CBCBCB" | | colspan="2" bgcolor="#C8C8C8" | | bgcolor="#D3D3D3" | | bgcolor="#D9D9D9" | | bgcolor="#C4C4C4" | | bgcolor="#A5A5A5" | | bgcolor="#9B9B9B" | | bgcolor="#A6A6A6" | | bgcolor="#C2C2C2" | | bgcolor="#D9D9D9" | | bgcolor="#DDDDDD" | | bgcolor="#DCDCDC" | | bgcolor="#D8D8D8" | | bgcolor="#CBCBCB" | | bgcolor="#C5C5C5" | | bgcolor="#CFCFCF" | | bgcolor="#CECECE" | | bgcolor="#C0C0C0" | | bgcolor="#DBDBDB" | | bgcolor="#D8D8D8" | | bgcolor="#BEBEBE" | | bgcolor="#F7F7F7" | | colspan="6" bgcolor="#FFFFFF" | |- | bgcolor="#FFFFFF" | | bgcolor="#F0F0F0" | | bgcolor="#DFDFDF" | | bgcolor="#A2A2A2" | | bgcolor="#8A8A8A" | | bgcolor="#B1B1B1" | | bgcolor="#CACACA" | | bgcolor="#C2C2C2" | | bgcolor="#B4B4B4" | | bgcolor="#C0C0C0" | | bgcolor="#C3C3C3" | | bgcolor="#C0C0C0" | | bgcolor="#D0D0D0" | | bgcolor="#E3E3E3" | | bgcolor="#D4D4D4" | | bgcolor="#B2B2B2" | | bgcolor="#767676" | | bgcolor="#898989" | | bgcolor="#B0B0B0" | | bgcolor="#CECECE" | | bgcolor="#D5D5D5" | | colspan="2" bgcolor="#D9D9D9" | | bgcolor="#D1D1D1" | | bgcolor="#D7D7D7" | | bgcolor="#D8D8D8" | | bgcolor="#D9D9D9" | | bgcolor="#CBCBCB" | | bgcolor="#E0E0E0" | | bgcolor="#DEDEDE" | | bgcolor="#C5C5C5" | | bgcolor="#F5F5F5" | | colspan="6" bgcolor="#FFFFFF" | |- | bgcolor="#FBFBFB" | | bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | bgcolor="#A9A9A9" | | bgcolor="#9E9E9E" | | bgcolor="#ADADAD" | | bgcolor="#BCBCBC" | | bgcolor="#A9A9A9" | | bgcolor="#ABABAB" | | bgcolor="#C3C3C3" | | bgcolor="#D2D2D2" | | bgcolor="#CFCFCF" | | bgcolor="#D1D1D1" | | bgcolor="#D9D9D9" | | bgcolor="#D5D5D5" | | bgcolor="#C6C6C6" | | bgcolor="#919191" | | bgcolor="#9C9C9C" | | bgcolor="#B9B9B9" | | bgcolor="#D1D1D1" | | bgcolor="#D7D7D7" | | bgcolor="#DFDFDF" | | bgcolor="#E7E7E7" | | bgcolor="#E3E3E3" | | colspan="2" bgcolor="#D8D8D8" | | bgcolor="#E6E6E6" | | bgcolor="#DADADA" | | bgcolor="#DEDEDE" | | bgcolor="#DCDCDC" | | bgcolor="#CECECE" | | bgcolor="#FCFCFC" | | colspan="6" bgcolor="#FFFFFF" | |- | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#F5F5F5" | | bgcolor="#8F8F8F" | | bgcolor="#9D9D9D" | | bgcolor="#B1B1B1" | | bgcolor="#C6C6C6" | | bgcolor="#AFAFAF" | | bgcolor="#C4C4C4" | | bgcolor="#CECECE" | | bgcolor="#D7D7D7" | | bgcolor="#DCDCDC" | | bgcolor="#DEDEDE" | | bgcolor="#DCDCDC" | | bgcolor="#D0D0D0" | | bgcolor="#C2C2C2" | | bgcolor="#A7A7A7" | | bgcolor="#AEAEAE" | | bgcolor="#C5C5C5" | | bgcolor="#D8D8D8" | | bgcolor="#DBDBDB" | | bgcolor="#DDDDDD" | | bgcolor="#DEDEDE" | | bgcolor="#D5D5D5" | | bgcolor="#E1E1E1" | | bgcolor="#D4D4D4" | | bgcolor="#E1E1E1" | | bgcolor="#DADADA" | | bgcolor="#DEDEDE" | | bgcolor="#E3E3E3" | | bgcolor="#D7D7D7" | | bgcolor="#FAFAFA" | | colspan="6" bgcolor="#FFFFFF" | |- | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#EBEBEB" | | bgcolor="#8C8C8C" | | bgcolor="#828282" | | bgcolor="#BDBDBD" | | bgcolor="#D1D1D1" | | bgcolor="#D0D0D0" | | bgcolor="#D4D4D4" | | bgcolor="#D9D9D9" | | bgcolor="#DBDBDB" | | bgcolor="#D7D7D7" | | bgcolor="#D4D4D4" | | bgcolor="#D2D2D2" | | bgcolor="#CACACA" | | bgcolor="#C0C0C0" | | bgcolor="#9F9F9F" | | bgcolor="#C5C5C5" | | bgcolor="#A9A9A9" | | bgcolor="#E2E2E2" | | bgcolor="#D8D8D8" | | bgcolor="#DDDDDD" | | colspan="2" bgcolor="#DADADA" | | bgcolor="#D5D5D5" | | bgcolor="#DFDFDF" | | bgcolor="#E4E4E4" | | bgcolor="#E0E0E0" | | bgcolor="#EAEAEA" | | bgcolor="#DDDDDD" | | bgcolor="#D1D1D1" | | bgcolor="#FCFCFC" | | colspan="6" bgcolor="#FFFFFF" | |- | bgcolor="#FDFDFD" | | bgcolor="#FCFCFC" | | bgcolor="#E8E8E8" | | bgcolor="#838383" | | bgcolor="#949494" | | bgcolor="#C8C8C8" | | bgcolor="#D9D9D9" | | colspan="2" bgcolor="#D5D5D5" | | bgcolor="#DADADA" | | bgcolor="#DCDCDC" | | bgcolor="#D9D9D9" | | bgcolor="#D7D7D7" | | bgcolor="#D6D6D6" | | bgcolor="#D1D1D1" | | bgcolor="#C9C9C9" | | bgcolor="#A3A3A3" | | bgcolor="#C9C9C9" | | bgcolor="#B2B2B2" | | colspan="2" bgcolor="#D8D8D8" | | bgcolor="#DADADA" | | bgcolor="#DBDBDB" | | bgcolor="#D6D6D6" | | bgcolor="#D7D7D7" | | bgcolor="#DADADA" | | bgcolor="#D9D9D9" | | bgcolor="#D2D2D2" | | bgcolor="#DDDDDD" | | bgcolor="#D6D6D6" | | bgcolor="#CFCFCF" | | bgcolor="#F9F9F9" | | colspan="6" bgcolor="#FFFFFF" | |- | bgcolor="#FDFDFD" | | bgcolor="#FEFEFE" | | bgcolor="#E9E9E9" | | bgcolor="#777777" | | bgcolor="#ADADAD" | | bgcolor="#D0D0D0" | | bgcolor="#DCDCDC" | | bgcolor="#D7D7D7" | | bgcolor="#D4D4D4" | | bgcolor="#D8D8D8" | | bgcolor="#DADADA" | | bgcolor="#D8D8D8" | | colspan="2" bgcolor="#D7D7D7" | | bgcolor="#D4D4D4" | | bgcolor="#D0D0D0" | | bgcolor="#A6A6A6" | | bgcolor="#CDCDCD" | | bgcolor="#BFBFBF" | | bgcolor="#C9C9C9" | | bgcolor="#D9D9D9" | | bgcolor="#D7D7D7" | | bgcolor="#DCDCDC" | | bgcolor="#D1D1D1" | | bgcolor="#D5D5D5" | | bgcolor="#D3D3D3" | | bgcolor="#D2D2D2" | | bgcolor="#CDCDCD" | | bgcolor="#D9D9D9" | | bgcolor="#D6D6D6" | | bgcolor="#CECECE" | | bgcolor="#EFEFEF" | | colspan="6" bgcolor="#FFFFFF" | |- | bgcolor="#FEFEFE" | | bgcolor="#FFFFFF" | | bgcolor="#F0F0F0" | | bgcolor="#707070" | | bgcolor="#BDBDBD" | | bgcolor="#D0D0D0" | | bgcolor="#D8D8D8" | | bgcolor="#D3D3D3" | | bgcolor="#D2D2D2" | | bgcolor="#D4D4D4" | | bgcolor="#D6D6D6" | | bgcolor="#D4D4D4" | | bgcolor="#D3D3D3" | | bgcolor="#D2D2D2" | | bgcolor="#D1D1D1" | | bgcolor="#D0D0D0" | | bgcolor="#A6A6A6" | | bgcolor="#CFCFCF" | | bgcolor="#C9C9C9" | | bgcolor="#BBBBBB" | | bgcolor="#DADADA" | | bgcolor="#D7D7D7" | | bgcolor="#DEDEDE" | | colspan="2" bgcolor="#CFCFCF" | | bgcolor="#CDCDCD" | | bgcolor="#D4D4D4" | | bgcolor="#D7D7D7" | | bgcolor="#E3E3E3" | | bgcolor="#DFDFDF" | | bgcolor="#CFCFCF" | | bgcolor="#E2E2E2" | | colspan="6" bgcolor="#FFFFFF" | |} </div> |} </div> <div style="position:fixed; width=20000; height=2000; left:76%; top:10%; overflow:visible;"> {| align="center" cellpadding="0" cellspacing="2" padding="10px" style="background: white; margin:25px; text-align:center; font-size:255%;" |<div class="jpg"> {| | colspan="8" bgcolor="#FFFFFF" | | bgcolor="#FCFCFC" | | bgcolor="#FFFFFF" | | bgcolor="#F7F7F7" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#F3F3F3" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#FAFAFA" | | bgcolor="#E4E4E4" | | bgcolor="#DADADA" | | bgcolor="#C4C4C4" | | colspan="2" bgcolor="#9F9F9F" | | bgcolor="#C0C0C0" | | bgcolor="#D3D3D3" | | bgcolor="#EFEFEF" | | bgcolor="#FFFFFF" | | colspan="2" bgcolor="#FEFEFE" | | bgcolor="#FDFDFD" | | bgcolor="#FFFFFF" | | bgcolor="#F4F4F4" | | colspan="10" bgcolor="#FFFFFF" | |- | colspan="8" bgcolor="#FFFFFF" | | bgcolor="#FDFDFD" | | bgcolor="#FFFFFF" | | bgcolor="#F8F8F8" | | colspan="4" bgcolor="#FFFFFF" | | bgcolor="#ECECEC" | | bgcolor="#C1C1C1" | | bgcolor="#868686" | | bgcolor="#606060" | | bgcolor="#565656" | | bgcolor="#4D4D4D" | | bgcolor="#575757" | | bgcolor="#6C6C6C" | | bgcolor="#717171" | | bgcolor="#B1B1B1" | | bgcolor="#E6E6E6" | | bgcolor="#FAFAFA" | | colspan="3" bgcolor="#FFFFFF" | | bgcolor="#F8F8F8" | | colspan="10" bgcolor="#FFFFFF" | |- | colspan="10" bgcolor="#FFFFFF" | | bgcolor="#FAFAFA" | | colspan="3" bgcolor="#FFFFFF" | | bgcolor="#F8F8F8" | | bgcolor="#BFBFBF" | | bgcolor="#747474" | | bgcolor="#404040" | | bgcolor="#313131" | | bgcolor="#3F3F3F" | | bgcolor="#3B3B3B" | | bgcolor="#393939" | | bgcolor="#4A4A4A" | | bgcolor="#545454" | | bgcolor="#717171" | | bgcolor="#B0B0B0" | | bgcolor="#E8E8E8" | | colspan="3" bgcolor="#FFFFFF" | | bgcolor="#FDFDFD" | | colspan="10" bgcolor="#FFFFFF" | |- | colspan="9" bgcolor="#FFFFFF" | | bgcolor="#FDFDFD" | | bgcolor="#FEFEFE" | | bgcolor="#FFFFFF" | | bgcolor="#FDFDFD" | | bgcolor="#FFFFFF" | | bgcolor="#D8D8D8" | | bgcolor="#868686" | | bgcolor="#454545" | | bgcolor="#262626" | | bgcolor="#373737" | | bgcolor="#5E5E5E" | | bgcolor="#5A5A5A" | | bgcolor="#4A4A4A" | | bgcolor="#515151" | | bgcolor="#5C5C5C" | | bgcolor="#585858" | | bgcolor="#828282" | | bgcolor="#C4C4C4" | | bgcolor="#F7F7F7" | | colspan="2" bgcolor="#FDFDFD" | | colspan="11" bgcolor="#FFFFFF" | |- | colspan="9" bgcolor="#FFFFFF" | | bgcolor="#FCFCFC" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#FDFDFD" | | bgcolor="#F5F5F5" | | bgcolor="#B3B3B3" | | bgcolor="#616161" | | bgcolor="#565656" | | bgcolor="#333333" | | bgcolor="#434343" | | bgcolor="#777777" | | bgcolor="#898989" | | bgcolor="#7D7D7D" | | bgcolor="#6B6B6B" | | bgcolor="#575757" | | bgcolor="#5B5B5B" | | bgcolor="#626262" | | bgcolor="#999999" | | bgcolor="#DEDEDE" | | colspan="13" bgcolor="#FFFFFF" | |- | colspan="8" bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | bgcolor="#FCFCFC" | | colspan="3" bgcolor="#FFFFFF" | | bgcolor="#E6E6E6" | | bgcolor="#969696" | | bgcolor="#5C5C5C" | | bgcolor="#616161" | | bgcolor="#565656" | | bgcolor="#797979" | | bgcolor="#B1B1B1" | | bgcolor="#C5C5C5" | | bgcolor="#BABABA" | | bgcolor="#999999" | | bgcolor="#6F6F6F" | | bgcolor="#646464" | | bgcolor="#575757" | | bgcolor="#7A7A7A" | | bgcolor="#BEBEBE" | | colspan="3" bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | colspan="9" bgcolor="#FFFFFF" | |- | colspan="8" bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#FCFCFC" | | bgcolor="#FEFEFE" | | bgcolor="#D3D3D3" | | bgcolor="#7E7E7E" | | bgcolor="#676767" | | bgcolor="#4E4E4E" | | bgcolor="#6F6F6F" | | bgcolor="#AFAFAF" | | bgcolor="#DBDBDB" | | bgcolor="#DCDCDC" | | bgcolor="#D2D2D2" | | bgcolor="#BCBCBC" | | bgcolor="#969696" | | bgcolor="#717171" | | bgcolor="#626262" | | bgcolor="#6D6D6D" | | bgcolor="#989898" | | bgcolor="#EFEFEF" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | colspan="9" bgcolor="#FFFFFF" | |- | colspan="11" bgcolor="#FFFFFF" | | bgcolor="#F7F7F7" | | bgcolor="#FAFAFA" | | bgcolor="#C2C2C2" | | bgcolor="#6C6C6C" | | bgcolor="#6F6F6F" | | bgcolor="#5D5D5D" | | bgcolor="#878787" | | bgcolor="#C3C3C3" | | bgcolor="#DBDBDB" | | bgcolor="#D3D3D3" | | bgcolor="#D7D7D7" | | bgcolor="#D2D2D2" | | bgcolor="#B4B4B4" | | bgcolor="#7D7D7D" | | bgcolor="#747474" | | bgcolor="#6B6B6B" | | bgcolor="#7A7A7A" | | bgcolor="#D8D8D8" | | bgcolor="#F7F7F7" | | colspan="11" bgcolor="#FFFFFF" | |- | colspan="8" bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | bgcolor="#FDFDFD" | | bgcolor="#FBFBFB" | | bgcolor="#FFFFFF" | | bgcolor="#F8F8F8" | | bgcolor="#B3B3B3" | | bgcolor="#757575" | | bgcolor="#6E6E6E" | | bgcolor="#656565" | | bgcolor="#919191" | | bgcolor="#CBCBCB" | | bgcolor="#D3D3D3" | | bgcolor="#D2D2D2" | | bgcolor="#DCDCDC" | | bgcolor="#C7C7C7" | | bgcolor="#B1B1B1" | | bgcolor="#868686" | | bgcolor="#777777" | | bgcolor="#707070" | | bgcolor="#7D7D7D" | | bgcolor="#ACACAC" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#FBFBFB" | | colspan="9" bgcolor="#FFFFFF" | |- | colspan="9" bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | bgcolor="#FBFBFB" | | bgcolor="#FFFFFF" | | bgcolor="#F6F6F6" | | bgcolor="#B2B2B2" | | bgcolor="#767676" | | bgcolor="#6F6F6F" | | bgcolor="#686868" | | bgcolor="#939393" | | bgcolor="#BEBEBE" | | bgcolor="#CFCFCF" | | bgcolor="#DCDCDC" | | bgcolor="#BFBFBF" | | bgcolor="#767676" | | bgcolor="#5C5C5C" | | bgcolor="#7B7B7B" | | bgcolor="#737373" | | bgcolor="#757575" | | bgcolor="#7C7C7C" | | bgcolor="#939393" | | bgcolor="#E8E8E8" | | colspan="11" bgcolor="#FFFFFF" | |- | colspan="10" bgcolor="#FFFFFF" | | bgcolor="#FBFBFB" | | bgcolor="#FFFFFF" | | bgcolor="#F4F4F4" | | bgcolor="#B0B0B0" | | bgcolor="#767676" | | bgcolor="#727272" | | bgcolor="#717171" | | bgcolor="#7B7B7B" | | bgcolor="#787878" | | bgcolor="#818181" | | bgcolor="#B2B2B2" | | bgcolor="#B6B6B6" | | bgcolor="#949494" | | bgcolor="#A8A8A8" | | bgcolor="#A4A4A4" | | bgcolor="#868686" | | bgcolor="#777777" | | bgcolor="#787878" | | bgcolor="#868686" | | bgcolor="#DFDFDF" | | bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | colspan="9" bgcolor="#FFFFFF" | |- | colspan="10" bgcolor="#FFFFFF" | | bgcolor="#FBFBFB" | | bgcolor="#FFFFFF" | | bgcolor="#F2F2F2" | | bgcolor="#AFAFAF" | | bgcolor="#777777" | | bgcolor="#747474" | | colspan="2" bgcolor="#727272" | | bgcolor="#777777" | | bgcolor="#818181" | | bgcolor="#A8A8A8" | | bgcolor="#BDBDBD" | | bgcolor="#B8B8B8" | | bgcolor="#D1D1D1" | | bgcolor="#CECECE" | | bgcolor="#9E9E9E" | | bgcolor="#7C7C7C" | | bgcolor="#777777" | | bgcolor="#7C7C7C" | | bgcolor="#D5D5D5" | | bgcolor="#FFFFFF" | | bgcolor="#F5F5F5" | | colspan="9" bgcolor="#FFFFFF" | |- | colspan="10" bgcolor="#FFFFFF" | | bgcolor="#FCFCFC" | | bgcolor="#FFFFFF" | | bgcolor="#F1F1F1" | | bgcolor="#AEAEAE" | | bgcolor="#777777" | | bgcolor="#767676" | | bgcolor="#717171" | | bgcolor="#7C7C7C" | | bgcolor="#ADADAD" | | bgcolor="#BCBCBC" | | bgcolor="#B2B2B2" | | bgcolor="#BEBEBE" | | bgcolor="#BFBFBF" | | bgcolor="#BABABA" | | bgcolor="#C8C8C8" | | bgcolor="#A6A6A6" | | bgcolor="#818181" | | bgcolor="#767676" | | bgcolor="#6B6B6B" | | bgcolor="#BFBFBF" | | colspan="11" bgcolor="#FFFFFF" | |- | colspan="10" bgcolor="#FFFFFF" | | bgcolor="#FDFDFD" | | bgcolor="#FFFFFF" | | bgcolor="#F0F0F0" | | bgcolor="#ADADAD" | | colspan="2" bgcolor="#767676" | | bgcolor="#787878" | | bgcolor="#7F7F7F" | | bgcolor="#BCBCBC" | | bgcolor="#C9C9C9" | | bgcolor="#ABABAB" | | bgcolor="#BDBDBD" | | bgcolor="#D4D4D4" | | bgcolor="#D1D1D1" | | bgcolor="#C9C9C9" | | bgcolor="#ADADAD" | | bgcolor="#7B7B7B" | | bgcolor="#6F6F6F" | | bgcolor="#6B6B6B" | | bgcolor="#BABABA" | | bgcolor="#FCFCFC" | | bgcolor="#FEFEFE" | | colspan="9" bgcolor="#FFFFFF" | |- | colspan="8" bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | bgcolor="#FFFFFF" | | bgcolor="#F1F1F1" | | bgcolor="#ADADAD" | | colspan="2" bgcolor="#767676" | | bgcolor="#7A7A7A" | | bgcolor="#7F7F7F" | | bgcolor="#B4B4B4" | | bgcolor="#C9C9C9" | | bgcolor="#B7B7B7" | | bgcolor="#B5B5B5" | | bgcolor="#B8B8B8" | | bgcolor="#BDBDBD" | | bgcolor="#C9C9C9" | | bgcolor="#B7B7B7" | | bgcolor="#7A7A7A" | | bgcolor="#6D6D6D" | | bgcolor="#727272" | | bgcolor="#B7B7B7" | | bgcolor="#F3F3F3" | | bgcolor="#F8F8F8" | | colspan="9" bgcolor="#FFFFFF" | |- | colspan="8" bgcolor="#FFFFFF" | | bgcolor="#FDFDFD" | | bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | bgcolor="#FFFFFF" | | bgcolor="#F2F2F2" | | bgcolor="#ADADAD" | | bgcolor="#767676" | | bgcolor="#757575" | | bgcolor="#777777" | | bgcolor="#797979" | | bgcolor="#9D9D9D" | | bgcolor="#B9B9B9" | | bgcolor="#BEBEBE" | | bgcolor="#A8A8A8" | | bgcolor="#929292" | | bgcolor="#A5A5A5" | | bgcolor="#ADADAD" | | bgcolor="#B7B7B7" | | bgcolor="#868686" | | bgcolor="#727272" | | bgcolor="#6A6A6A" | | bgcolor="#A4A4A4" | | bgcolor="#ECECEC" | | colspan="10" bgcolor="#FFFFFF" | |- | colspan="10" bgcolor="#FFFFFF" | | bgcolor="#F6F6F6" | | bgcolor="#F5F5F5" | | bgcolor="#F4F4F4" | | bgcolor="#B8B8B8" | | bgcolor="#767676" | | bgcolor="#6C6C6C" | | bgcolor="#6D6D6D" | | bgcolor="#7B7B7B" | | bgcolor="#7C7C7C" | | bgcolor="#AFAFAF" | | bgcolor="#B7B7B7" | | bgcolor="#989898" | | bgcolor="#B7B7B7" | | bgcolor="#C4C4C4" | | bgcolor="#C3C3C3" | | bgcolor="#ACACAC" | | bgcolor="#7D7D7D" | | bgcolor="#777777" | | bgcolor="#6E6E6E" | | bgcolor="#969696" | | bgcolor="#F6F6F6" | | bgcolor="#FFFFFF" | | bgcolor="#F9F9F9" | | colspan="4" bgcolor="#FFFFFF" | | bgcolor="#FBFBFB" | | bgcolor="#F9F9F9" | | colspan="2" bgcolor="#FFFFFF" | |- | colspan="8" bgcolor="#FFFFFF" | | bgcolor="#F5F5F5" | | bgcolor="#FBFBFB" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#FDFDFD" | | bgcolor="#AEAEAE" | | bgcolor="#707070" | | bgcolor="#767676" | | bgcolor="#797979" | | bgcolor="#696969" | | bgcolor="#404040" | | bgcolor="#6C6C6C" | | bgcolor="#A6A6A6" | | bgcolor="#B6B6B6" | | colspan="2" bgcolor="#D3D3D3" | | bgcolor="#B2B2B2" | | bgcolor="#A5A5A5" | | bgcolor="#7F7F7F" | | bgcolor="#7D7D7D" | | bgcolor="#797979" | | bgcolor="#969696" | | bgcolor="#ECECEC" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#FBFBFB" | | bgcolor="#F0F0F0" | | bgcolor="#F6F6F6" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | colspan="2" bgcolor="#FFFFFF" | |- | colspan="10" bgcolor="#FFFFFF" | | bgcolor="#F8F8F8" | | bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | bgcolor="#B7B7B7" | | bgcolor="#747474" | | bgcolor="#6A6A6A" | | bgcolor="#7B7B7B" | | bgcolor="#727272" | | bgcolor="#303030" | | bgcolor="#353535" | | bgcolor="#727272" | | bgcolor="#969696" | | bgcolor="#B7B7B7" | | bgcolor="#BDBDBD" | | bgcolor="#C5C5C5" | | bgcolor="#BDBDBD" | | bgcolor="#909090" | | bgcolor="#7D7D7D" | | bgcolor="#6F6F6F" | | bgcolor="#7F7F7F" | | bgcolor="#D4D4D4" | | bgcolor="#FFFFFF" | | bgcolor="#F5F5F5" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#FDFDFD" | | bgcolor="#F8F8F8" | | bgcolor="#FEFEFE" | | bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | bgcolor="#FFFFFF" | |- | colspan="8" bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | colspan="3" bgcolor="#FFFFFF" | | bgcolor="#E8E8E8" | | bgcolor="#B0B0B0" | | bgcolor="#7E7E7E" | | bgcolor="#717171" | | bgcolor="#696969" | | bgcolor="#7B7B7B" | | bgcolor="#424242" | | bgcolor="#2F2F2F" | | bgcolor="#656565" | | bgcolor="#939393" | | bgcolor="#B5B5B5" | | bgcolor="#C6C6C6" | | bgcolor="#C2C2C2" | | bgcolor="#BDBDBD" | | bgcolor="#949494" | | bgcolor="#7B7B7B" | | bgcolor="#6B6B6B" | | bgcolor="#727272" | | bgcolor="#BDBDBD" | | bgcolor="#FEFEFE" | | bgcolor="#FFFFFF" | | bgcolor="#F5F5F5" | | bgcolor="#EDEDED" | | bgcolor="#FEFEFE" | | bgcolor="#FFFFFF" | | bgcolor="#FAFAFA" | | bgcolor="#F4F4F4" | | colspan="2" bgcolor="#FFFFFF" | |- | colspan="8" bgcolor="#FFFFFF" | | bgcolor="#FDFDFD" | | bgcolor="#FBFBFB" | | bgcolor="#FDFDFD" | | bgcolor="#FFFFFF" | | bgcolor="#F7F7F7" | | bgcolor="#C2C2C2" | | bgcolor="#868686" | | bgcolor="#696969" | | bgcolor="#6B6B6B" | | bgcolor="#777777" | | bgcolor="#3F3F3F" | | bgcolor="#282828" | | bgcolor="#6B6B6B" | | bgcolor="#AAAAAA" | | bgcolor="#C4C4C4" | | bgcolor="#CECECE" | | bgcolor="#D1D1D1" | | bgcolor="#C1C1C1" | | bgcolor="#9A9A9A" | | bgcolor="#858585" | | bgcolor="#737373" | | bgcolor="#636363" | | bgcolor="#777777" | | bgcolor="#939393" | | bgcolor="#E5E5E5" | | colspan="5" bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | colspan="2" bgcolor="#FFFFFF" | |- | colspan="9" bgcolor="#FFFFFF" | | bgcolor="#FCFCFC" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#EBEBEB" | | bgcolor="#B0B0B0" | | bgcolor="#7C7C7C" | | bgcolor="#656565" | | bgcolor="#737373" | | bgcolor="#717171" | | bgcolor="#3F3F3F" | | bgcolor="#242424" | | bgcolor="#5A5A5A" | | bgcolor="#9B9B9B" | | bgcolor="#B9B9B9" | | bgcolor="#C7C7C7" | | bgcolor="#DDDDDD" | | bgcolor="#BABABA" | | bgcolor="#959595" | | bgcolor="#828282" | | bgcolor="#717171" | | bgcolor="#545454" | | bgcolor="#343434" | | bgcolor="#1D1D1D" | | bgcolor="#626262" | | bgcolor="#BABABA" | | bgcolor="#F9F9F9" | | bgcolor="#FBFBFB" | | bgcolor="#F7F7F7" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#FCFCFC" | | bgcolor="#FFFFFF" | |- | colspan="8" bgcolor="#FFFFFF" | | bgcolor="#F6F6F6" | | bgcolor="#FFFFFF" | | bgcolor="#FAFAFA" | | bgcolor="#BBBBBB" | | bgcolor="#737373" | | bgcolor="#5E5E5E" | | bgcolor="#707070" | | bgcolor="#7D7D7D" | | bgcolor="#6D6D6D" | | bgcolor="#696969" | | bgcolor="#4B4B4B" | | bgcolor="#2B2B2B" | | bgcolor="#3B3B3B" | | bgcolor="#636363" | | bgcolor="#7C7C7C" | | bgcolor="#8F8F8F" | | bgcolor="#787878" | | bgcolor="#666666" | | bgcolor="#6E6E6E" | | bgcolor="#757575" | | bgcolor="#696969" | | bgcolor="#575757" | | bgcolor="#323232" | | bgcolor="#080808" | | colspan="2" bgcolor="#0A0A0A" | | bgcolor="#373737" | | bgcolor="#9A9A9A" | | bgcolor="#EDEDED" | | bgcolor="#FCFCFC" | | bgcolor="#F6F6F6" | | colspan="2" bgcolor="#FFFFFF" | |- | colspan="9" bgcolor="#FFFFFF" | | bgcolor="#F4F4F4" | | bgcolor="#9E9E9E" | | bgcolor="#272727" | | bgcolor="#070707" | | bgcolor="#4F4F4F" | | bgcolor="#7D7D7D" | | bgcolor="#666666" | | bgcolor="#787878" | | bgcolor="#656565" | | bgcolor="#484848" | | bgcolor="#1F1F1F" | | colspan="2" bgcolor="#0C0C0C" | | bgcolor="#020202" | | bgcolor="#000000" | | bgcolor="#010101" | | bgcolor="#161616" | | bgcolor="#595959" | | bgcolor="#797979" | | bgcolor="#656565" | | bgcolor="#515151" | | bgcolor="#2C2C2C" | | colspan="2" bgcolor="#000000" | | bgcolor="#010101" | | bgcolor="#000000" | | bgcolor="#232323" | | bgcolor="#929292" | | bgcolor="#F8F8F8" | | bgcolor="#FFFFFF" | | bgcolor="#F3F3F3" | | bgcolor="#FFFFFF" | |- | bgcolor="#FAFAFA" | | bgcolor="#FFFFFF" | | bgcolor="#FAFAFA" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#F6F6F6" | | bgcolor="#FDFDFD" | | bgcolor="#FFFFFF" | | bgcolor="#F3F3F3" | | bgcolor="#E2E2E2" | | bgcolor="#2E2E2E" | | bgcolor="#020202" | | bgcolor="#151515" | | bgcolor="#525252" | | colspan="2" bgcolor="#6D6D6D" | | bgcolor="#707070" | | bgcolor="#606060" | | bgcolor="#3E3E3E" | | bgcolor="#111111" | | bgcolor="#0A0A0A" | | bgcolor="#111111" | | bgcolor="#010101" | | bgcolor="#000000" | | bgcolor="#101010" | | bgcolor="#1A1A1A" | | bgcolor="#4E4E4E" | | bgcolor="#777777" | | bgcolor="#656565" | | bgcolor="#3F3F3F" | | bgcolor="#242424" | | bgcolor="#0F0F0F" | | bgcolor="#000000" | | bgcolor="#010101" | | bgcolor="#020202" | | bgcolor="#000000" | | bgcolor="#1E1E1E" | | bgcolor="#929292" | | colspan="3" bgcolor="#FFFFFF" | |- | bgcolor="#FAFAFA" | | bgcolor="#FFFFFF" | | colspan="2" bgcolor="#FBFBFB" | | bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | bgcolor="#FFFFFF" | | bgcolor="#F8F8F8" | | bgcolor="#FFFFFF" | | bgcolor="#919191" | | bgcolor="#131313" | | bgcolor="#000000" | | bgcolor="#1C1C1C" | | bgcolor="#585858" | | bgcolor="#747474" | | bgcolor="#727272" | | bgcolor="#6F6F6F" | | bgcolor="#616161" | | bgcolor="#323232" | | bgcolor="#0A0A0A" | | bgcolor="#070707" | | bgcolor="#0F0F0F" | | bgcolor="#101010" | | bgcolor="#0B0B0B" | | bgcolor="#0D0D0D" | | bgcolor="#121212" | | bgcolor="#494949" | | bgcolor="#727272" | | bgcolor="#585858" | | bgcolor="#383838" | | bgcolor="#272727" | | bgcolor="#0D0D0D" | | bgcolor="#050505" | | colspan="3" bgcolor="#000000" | | bgcolor="#040404" | | bgcolor="#393939" | | bgcolor="#ABABAB" | | bgcolor="#FEFEFE" | | bgcolor="#FFFFFF" | |- | bgcolor="#FDFDFD" | | bgcolor="#FFFFFF" | | bgcolor="#FAFAFA" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#FCFCFC" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#DCDCDC" | | bgcolor="#282828" | | colspan="2" bgcolor="#000000" | | bgcolor="#383838" | | bgcolor="#676767" | | bgcolor="#777777" | | bgcolor="#6B6B6B" | | bgcolor="#6E6E6E" | | bgcolor="#636363" | | bgcolor="#202020" | | colspan="2" bgcolor="#000000" | | bgcolor="#060606" | | bgcolor="#1D1D1D" | | bgcolor="#161616" | | bgcolor="#0B0B0B" | | bgcolor="#090909" | | bgcolor="#454545" | | bgcolor="#6D6D6D" | | bgcolor="#4A4A4A" | | bgcolor="#333333" | | bgcolor="#2D2D2D" | | bgcolor="#0D0D0D" | | bgcolor="#060606" | | colspan="2" bgcolor="#000000" | | bgcolor="#060606" | | colspan="2" bgcolor="#000000" | | bgcolor="#5D5D5D" | | bgcolor="#EDEDED" | | bgcolor="#FFFFFF" | |- | bgcolor="#FFFFFF" | | bgcolor="#FDFDFD" | | bgcolor="#F9F9F9" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#F5F5F5" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#919191" | | colspan="2" bgcolor="#000000" | | bgcolor="#131313" | | bgcolor="#4E4E4E" | | bgcolor="#6D6D6D" | | bgcolor="#767676" | | colspan="2" bgcolor="#686868" | | bgcolor="#5F5F5F" | | bgcolor="#131313" | | bgcolor="#000000" | | bgcolor="#020202" | | bgcolor="#070707" | | bgcolor="#2D2D2D" | | bgcolor="#252525" | | bgcolor="#090909" | | bgcolor="#040404" | | bgcolor="#454545" | | bgcolor="#6B6B6B" | | bgcolor="#414141" | | bgcolor="#323232" | | bgcolor="#353535" | | bgcolor="#0E0E0E" | | bgcolor="#000000" | | bgcolor="#030303" | | bgcolor="#000000" | | bgcolor="#040404" | | colspan="2" bgcolor="#000000" | | bgcolor="#343434" | | bgcolor="#C7C7C7" | | bgcolor="#FFFFFF" | |- | bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | bgcolor="#FAFAFA" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#FCFCFC" | | bgcolor="#F7F7F7" | | bgcolor="#D3D3D3" | | bgcolor="#383838" | | bgcolor="#000000" | | bgcolor="#040404" | | bgcolor="#2C2C2C" | | bgcolor="#515151" | | bgcolor="#676767" | | bgcolor="#747474" | | bgcolor="#6E6E6E" | | bgcolor="#646464" | | bgcolor="#5B5B5B" | | bgcolor="#111111" | | bgcolor="#000000" | | bgcolor="#090909" | | bgcolor="#0E0E0E" | | bgcolor="#333333" | | bgcolor="#2C2C2C" | | bgcolor="#070707" | | bgcolor="#030303" | | bgcolor="#424242" | | bgcolor="#646464" | | bgcolor="#3C3C3C" | | bgcolor="#343434" | | bgcolor="#383838" | | bgcolor="#0F0F0F" | | bgcolor="#000000" | | bgcolor="#080808" | | bgcolor="#000000" | | bgcolor="#030303" | | bgcolor="#020202" | | bgcolor="#000000" | | bgcolor="#1A1A1A" | | bgcolor="#AFAFAF" | | bgcolor="#FFFFFF" | |- | bgcolor="#FBFBFB" | | bgcolor="#FFFFFF" | | bgcolor="#FCFCFC" | | bgcolor="#F8F8F8" | | bgcolor="#FCFCFC" | | bgcolor="#FFFFFF" | | bgcolor="#F2F2F2" | | bgcolor="#9C9C9C" | | colspan="3" bgcolor="#000000" | | bgcolor="#424242" | | bgcolor="#595959" | | bgcolor="#656565" | | bgcolor="#6E6E6E" | | bgcolor="#696969" | | bgcolor="#6B6B6B" | | bgcolor="#5A5A5A" | | bgcolor="#181818" | | bgcolor="#000000" | | bgcolor="#030303" | | bgcolor="#040404" | | bgcolor="#161616" | | bgcolor="#101010" | | bgcolor="#060606" | | bgcolor="#070707" | | bgcolor="#3C3C3C" | | bgcolor="#575757" | | bgcolor="#393939" | | bgcolor="#363636" | | bgcolor="#383838" | | bgcolor="#111111" | | bgcolor="#000000" | | bgcolor="#010101" | | bgcolor="#000000" | | bgcolor="#090909" | | bgcolor="#030303" | | bgcolor="#000000" | | bgcolor="#131313" | | bgcolor="#BDBDBD" | | bgcolor="#FFFFFF" | |- | bgcolor="#FDFDFD" | | bgcolor="#FFFFFF" | | bgcolor="#FDFDFD" | | bgcolor="#FAFAFA" | | bgcolor="#F7F7F7" | | bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | bgcolor="#B5B5B5" | | bgcolor="#434343" | | bgcolor="#151515" | | bgcolor="#090909" | | bgcolor="#505050" | | bgcolor="#626262" | | bgcolor="#636363" | | bgcolor="#676767" | | bgcolor="#5F5F5F" | | bgcolor="#6E6E6E" | | bgcolor="#535353" | | bgcolor="#1E1E1E" | | colspan="5" bgcolor="#000000" | | bgcolor="#0D0D0D" | | bgcolor="#121212" | | bgcolor="#373737" | | bgcolor="#4A4A4A" | | bgcolor="#393939" | | bgcolor="#3A3A3A" | | bgcolor="#393939" | | bgcolor="#191919" | | colspan="3" bgcolor="#000000" | | bgcolor="#0A0A0A" | | bgcolor="#000000" | | bgcolor="#020202" | | bgcolor="#131313" | | bgcolor="#BABABA" | | bgcolor="#FEFEFE" | |- | bgcolor="#FFFFFF" | | bgcolor="#F7F7F7" | | bgcolor="#FCFCFC" | | bgcolor="#FFFFFF" | | colspan="2" bgcolor="#F7F7F7" | | bgcolor="#FFFFFF" | | bgcolor="#FAFAFA" | | bgcolor="#D7D7D7" | | bgcolor="#505050" | | bgcolor="#232323" | | bgcolor="#505050" | | bgcolor="#5B5B5B" | | bgcolor="#595959" | | bgcolor="#656565" | | bgcolor="#626262" | | bgcolor="#656565" | | bgcolor="#464646" | | bgcolor="#1D1D1D" | | colspan="2" bgcolor="#000000" | | bgcolor="#0A0A0A" | | bgcolor="#000000" | | bgcolor="#050505" | | bgcolor="#151515" | | bgcolor="#1C1C1C" | | bgcolor="#373737" | | bgcolor="#444444" | | bgcolor="#3B3B3B" | | bgcolor="#3F3F3F" | | bgcolor="#3C3C3C" | | bgcolor="#222222" | | bgcolor="#000000" | | bgcolor="#090909" | | bgcolor="#000000" | | bgcolor="#020202" | | bgcolor="#000000" | | bgcolor="#080808" | | bgcolor="#0A0A0A" | | bgcolor="#949494" | | bgcolor="#FCFCFC" | |- | bgcolor="#FCFCFC" | | colspan="3" bgcolor="#FFFFFF" | | bgcolor="#FDFDFD" | | bgcolor="#FBFBFB" | | bgcolor="#FCFCFC" | | bgcolor="#FEFEFE" | | bgcolor="#F8F8F8" | | bgcolor="#B8B8B8" | | bgcolor="#898989" | | bgcolor="#575757" | | bgcolor="#707070" | | bgcolor="#535353" | | bgcolor="#575757" | | bgcolor="#4A4A4A" | | bgcolor="#595959" | | bgcolor="#383838" | | bgcolor="#131313" | | bgcolor="#010101" | | colspan="2" bgcolor="#000000" | | colspan="2" bgcolor="#010101" | | bgcolor="#0B0B0B" | | bgcolor="#222222" | | colspan="2" bgcolor="#414141" | | bgcolor="#2F2F2F" | | bgcolor="#373737" | | bgcolor="#3C3C3C" | | bgcolor="#252525" | | bgcolor="#0B0B0B" | | colspan="3" bgcolor="#000000" | | bgcolor="#050505" | | bgcolor="#010101" | | bgcolor="#000000" | | bgcolor="#515151" | | bgcolor="#EFEFEF" | |- | bgcolor="#FCFCFC" | | colspan="3" bgcolor="#FFFFFF" | | bgcolor="#FDFDFD" | | bgcolor="#FCFCFC" | | bgcolor="#FDFDFD" | | bgcolor="#FFFFFF" | | bgcolor="#F6F6F6" | | bgcolor="#B1B1B1" | | bgcolor="#9A9A9A" | | bgcolor="#737373" | | bgcolor="#6E6E6E" | | bgcolor="#4F4F4F" | | bgcolor="#575757" | | bgcolor="#373737" | | bgcolor="#4E4E4E" | | bgcolor="#313131" | | bgcolor="#101010" | | colspan="3" bgcolor="#000000" | | bgcolor="#010101" | | bgcolor="#000000" | | bgcolor="#0C0C0C" | | bgcolor="#101010" | | bgcolor="#202020" | | bgcolor="#2D2D2D" | | bgcolor="#363636" | | bgcolor="#484848" | | bgcolor="#404040" | | bgcolor="#1B1B1B" | | bgcolor="#000000" | | bgcolor="#030303" | | colspan="2" bgcolor="#0B0B0B" | | bgcolor="#191919" | | bgcolor="#212121" | | bgcolor="#3F3F3F" | | bgcolor="#909090" | | bgcolor="#F5F5F5" | |- | bgcolor="#FDFDFD" | | colspan="2" bgcolor="#FEFEFE" | | bgcolor="#FDFDFD" | | colspan="2" bgcolor="#FCFCFC" | | bgcolor="#FEFEFE" | | bgcolor="#FFFFFF" | | bgcolor="#F1F1F1" | | bgcolor="#ACACAC" | | bgcolor="#A6A6A6" | | bgcolor="#868686" | | bgcolor="#656565" | | bgcolor="#454545" | | bgcolor="#515151" | | bgcolor="#232323" | | bgcolor="#3C3C3C" | | bgcolor="#242424" | | bgcolor="#0A0A0A" | | colspan="5" bgcolor="#000000" | | bgcolor="#070707" | | bgcolor="#000000" | | bgcolor="#070707" | | bgcolor="#191919" | | bgcolor="#313131" | | bgcolor="#444444" | | bgcolor="#373737" | | bgcolor="#121212" | | bgcolor="#1B1B1B" | | bgcolor="#515151" | | bgcolor="#6D6D6D" | | bgcolor="#7E7E7E" | | bgcolor="#888888" | | bgcolor="#8C8C8C" | | bgcolor="#BDBDBD" | | bgcolor="#F5F5F5" | | bgcolor="#FDFDFD" | |- | colspan="3" bgcolor="#FDFDFD" | | colspan="2" bgcolor="#FCFCFC" | | bgcolor="#FDFDFD" | | bgcolor="#FEFEFE" | | bgcolor="#FFFFFF" | | bgcolor="#E2E2E2" | | bgcolor="#ADADAD" | | bgcolor="#A3A3A3" | | bgcolor="#818181" | | bgcolor="#5C5C5C" | | bgcolor="#3C3C3C" | | bgcolor="#3E3E3E" | | bgcolor="#191919" | | bgcolor="#282828" | | bgcolor="#161616" | | bgcolor="#040404" | | colspan="7" bgcolor="#000000" | | bgcolor="#060606" | | bgcolor="#111111" | | bgcolor="#1C1C1C" | | bgcolor="#232323" | | bgcolor="#1D1D1D" | | bgcolor="#101010" | | bgcolor="#5C5C5C" | | bgcolor="#B1B1B1" | | bgcolor="#CACACA" | | bgcolor="#D3D3D3" | | bgcolor="#C4C4C4" | | bgcolor="#B8B8B8" | | bgcolor="#EAEAEA" | | colspan="2" bgcolor="#FFFFFF" | |- | colspan="2" bgcolor="#FDFDFD" | | colspan="2" bgcolor="#FCFCFC" | | colspan="4" bgcolor="#FDFDFD" | | bgcolor="#CACACA" | | bgcolor="#B2B2B2" | | bgcolor="#9D9D9D" | | bgcolor="#787878" | | bgcolor="#5F5F5F" | | bgcolor="#373737" | | bgcolor="#242424" | | bgcolor="#131313" | | bgcolor="#171717" | | bgcolor="#0A0A0A" | | colspan="7" bgcolor="#000000" | | bgcolor="#010101" | | bgcolor="#070707" | | bgcolor="#0A0A0A" | | bgcolor="#090909" | | bgcolor="#040404" | | bgcolor="#070707" | | bgcolor="#101010" | | bgcolor="#747474" | | bgcolor="#C7C7C7" | | bgcolor="#CDCDCD" | | bgcolor="#C3C3C3" | | bgcolor="#ACACAC" | | bgcolor="#AEAEAE" | | bgcolor="#F3F3F3" | | bgcolor="#FEFEFE" | | bgcolor="#FFFFFF" | |- | bgcolor="#FEFEFE" | | bgcolor="#FDFDFD" | | bgcolor="#FCFCFC" | | bgcolor="#FDFDFD" | | bgcolor="#FEFEFE" | | bgcolor="#FDFDFD" | | bgcolor="#FBFBFB" | | bgcolor="#F9F9F9" | | colspan="2" bgcolor="#B5B5B5" | | bgcolor="#A3A3A3" | | bgcolor="#7F7F7F" | | bgcolor="#5E5E5E" | | bgcolor="#303030" | | bgcolor="#111111" | | bgcolor="#090909" | | bgcolor="#0B0B0B" | | bgcolor="#030303" | | colspan="2" bgcolor="#000000" | | bgcolor="#010101" | | colspan="4" bgcolor="#000000" | | bgcolor="#010101" | | colspan="2" bgcolor="#000000" | | bgcolor="#040404" | | colspan="2" bgcolor="#000000" | | bgcolor="#161616" | | bgcolor="#808080" | | colspan="2" bgcolor="#C4C4C4" | | bgcolor="#B4B4B4" | | bgcolor="#A6A6A6" | | bgcolor="#C0C0C0" | | colspan="3" bgcolor="#FFFFFF" | |- | bgcolor="#FEFEFE" | | colspan="2" bgcolor="#FDFDFD" | | bgcolor="#FEFEFE" | | bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | bgcolor="#F9F9F9" | | bgcolor="#F5F5F5" | | bgcolor="#B3B3B3" | | bgcolor="#B2B2B2" | | bgcolor="#AEAEAE" | | bgcolor="#8A8A8A" | | bgcolor="#484848" | | bgcolor="#1C1C1C" | | bgcolor="#0B0B0B" | | bgcolor="#000000" | | bgcolor="#050505" | | colspan="3" bgcolor="#000000" | | bgcolor="#010101" | | colspan="3" bgcolor="#000000" | | bgcolor="#030303" | | bgcolor="#020202" | | colspan="2" bgcolor="#000000" | | bgcolor="#050505" | | bgcolor="#000000" | | bgcolor="#040404" | | bgcolor="#252525" | | bgcolor="#9F9F9F" | | bgcolor="#CFCFCF" | | bgcolor="#CECECE" | | bgcolor="#B8B8B8" | | bgcolor="#ADADAD" | | bgcolor="#CECECE" | | bgcolor="#FFFFFF" | | bgcolor="#F1F1F1" | | bgcolor="#FFFFFF" | |- | bgcolor="#FEFEFE" | | bgcolor="#FDFDFD" | | bgcolor="#FEFEFE" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | bgcolor="#F7F7F7" | | bgcolor="#F2F2F2" | | bgcolor="#BBBBBB" | | bgcolor="#AEAEAE" | | bgcolor="#B4B4B4" | | bgcolor="#8F8F8F" | | bgcolor="#2C2C2C" | | bgcolor="#080808" | | bgcolor="#0D0D0D" | | bgcolor="#000000" | | bgcolor="#030303" | | colspan="2" bgcolor="#000000" | | colspan="2" bgcolor="#010101" | | colspan="2" bgcolor="#000000" | | colspan="2" bgcolor="#010101" | | bgcolor="#050505" | | colspan="2" bgcolor="#000000" | | bgcolor="#030303" | | bgcolor="#000000" | | bgcolor="#060606" | | bgcolor="#343434" | | bgcolor="#A3A3A3" | | colspan="2" bgcolor="#C4C4C4" | | bgcolor="#AFAFAF" | | bgcolor="#B0B0B0" | | bgcolor="#E1E1E1" | | bgcolor="#FFFFFF" | | bgcolor="#FDFDFD" | | bgcolor="#FFFFFF" | |- | bgcolor="#FEFEFE" | | bgcolor="#F4F4F4" | | bgcolor="#FFFFFF" | | bgcolor="#FCFCFC" | | bgcolor="#FFFFFF" | | bgcolor="#F9F9F9" | | bgcolor="#FDFDFD" | | bgcolor="#DBDBDB" | | bgcolor="#B4B4B4" | | bgcolor="#C4C4C4" | | bgcolor="#ADADAD" | | bgcolor="#A3A3A3" | | colspan="2" bgcolor="#000000" | | bgcolor="#0C0C0C" | | colspan="11" bgcolor="#000000" | | bgcolor="#050505" | | bgcolor="#020202" | | bgcolor="#000000" | | bgcolor="#020202" | | bgcolor="#000000" | | bgcolor="#5E5E5E" | | bgcolor="#ADADAD" | | bgcolor="#C8C8C8" | | bgcolor="#CACACA" | | bgcolor="#A2A2A2" | | bgcolor="#BEBEBE" | | bgcolor="#F9F9F9" | | bgcolor="#FBFBFB" | | colspan="2" bgcolor="#FFFFFF" | |- | bgcolor="#FFFFFF" | | bgcolor="#F8F8F8" | | bgcolor="#FFFFFF" | | colspan="2" bgcolor="#FCFCFC" | | bgcolor="#FDFDFD" | | bgcolor="#F6F6F6" | | bgcolor="#D2D2D2" | | bgcolor="#B4B4B4" | | bgcolor="#BDBDBD" | | bgcolor="#B8B8B8" | | bgcolor="#777777" | | colspan="2" bgcolor="#000000" | | bgcolor="#080808" | | bgcolor="#010101" | | colspan="9" bgcolor="#000000" | | colspan="2" bgcolor="#020202" | | colspan="3" bgcolor="#000000" | | bgcolor="#020202" | | bgcolor="#767676" | | bgcolor="#B7B7B7" | | bgcolor="#C8C8C8" | | bgcolor="#C5C5C5" | | bgcolor="#A9A9A9" | | bgcolor="#CBCBCB" | | bgcolor="#FFFFFF" | | bgcolor="#FDFDFD" | | colspan="2" bgcolor="#FFFFFF" | |- | bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | bgcolor="#FAFAFA" | | bgcolor="#FDFDFD" | | bgcolor="#F9F9F9" | | bgcolor="#FFFFFF" | | bgcolor="#E9E9E9" | | bgcolor="#C3C3C3" | | bgcolor="#AFAFAF" | | bgcolor="#B8B8B8" | | bgcolor="#BBBBBB" | | bgcolor="#444444" | | bgcolor="#020202" | | bgcolor="#000000" | | bgcolor="#020202" | | bgcolor="#060606" | | colspan="8" bgcolor="#000000" | | bgcolor="#010101" | | bgcolor="#030303" | | colspan="2" bgcolor="#000000" | | bgcolor="#030303" | | bgcolor="#000000" | | bgcolor="#121212" | | bgcolor="#979797" | | bgcolor="#C3C3C3" | | bgcolor="#C7C7C7" | | bgcolor="#BEBEBE" | | bgcolor="#B4B4B4" | | bgcolor="#DDDDDD" | | bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | colspan="2" bgcolor="#FFFFFF" | |- | bgcolor="#FEFEFE" | | bgcolor="#FFFFFF" | | bgcolor="#F5F5F5" | | bgcolor="#FFFFFF" | | bgcolor="#F8F8F8" | | bgcolor="#FFFFFF" | | bgcolor="#D8D8D8" | | bgcolor="#B3B3B3" | | bgcolor="#ABABAB" | | bgcolor="#BBBBBB" | | bgcolor="#A0A0A0" | | bgcolor="#242424" | | bgcolor="#090909" | | colspan="11" bgcolor="#000000" | | colspan="2" bgcolor="#010101" | | colspan="2" bgcolor="#000000" | | bgcolor="#050505" | | bgcolor="#000000" | | bgcolor="#262626" | | bgcolor="#AFAFAF" | | bgcolor="#C9C9C9" | | bgcolor="#C7C7C7" | | bgcolor="#BABABA" | | bgcolor="#C1C1C1" | | bgcolor="#ECECEC" | | bgcolor="#FFFFFF" | | bgcolor="#FDFDFD" | | colspan="2" bgcolor="#FFFFFF" | |- | bgcolor="#FBFBFB" | | bgcolor="#FFFFFF" | | bgcolor="#F6F6F6" | | bgcolor="#FFFFFF" | | bgcolor="#FAFAFA" | | bgcolor="#F5F5F5" | | bgcolor="#C6C6C6" | | bgcolor="#ABABAB" | | bgcolor="#B1B1B1" | | bgcolor="#B7B7B7" | | bgcolor="#686868" | | bgcolor="#111111" | | bgcolor="#070707" | | bgcolor="#000000" | | bgcolor="#050505" | | colspan="13" bgcolor="#000000" | | bgcolor="#050505" | | bgcolor="#010101" | | bgcolor="#404040" | | bgcolor="#B9B9B9" | | bgcolor="#C9C9C9" | | bgcolor="#C8C8C8" | | bgcolor="#BABABA" | | bgcolor="#CCCCCC" | | bgcolor="#F5F5F5" | | bgcolor="#FFFFFF" | | bgcolor="#FCFCFC" | | colspan="2" bgcolor="#FFFFFF" | |- | bgcolor="#FBFBFB" | | bgcolor="#FFFFFF" | | bgcolor="#FAFAFA" | | bgcolor="#FFFFFF" | | bgcolor="#FAFAFA" | | bgcolor="#DFDFDF" | | bgcolor="#B7B7B7" | | bgcolor="#ADADAD" | | bgcolor="#B7B7B7" | | bgcolor="#969696" | | bgcolor="#2E2E2E" | | bgcolor="#020202" | | colspan="2" bgcolor="#000000" | | bgcolor="#090909" | | colspan="11" bgcolor="#000000" | | bgcolor="#030303" | | bgcolor="#000000" | | bgcolor="#020202" | | bgcolor="#0F0F0F" | | bgcolor="#646464" | | bgcolor="#BDBDBD" | | bgcolor="#C8C8C8" | | bgcolor="#CACACA" | | bgcolor="#BABABA" | | bgcolor="#D3D3D3" | | bgcolor="#FAFAFA" | | bgcolor="#FBFBFB" | | bgcolor="#FDFDFD" | | colspan="2" bgcolor="#FFFFFF" | |- | colspan="2" bgcolor="#FEFEFE" | | bgcolor="#FFFFFF" | | bgcolor="#FDFDFD" | | bgcolor="#F7F7F7" | | bgcolor="#C6C6C6" | | bgcolor="#AEAEAE" | | bgcolor="#B8B8B8" | | bgcolor="#AEAEAE" | | bgcolor="#575757" | | bgcolor="#0C0C0C" | | bgcolor="#000000" | | bgcolor="#010101" | | bgcolor="#000000" | | bgcolor="#050505" | | bgcolor="#030303" | | colspan="8" bgcolor="#000000" | | bgcolor="#030303" | | bgcolor="#000000" | | bgcolor="#080808" | | colspan="2" bgcolor="#000000" | | bgcolor="#222222" | | bgcolor="#8B8B8B" | | bgcolor="#C2C2C2" | | bgcolor="#C9C9C9" | | bgcolor="#CDCDCD" | | bgcolor="#B8B8B8" | | bgcolor="#D5D5D5" | | colspan="2" bgcolor="#FDFDFD" | | colspan="3" bgcolor="#FFFFFF" | |- | bgcolor="#FFFFFF" | | bgcolor="#FDFDFD" | | bgcolor="#FFFFFF" | | bgcolor="#F8F8F8" | | bgcolor="#F4F4F4" | | bgcolor="#B6B6B6" | | bgcolor="#A9A9A9" | | bgcolor="#C1C1C1" | | bgcolor="#9E9E9E" | | bgcolor="#212121" | | bgcolor="#020202" | | bgcolor="#000000" | | bgcolor="#0A0A0A" | | colspan="2" bgcolor="#000000" | | bgcolor="#010101" | | colspan="8" bgcolor="#000000" | | bgcolor="#060606" | | bgcolor="#000000" | | bgcolor="#0C0C0C" | | colspan="2" bgcolor="#000000" | | bgcolor="#303030" | | bgcolor="#A6A6A6" | | bgcolor="#C6C6C6" | | bgcolor="#CCCCCC" | | bgcolor="#CFCFCF" | | bgcolor="#B6B6B6" | | bgcolor="#D4D4D4" | | colspan="3" bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | bgcolor="#FFFFFF" | |- | bgcolor="#FFFFFF" | | bgcolor="#EFEFEF" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#D6D6D6" | | bgcolor="#ADADAD" | | bgcolor="#C9C9C9" | | bgcolor="#B3B3B3" | | bgcolor="#333333" | | bgcolor="#101010" | | colspan="2" bgcolor="#000000" | | bgcolor="#060606" | | colspan="2" bgcolor="#000000" | | bgcolor="#060606" | | colspan="8" bgcolor="#010101" | | bgcolor="#020202" | | bgcolor="#000000" | | bgcolor="#050505" | | bgcolor="#070707" | | bgcolor="#000000" | | bgcolor="#595959" | | bgcolor="#ABABAB" | | bgcolor="#D1D1D1" | | colspan="2" bgcolor="#C7C7C7" | | bgcolor="#B6B6B6" | | bgcolor="#D3D3D3" | | bgcolor="#FDFDFD" | | bgcolor="#FEFEFE" | | bgcolor="#FDFDFD" | | colspan="2" bgcolor="#FFFFFF" | |- | bgcolor="#FBFBFB" | | bgcolor="#FFFFFF" | | bgcolor="#FBFBFB" | | bgcolor="#F0F0F0" | | bgcolor="#B8B8B8" | | bgcolor="#B3B3B3" | | bgcolor="#C3C3C3" | | bgcolor="#7F7F7F" | | bgcolor="#191919" | | bgcolor="#050505" | | colspan="2" bgcolor="#000000" | | bgcolor="#030303" | | colspan="2" bgcolor="#000000" | | bgcolor="#060606" | | colspan="9" bgcolor="#010101" | | colspan="2" bgcolor="#000000" | | bgcolor="#0C0C0C" | | bgcolor="#292929" | | bgcolor="#8B8B8B" | | bgcolor="#BABABA" | | bgcolor="#BFBFBF" | | bgcolor="#C8C8C8" | | bgcolor="#CACACA" | | bgcolor="#B7B7B7" | | bgcolor="#D0D0D0" | | bgcolor="#F9F9F9" | | colspan="2" bgcolor="#FEFEFE" | | colspan="2" bgcolor="#FFFFFF" | |- | bgcolor="#F5F5F5" | | bgcolor="#FFFFFF" | | bgcolor="#F8F8F8" | | bgcolor="#F0F0F0" | | bgcolor="#B1B1B1" | | bgcolor="#C0C0C0" | | bgcolor="#B2B2B2" | | bgcolor="#474747" | | bgcolor="#010101" | | colspan="6" bgcolor="#000000" | | bgcolor="#040404" | | colspan="8" bgcolor="#010101" | | bgcolor="#020202" | | colspan="2" bgcolor="#000000" | | bgcolor="#010101" | | bgcolor="#202020" | | bgcolor="#888888" | | bgcolor="#B5B5B5" | | bgcolor="#C5C5C5" | | bgcolor="#C8C8C8" | | bgcolor="#CDCDCD" | | bgcolor="#B8B8B8" | | bgcolor="#CBCBCB" | | bgcolor="#F5F5F5" | | bgcolor="#FEFEFE" | | bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | bgcolor="#FFFFFF" | |- | bgcolor="#FDFDFD" | | bgcolor="#FBFBFB" | | bgcolor="#F5F5F5" | | bgcolor="#E1E1E1" | | bgcolor="#B1B1B1" | | bgcolor="#BEBEBE" | | bgcolor="#959595" | | bgcolor="#2C2C2C" | | bgcolor="#000000" | | bgcolor="#020202" | | bgcolor="#040404" | | bgcolor="#020202" | | bgcolor="#000000" | | colspan="2" bgcolor="#010101" | | bgcolor="#000000" | | colspan="8" bgcolor="#010101" | | bgcolor="#000000" | | bgcolor="#090909" | | bgcolor="#060606" | | bgcolor="#000000" | | bgcolor="#131313" | | bgcolor="#7E7E7E" | | bgcolor="#ABABAB" | | bgcolor="#CDCDCD" | | bgcolor="#C8C8C8" | | bgcolor="#CECECE" | | bgcolor="#B9B9B9" | | bgcolor="#C9C9C9" | | bgcolor="#F2F2F2" | | bgcolor="#FEFEFE" | | bgcolor="#FFFFFF" | | bgcolor="#FDFDFD" | | bgcolor="#FFFFFF" | |- | bgcolor="#FFFFFF" | | bgcolor="#F1F1F1" | | bgcolor="#FCFCFC" | | bgcolor="#C2C2C2" | | bgcolor="#AFAFAF" | | bgcolor="#B9B9B9" | | bgcolor="#7B7B7B" | | bgcolor="#1A1A1A" | | bgcolor="#010101" | | bgcolor="#040404" | | bgcolor="#030303" | | colspan="2" bgcolor="#000000" | | bgcolor="#040404" | | bgcolor="#020202" | | bgcolor="#000000" | | colspan="8" bgcolor="#010101" | | colspan="4" bgcolor="#000000" | | bgcolor="#3D3D3D" | | bgcolor="#ABABAB" | | bgcolor="#B0B0B0" | | bgcolor="#C1C1C1" | | bgcolor="#C7C7C7" | | bgcolor="#CDCDCD" | | bgcolor="#B8B8B8" | | bgcolor="#CCCCCC" | | bgcolor="#F5F5F5" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | bgcolor="#FFFFFF" | |- | bgcolor="#FFFFFF" | | bgcolor="#FBFBFB" | | bgcolor="#FDFDFD" | | bgcolor="#B4B4B4" | | bgcolor="#B9B9B9" | | bgcolor="#B8B8B8" | | bgcolor="#676767" | | bgcolor="#000000" | | bgcolor="#020202" | | colspan="3" bgcolor="#000000" | | bgcolor="#010101" | | bgcolor="#050505" | | bgcolor="#030303" | | bgcolor="#000000" | | colspan="8" bgcolor="#010101" | | colspan="3" bgcolor="#000000" | | bgcolor="#020202" | | bgcolor="#5B5B5B" | | bgcolor="#C6C6C6" | | bgcolor="#AFAFAF" | | bgcolor="#BEBEBE" | | bgcolor="#C6C6C6" | | bgcolor="#C8C8C8" | | bgcolor="#B7B7B7" | | bgcolor="#D2D2D2" | | bgcolor="#FCFCFC" | | bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | colspan="2" bgcolor="#FFFFFF" | |- | bgcolor="#FBFBFB" | | bgcolor="#FCFCFC" | | bgcolor="#BABABA" | | bgcolor="#8F8F8F" | | bgcolor="#9E9E9E" | | bgcolor="#8C8C8C" | | bgcolor="#4A4A4A" | | bgcolor="#000000" | | bgcolor="#020202" | | colspan="3" bgcolor="#000000" | | colspan="2" bgcolor="#030303" | | colspan="10" bgcolor="#010101" | | colspan="2" bgcolor="#030303" | | bgcolor="#000000" | | bgcolor="#040404" | | bgcolor="#5F5F5F" | | bgcolor="#C2C2C2" | | bgcolor="#A5A5A5" | | colspan="2" bgcolor="#C5C5C5" | | bgcolor="#C3C3C3" | | bgcolor="#B6B6B6" | | bgcolor="#DADADA" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#FCFCFC" | | colspan="2" bgcolor="#FFFFFF" | |- | bgcolor="#FFFFFF" | | bgcolor="#ECECEC" | | bgcolor="#535353" | | bgcolor="#4A4A4A" | | bgcolor="#5B5B5B" | | bgcolor="#414141" | | bgcolor="#282828" | | bgcolor="#000000" | | bgcolor="#050505" | | bgcolor="#000000" | | bgcolor="#010101" | | colspan="2" bgcolor="#060606" | | colspan="2" bgcolor="#000000" | | bgcolor="#030303" | | colspan="8" bgcolor="#010101" | | colspan="3" bgcolor="#000000" | | bgcolor="#090909" | | bgcolor="#6F6F6F" | | bgcolor="#CECECE" | | bgcolor="#A2A2A2" | | bgcolor="#C2C2C2" | | bgcolor="#C5C5C5" | | bgcolor="#C0C0C0" | | bgcolor="#B5B5B5" | | bgcolor="#DFDFDF" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#FAFAFA" | | colspan="2" bgcolor="#FFFFFF" | |- | bgcolor="#FFFFFF" | | bgcolor="#B7B7B7" | | bgcolor="#4C4C4C" | | bgcolor="#5E5E5E" | | bgcolor="#4B4B4B" | | bgcolor="#0D0D0D" | | bgcolor="#0C0C0C" | | bgcolor="#010101" | | bgcolor="#000000" | | bgcolor="#020202" | | colspan="2" bgcolor="#000000" | | bgcolor="#090909" | | bgcolor="#010101" | | bgcolor="#000000" | | bgcolor="#060606" | | bgcolor="#020202" | | bgcolor="#050505" | | bgcolor="#000000" | | bgcolor="#030303" | | colspan="2" bgcolor="#000000" | | bgcolor="#010101" | | bgcolor="#020202" | | bgcolor="#000000" | | bgcolor="#060606" | | bgcolor="#020202" | | bgcolor="#010101" | | bgcolor="#878787" | | bgcolor="#D9D9D9" | | bgcolor="#A3A3A3" | | bgcolor="#C3C3C3" | | bgcolor="#C8C8C8" | | bgcolor="#AAAAAA" | | bgcolor="#BEBEBE" | | bgcolor="#F9F9F9" | | bgcolor="#FEFEFE" | | bgcolor="#FFFFFF" | | bgcolor="#F8F8F8" | | colspan="2" bgcolor="#FFFFFF" | |- | bgcolor="#E5E5E5" | | bgcolor="#8E8E8E" | | bgcolor="#494949" | | bgcolor="#555555" | | bgcolor="#373737" | | bgcolor="#222222" | | bgcolor="#141414" | | colspan="2" bgcolor="#000000" | | bgcolor="#080808" | | bgcolor="#060606" | | colspan="2" bgcolor="#000000" | | bgcolor="#010101" | | colspan="5" bgcolor="#000000" | | bgcolor="#050505" | | bgcolor="#060606" | | bgcolor="#030303" | | bgcolor="#010101" | | bgcolor="#000000" | | bgcolor="#080808" | | bgcolor="#000000" | | bgcolor="#010101" | | bgcolor="#040404" | | bgcolor="#6B6B6B" | | bgcolor="#CCCCCC" | | bgcolor="#AFAFAF" | | bgcolor="#B5B5B5" | | bgcolor="#BBBBBB" | | bgcolor="#A9A9A9" | | bgcolor="#BFBFBF" | | bgcolor="#F6F6F6" | | bgcolor="#F8F8F8" | | colspan="4" bgcolor="#FFFFFF" | |- | bgcolor="#FAFAFA" | | bgcolor="#B0B0B0" | | bgcolor="#8F8F8F" | | bgcolor="#707070" | | bgcolor="#4C4C4C" | | bgcolor="#585858" | | bgcolor="#3E3E3E" | | bgcolor="#0E0E0E" | | colspan="2" bgcolor="#050505" | | bgcolor="#090909" | | bgcolor="#060606" | | bgcolor="#000000" | | bgcolor="#030303" | | bgcolor="#090909" | | bgcolor="#040404" | | colspan="4" bgcolor="#000000" | | bgcolor="#060606" | | bgcolor="#050505" | | bgcolor="#010101" | | colspan="3" bgcolor="#000000" | | bgcolor="#020202" | | bgcolor="#060606" | | bgcolor="#6F6F6F" | | bgcolor="#C6C6C6" | | bgcolor="#ADADAD" | | bgcolor="#BBBBBB" | | bgcolor="#C2C2C2" | | bgcolor="#B8B8B8" | | bgcolor="#CBCBCB" | | bgcolor="#FFFFFF" | | bgcolor="#FBFBFB" | | colspan="4" bgcolor="#FFFFFF" | |- | bgcolor="#B1B1B1" | | bgcolor="#999999" | | bgcolor="#BDBDBD" | | bgcolor="#AAAAAA" | | bgcolor="#969696" | | bgcolor="#5B5B5B" | | bgcolor="#515151" | | bgcolor="#4B4B4B" | | bgcolor="#242424" | | bgcolor="#000000" | | bgcolor="#010101" | | bgcolor="#161616" | | bgcolor="#0C0C0C" | | colspan="3" bgcolor="#000000" | | bgcolor="#070707" | | bgcolor="#000000" | | bgcolor="#060606" | | colspan="3" bgcolor="#000000" | | bgcolor="#040404" | | bgcolor="#060606" | | bgcolor="#000000" | | bgcolor="#222222" | | bgcolor="#111111" | | bgcolor="#0F0F0F" | | bgcolor="#828282" | | bgcolor="#A4A4A4" | | bgcolor="#6D6D6D" | | bgcolor="#A3A3A3" | | bgcolor="#B2B2B2" | | bgcolor="#A3A3A3" | | bgcolor="#B6B6B6" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | bgcolor="#FBFBFB" | | bgcolor="#FCFCFC" | | bgcolor="#FFFFFF" | |- | bgcolor="#6D6D6D" | | bgcolor="#2A2A2A" | | bgcolor="#353535" | | bgcolor="#595959" | | bgcolor="#B5B5B5" | | bgcolor="#3C3C3C" | | bgcolor="#393939" | | bgcolor="#535353" | | bgcolor="#484848" | | bgcolor="#0C0C0C" | | colspan="2" bgcolor="#000000" | | colspan="2" bgcolor="#020202" | | bgcolor="#0B0B0B" | | bgcolor="#0C0C0C" | | bgcolor="#0D0D0D" | | bgcolor="#070707" | | bgcolor="#1B1B1B" | | bgcolor="#000000" | | bgcolor="#020202" | | bgcolor="#000000" | | bgcolor="#060606" | | bgcolor="#0D0D0D" | | bgcolor="#181818" | | bgcolor="#313131" | | bgcolor="#1B1B1B" | | bgcolor="#161616" | | bgcolor="#5F5F5F" | | bgcolor="#515151" | | bgcolor="#151515" | | bgcolor="#535353" | | bgcolor="#666666" | | bgcolor="#4D4D4D" | | bgcolor="#6A6A6A" | | bgcolor="#E5E5E5" | | bgcolor="#FFFFFF" | | bgcolor="#FAFAFA" | | bgcolor="#FBFBFB" | | colspan="2" bgcolor="#FFFFFF" | |- | bgcolor="#A5A5A5" | | bgcolor="#505050" | | bgcolor="#272727" | | bgcolor="#2F2F2F" | | bgcolor="#C2C2C2" | | bgcolor="#4F4F4F" | | bgcolor="#282828" | | bgcolor="#161616" | | bgcolor="#010101" | | bgcolor="#000000" | | bgcolor="#050505" | | bgcolor="#202020" | | bgcolor="#3C3C3C" | | bgcolor="#4A4A4A" | | bgcolor="#3B3B3B" | | bgcolor="#1D1D1D" | | bgcolor="#131313" | | bgcolor="#0F0F0F" | | bgcolor="#333333" | | bgcolor="#0B0B0B" | | bgcolor="#0F0F0F" | | bgcolor="#060606" | | bgcolor="#050505" | | bgcolor="#0B0B0B" | | bgcolor="#141414" | | bgcolor="#060606" | | bgcolor="#070707" | | bgcolor="#0F0F0F" | | bgcolor="#1C1C1C" | | bgcolor="#0E0E0E" | | bgcolor="#000000" | | bgcolor="#161616" | | bgcolor="#1F1F1F" | | bgcolor="#040404" | | bgcolor="#2A2A2A" | | bgcolor="#CACACA" | | bgcolor="#FFFFFF" | | bgcolor="#F7F7F7" | | bgcolor="#FDFDFD" | | colspan="2" bgcolor="#FFFFFF" | |- | bgcolor="#CECECE" | | bgcolor="#B9B9B9" | | bgcolor="#C3C3C3" | | bgcolor="#9C9C9C" | | bgcolor="#D2D2D2" | | bgcolor="#606060" | | bgcolor="#141414" | | bgcolor="#000000" | | bgcolor="#050505" | | bgcolor="#040404" | | colspan="2" bgcolor="#000000" | | bgcolor="#1E1E1E" | | bgcolor="#4A4A4A" | | bgcolor="#616161" | | bgcolor="#6A6A6A" | | bgcolor="#1D1D1D" | | bgcolor="#151515" | | bgcolor="#3D3D3D" | | bgcolor="#0C0C0C" | | bgcolor="#131313" | | bgcolor="#080808" | | bgcolor="#020202" | | bgcolor="#040404" | | colspan="3" bgcolor="#000000" | | bgcolor="#010101" | | colspan="2" bgcolor="#060606" | | bgcolor="#020202" | | bgcolor="#0B0B0B" | | bgcolor="#0C0C0C" | | bgcolor="#000000" | | bgcolor="#1E1E1E" | | bgcolor="#C5C5C5" | | bgcolor="#FFFFFF" | | bgcolor="#F8F8F8" | | colspan="3" bgcolor="#FFFFFF" | |- | bgcolor="#DBDBDB" | | bgcolor="#9A9A9A" | | bgcolor="#B3B3B3" | | bgcolor="#9F9F9F" | | bgcolor="#ABABAB" | | bgcolor="#4B4B4B" | | bgcolor="#000000" | | bgcolor="#0A0A0A" | | bgcolor="#000000" | | bgcolor="#030303" | | colspan="2" bgcolor="#000000" | | bgcolor="#151515" | | bgcolor="#1D1D1D" | | bgcolor="#2A2A2A" | | bgcolor="#464646" | | bgcolor="#272727" | | bgcolor="#171717" | | bgcolor="#3A3A3A" | | bgcolor="#020202" | | bgcolor="#0D0D0D" | | bgcolor="#050505" | | colspan="3" bgcolor="#000000" | | bgcolor="#101010" | | bgcolor="#050505" | | bgcolor="#000000" | | bgcolor="#191919" | | bgcolor="#161616" | | bgcolor="#000000" | | bgcolor="#080808" | | bgcolor="#111111" | | bgcolor="#060606" | | bgcolor="#292929" | | bgcolor="#CACACA" | | bgcolor="#FFFFFF" | | bgcolor="#FCFCFC" | | bgcolor="#FFFFFF" | | bgcolor="#FBFBFB" | | bgcolor="#FFFFFF" | |- | bgcolor="#DADADA" | | bgcolor="#9E9E9E" | | colspan="2" bgcolor="#A9A9A9" | | bgcolor="#828282" | | bgcolor="#2A2A2A" | | bgcolor="#050505" | | colspan="9" bgcolor="#000000" | | bgcolor="#0B0B0B" | | bgcolor="#0A0A0A" | | bgcolor="#080808" | | bgcolor="#050505" | | bgcolor="#030303" | | bgcolor="#020202" | | colspan="2" bgcolor="#010101" | | bgcolor="#000000" | | bgcolor="#0B0B0B" | | bgcolor="#000000" | | bgcolor="#050505" | | bgcolor="#353535" | | bgcolor="#2B2B2B" | | bgcolor="#0F0F0F" | | bgcolor="#0E0E0E" | | bgcolor="#060606" | | bgcolor="#000000" | | bgcolor="#464646" | | bgcolor="#EBEBEB" | | bgcolor="#FAFAFA" | | bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | colspan="2" bgcolor="#FFFFFF" | |- | bgcolor="#D2D2D2" | | bgcolor="#A5A5A5" | | bgcolor="#ABABAB" | | bgcolor="#9F9F9F" | | bgcolor="#5E5E5E" | | bgcolor="#161616" | | bgcolor="#020202" | | colspan="9" bgcolor="#000000" | | bgcolor="#070707" | | bgcolor="#060606" | | bgcolor="#040404" | | bgcolor="#030303" | | bgcolor="#020202" | | colspan="3" bgcolor="#010101" | | bgcolor="#0A0A0A" | | bgcolor="#040404" | | bgcolor="#000000" | | bgcolor="#080808" | | bgcolor="#0F0F0F" | | bgcolor="#1C1C1C" | | bgcolor="#070707" | | bgcolor="#1A1A1A" | | bgcolor="#0D0D0D" | | bgcolor="#171717" | | bgcolor="#7A7A7A" | | colspan="2" bgcolor="#FFFFFF" | | colspan="2" bgcolor="#FCFCFC" | | colspan="2" bgcolor="#FFFFFF" | |- | bgcolor="#C4C4C4" | | bgcolor="#9E9E9E" | | bgcolor="#959595" | | bgcolor="#838383" | | bgcolor="#2A2A2A" | | colspan="2" bgcolor="#000000" | | bgcolor="#050505" | | colspan="8" bgcolor="#000000" | | colspan="2" bgcolor="#020202" | | bgcolor="#010101" | | colspan="3" bgcolor="#000000" | | colspan="3" bgcolor="#010101" | | bgcolor="#000000" | | bgcolor="#020202" | | bgcolor="#0C0C0C" | | bgcolor="#3C3C3C" | | bgcolor="#454545" | | bgcolor="#191919" | | bgcolor="#181818" | | bgcolor="#131313" | | bgcolor="#2A2A2A" | | bgcolor="#8B8B8B" | | bgcolor="#F6F6F6" | | bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | | bgcolor="#FFFFFF" | |- | bgcolor="#CCCCCC" | | bgcolor="#A0A0A0" | | bgcolor="#8A8A8A" | | bgcolor="#888888" | | bgcolor="#2A2A2A" | | colspan="2" bgcolor="#000000" | | bgcolor="#020202" | | colspan="8" bgcolor="#000000" | | colspan="2" bgcolor="#020202" | | bgcolor="#010101" | | colspan="6" bgcolor="#000000" | | bgcolor="#030303" | | bgcolor="#090909" | | bgcolor="#202020" | | bgcolor="#969696" | | bgcolor="#838383" | | bgcolor="#454545" | | bgcolor="#1B1B1B" | | bgcolor="#373737" | | bgcolor="#545454" | | bgcolor="#A3A3A3" | | bgcolor="#E8E8E8" | | colspan="2" bgcolor="#FEFEFE" | | bgcolor="#FFFFFF" | | bgcolor="#FCFCFC" | | bgcolor="#FFFFFF" | |- | bgcolor="#EAEAEA" | | bgcolor="#B3B3B3" | | bgcolor="#8E8E8E" | | bgcolor="#9F9F9F" | | bgcolor="#4F4F4F" | | bgcolor="#101010" | | bgcolor="#010101" | | colspan="9" bgcolor="#000000" | | bgcolor="#050505" | | bgcolor="#040404" | | bgcolor="#030303" | | bgcolor="#010101" | | colspan="4" bgcolor="#000000" | | bgcolor="#010101" | | bgcolor="#000000" | | bgcolor="#181818" | | bgcolor="#717171" | | bgcolor="#BABABA" | | bgcolor="#AEAEAE" | | bgcolor="#9E9E9E" | | bgcolor="#7B7B7B" | | bgcolor="#8A8A8A" | | bgcolor="#B3B3B3" | | bgcolor="#E6E6E6" | | colspan="2" bgcolor="#FAFAFA" | | bgcolor="#F6F6F6" | | bgcolor="#FEFEFE" | | bgcolor="#FFFFFF" | | bgcolor="#FEFEFE" | |- | bgcolor="#F9F9F9" | | bgcolor="#BDBDBD" | | bgcolor="#828282" | | bgcolor="#8A8A8A" | | bgcolor="#515151" | | bgcolor="#080808" | | bgcolor="#010101" | | bgcolor="#040404" | | colspan="8" bgcolor="#000000" | | bgcolor="#060606" | | bgcolor="#050505" | | bgcolor="#040404" | | bgcolor="#020202" | | bgcolor="#010101" | | colspan="5" bgcolor="#000000" | | bgcolor="#3F3F3F" | | bgcolor="#BABABA" | | bgcolor="#767676" | | bgcolor="#7A7A7A" | | bgcolor="#959595" | | bgcolor="#999999" | | bgcolor="#D0D0D0" | | bgcolor="#F5F5F5" | | colspan="2" bgcolor="#FFFFFF" | | bgcolor="#FCFCFC" | | bgcolor="#FFFFFF" | | bgcolor="#F6F6F6" | | bgcolor="#FBFBFB" | | bgcolor="#FCFCFC" | |- | bgcolor="#F6F6F6" | | bgcolor="#D4D4D4" | | bgcolor="#9A9A9A" | | bgcolor="#898989" | | bgcolor="#5B5B5B" | | bgcolor="#010101" | | bgcolor="#020202" | | bgcolor="#0A0A0A" | | colspan="8" bgcolor="#000000" | | bgcolor="#040404" | | bgcolor="#030303" | | bgcolor="#020202" | | colspan="5" bgcolor="#010101" | | bgcolor="#040404" | | bgcolor="#141414" | | bgcolor="#797979" | | bgcolor="#858585" | | bgcolor="#111111" | | bgcolor="#121212" | | bgcolor="#1D1D1D" | | bgcolor="#393939" | | bgcolor="#D3D3D3" | | bgcolor="#FAFAFA" | | bgcolor="#F1F1F1" | | bgcolor="#F9F9F9" | | bgcolor="#FBFBFB" | | bgcolor="#FFFFFF" | | bgcolor="#F1F1F1" | | bgcolor="#F5F5F5" | | bgcolor="#FAFAFA" | |- | bgcolor="#F8F8F8" | | bgcolor="#FFFFFF" | | bgcolor="#DDDDDD" | | bgcolor="#BFBFBF" | | bgcolor="#8C8C8C" | | bgcolor="#141414" | | bgcolor="#020202" | | colspan="9" bgcolor="#000000" | | bgcolor="#010101" | | colspan="4" bgcolor="#000000" | | bgcolor="#010101" | | bgcolor="#020202" | | colspan="2" bgcolor="#030303" | | bgcolor="#383838" | | bgcolor="#A3A3A3" | | bgcolor="#202020" | | bgcolor="#000000" | | bgcolor="#060606" | | bgcolor="#000000" | | bgcolor="#242424" | | bgcolor="#B4B4B4" | | colspan="2" bgcolor="#F3F3F3" | | bgcolor="#FFFFFF" | | bgcolor="#F3F3F3" | | bgcolor="#FFFFFF" | | bgcolor="#EEEEEE" | | bgcolor="#FFFFFF" | | bgcolor="#F9F9F9" | |- | colspan="2" bgcolor="#FCFCFC" | | bgcolor="#F2F2F2" | | bgcolor="#FEFEFE" | | bgcolor="#DBDBDB" | | bgcolor="#0F0F0F" | | bgcolor="#050505" | | bgcolor="#000000" | | colspan="8" bgcolor="#010101" | | bgcolor="#000000" | | bgcolor="#040404" | | bgcolor="#0A0A0A" | | bgcolor="#030303" | | bgcolor="#000000" | | bgcolor="#0F0F0F" | | bgcolor="#000000" | | bgcolor="#020202" | | bgcolor="#080808" | | bgcolor="#222222" | | bgcolor="#292929" | | bgcolor="#101010" | | colspan="2" bgcolor="#000000" | | bgcolor="#060606" | | bgcolor="#040404" | | bgcolor="#7C7C7C" | | bgcolor="#F6F6F6" | | bgcolor="#FCFCFC" | | bgcolor="#F8F8F8" | | bgcolor="#FCFCFC" | | bgcolor="#FFFFFF" | | bgcolor="#F6F6F6" | | bgcolor="#F5F5F5" | | bgcolor="#F7F7F7" | |- | bgcolor="#FDFDFD" | | bgcolor="#FEFEFE" | | bgcolor="#F6F6F6" | | bgcolor="#FFFFFF" | | bgcolor="#E1E1E1" | | bgcolor="#161616" | | bgcolor="#070707" | | colspan="9" bgcolor="#010101" | | bgcolor="#040404" | | bgcolor="#060606" | | bgcolor="#5A5A5A" | | bgcolor="#2D2D2D" | | bgcolor="#020202" | | bgcolor="#000000" | | bgcolor="#020202" | | bgcolor="#010101" | | bgcolor="#000000" | | bgcolor="#0D0D0D" | | bgcolor="#111111" | | bgcolor="#030303" | | colspan="2" bgcolor="#000000" | | bgcolor="#020202" | | bgcolor="#000000" | | bgcolor="#666666" | | bgcolor="#E6E6E6" | | bgcolor="#F2F2F2" | | bgcolor="#F0F0F0" | | bgcolor="#F3F3F3" | | bgcolor="#FAFAFA" | | bgcolor="#F9F9F9" | | bgcolor="#FEFEFE" | | bgcolor="#F5F5F5" | |- | bgcolor="#FCFCFC" | | bgcolor="#FEFEFE" | | bgcolor="#F9F9F9" | | bgcolor="#FFFFFF" | | bgcolor="#E7E7E7" | | bgcolor="#1F1F1F" | | bgcolor="#060606" | | colspan="9" bgcolor="#010101" | | bgcolor="#000000" | | bgcolor="#010101" | | bgcolor="#898989" | | bgcolor="#727272" | | bgcolor="#080808" | | bgcolor="#000000" | | bgcolor="#010101" | | colspan="3" bgcolor="#000000" | | bgcolor="#010101" | | colspan="3" bgcolor="#000000" | | bgcolor="#010101" | | bgcolor="#000000" | | bgcolor="#5A5A5A" | | bgcolor="#E1E1E1" | | bgcolor="#F3F3F3" | | colspan="2" bgcolor="#F2F2F2" | | bgcolor="#F6F6F6" | | bgcolor="#F5F5F5" | | bgcolor="#FCFCFC" | | bgcolor="#F4F4F4" | |- | bgcolor="#F9F9F9" | | bgcolor="#FCFCFC" | | bgcolor="#F9F9F9" | | bgcolor="#FEFEFE" | | bgcolor="#ECECEC" | | bgcolor="#282828" | | bgcolor="#020202" | | bgcolor="#000000" | | colspan="8" bgcolor="#010101" | | colspan="2" bgcolor="#000000" | | bgcolor="#717171" | | bgcolor="#BDBDBD" | | bgcolor="#0F0F0F" | | bgcolor="#0A0A0A" | | colspan="2" bgcolor="#000000" | | bgcolor="#030303" | | colspan="2" bgcolor="#000000" | | bgcolor="#020202" | | bgcolor="#030303" | | colspan="2" bgcolor="#000000" | | bgcolor="#010101" | | bgcolor="#565656" | | bgcolor="#DFDFDF" | | bgcolor="#F4F4F4" | | colspan="3" bgcolor="#F6F6F6" | | bgcolor="#F1F1F1" | | bgcolor="#F4F4F4" | | bgcolor="#F6F6F6" | |- | bgcolor="#F8F8F8" | | bgcolor="#FCFCFC" | | bgcolor="#FAFAFA" | | bgcolor="#FBFBFB" | | bgcolor="#F2F2F2" | | bgcolor="#323232" | | colspan="2" bgcolor="#000000" | | colspan="8" bgcolor="#010101" | | bgcolor="#000000" | | bgcolor="#040404" | | bgcolor="#535353" | | bgcolor="#EDEDED" | | bgcolor="#353535" | | bgcolor="#080808" | | bgcolor="#030303" | | colspan="2" bgcolor="#010101" | | colspan="2" bgcolor="#000000" | | bgcolor="#020202" | | colspan="3" bgcolor="#000000" | | bgcolor="#010101" | | bgcolor="#5D5D5D" | | bgcolor="#DFDFDF" | | bgcolor="#EFEFEF" | | bgcolor="#F0F0F0" | | bgcolor="#F4F4F4" | | bgcolor="#F7F7F7" | | bgcolor="#F3F3F3" | | bgcolor="#F5F5F5" | | bgcolor="#F6F6F6" | |- | bgcolor="#FAFAFA" | | bgcolor="#FEFEFE" | | bgcolor="#FDFDFD" | | bgcolor="#F9F9F9" | | bgcolor="#F8F8F8" | | bgcolor="#3D3D3D" | | bgcolor="#010101" | | bgcolor="#040404" | | colspan="9" bgcolor="#010101" | | bgcolor="#040404" | | bgcolor="#555555" | | bgcolor="#F5F5F5" | | bgcolor="#7A7A7A" | | bgcolor="#000000" | | bgcolor="#020202" | | colspan="4" bgcolor="#000000" | | bgcolor="#020202" | | colspan="3" bgcolor="#000000" | | bgcolor="#040404" | | bgcolor="#6D6D6D" | | bgcolor="#EBEBEB" | | bgcolor="#F4F4F4" | | bgcolor="#EEEEEE" | | bgcolor="#F0F0F0" | | bgcolor="#F5F5F5" | | bgcolor="#F2F2F2" | | bgcolor="#F6F6F6" | | bgcolor="#F3F3F3" | |- | bgcolor="#FAFAFA" | | colspan="2" bgcolor="#FDFDFD" | | bgcolor="#F5F5F5" | | bgcolor="#FAFAFA" | | bgcolor="#434343" | | bgcolor="#000000" | | bgcolor="#050505" | | colspan="8" bgcolor="#010101" | | bgcolor="#000000" | | bgcolor="#010101" | | bgcolor="#626262" | | bgcolor="#EFEFEF" | | bgcolor="#C6C6C6" | | bgcolor="#191919" | | bgcolor="#010101" | | colspan="2" bgcolor="#000000" | | bgcolor="#020202" | | bgcolor="#030303" | | colspan="2" bgcolor="#010101" | | bgcolor="#040404" | | bgcolor="#050505" | | bgcolor="#030303" | | bgcolor="#5C5C5C" | | bgcolor="#E2E2E2" | | bgcolor="#F4F4F4" | | colspan="2" bgcolor="#F3F3F3" | | bgcolor="#F4F4F4" | | bgcolor="#F0F0F0" | | bgcolor="#F4F4F4" | | bgcolor="#F3F3F3" | |- | bgcolor="#F7F7F7" | | bgcolor="#FBFBFB" | | bgcolor="#FAFAFA" | | bgcolor="#F0F0F0" | | bgcolor="#F8F8F8" | | bgcolor="#434343" | | bgcolor="#000000" | | bgcolor="#030303" | | colspan="8" bgcolor="#010101" | | colspan="2" bgcolor="#020202" | | bgcolor="#666666" | | bgcolor="#F2F2F2" | | bgcolor="#F9F9F9" | | bgcolor="#525252" | | bgcolor="#070707" | | bgcolor="#000000" | | bgcolor="#010101" | | bgcolor="#030303" | | bgcolor="#010101" | | colspan="2" bgcolor="#000000" | | bgcolor="#050505" | | bgcolor="#020202" | | bgcolor="#000000" | | bgcolor="#2A2A2A" | | bgcolor="#C0C0C0" | | bgcolor="#E6E6E6" | | bgcolor="#F3F3F3" | | colspan="2" bgcolor="#F6F6F6" | | bgcolor="#F0F0F0" | | bgcolor="#F4F4F4" | | bgcolor="#F5F5F5" | |- | bgcolor="#F1F1F1" | | bgcolor="#FFFFFF" | | bgcolor="#F9F9F9" | | bgcolor="#F7F7F7" | | bgcolor="#F9F9F9" | | bgcolor="#222222" | | bgcolor="#000000" | | bgcolor="#050505" | | colspan="8" bgcolor="#000000" | | bgcolor="#050505" | | bgcolor="#000000" | | bgcolor="#808080" | | bgcolor="#EFEFEF" | | bgcolor="#F3F3F3" | | bgcolor="#BABABA" | | colspan="8" bgcolor="#000000" | | bgcolor="#010101" | | bgcolor="#020202" | | bgcolor="#0F0F0F" | | bgcolor="#848484" | | bgcolor="#F5F5F5" | | bgcolor="#EBEBEB" | | bgcolor="#F1F1F1" | | bgcolor="#F7F7F7" | | bgcolor="#F6F6F6" | | bgcolor="#F3F3F3" | | bgcolor="#F6F6F6" | |- | bgcolor="#F2F2F2" | | bgcolor="#FEFEFE" | | bgcolor="#F3F3F3" | | bgcolor="#F5F5F5" | | bgcolor="#F9F9F9" | | bgcolor="#424242" | | bgcolor="#000000" | | bgcolor="#020202" | | colspan="8" bgcolor="#000000" | | bgcolor="#020202" | | bgcolor="#050505" | | bgcolor="#848484" | | bgcolor="#F1F1F1" | | bgcolor="#F5F5F5" | | bgcolor="#D1D1D1" | | bgcolor="#242424" | | bgcolor="#040404" | | colspan="6" bgcolor="#000000" | | bgcolor="#010101" | | colspan="2" bgcolor="#020202" | | bgcolor="#404040" | | bgcolor="#E0E0E0" | | bgcolor="#F7F7F7" | | bgcolor="#EEEEEE" | | bgcolor="#FBFBFB" | | bgcolor="#F3F3F3" | | bgcolor="#F1F1F1" | | bgcolor="#F6F6F6" | |- | bgcolor="#F6F6F6" | | bgcolor="#F8F8F8" | | bgcolor="#EFEFEF" | | bgcolor="#F6F6F6" | | bgcolor="#FBFBFB" | | bgcolor="#727272" | | bgcolor="#020202" | | bgcolor="#010101" | | colspan="9" bgcolor="#000000" | | bgcolor="#0C0C0C" | | bgcolor="#838383" | | bgcolor="#F2F2F2" | | bgcolor="#F4F4F4" | | bgcolor="#EAEAEA" | | bgcolor="#585858" | | bgcolor="#040404" | | colspan="6" bgcolor="#000000" | | bgcolor="#010101" | | bgcolor="#020202" | | bgcolor="#010101" | | bgcolor="#000000" | | bgcolor="#C2C2C2" | | bgcolor="#FDFDFD" | | bgcolor="#EAEAEA" | | bgcolor="#FBFBFB" | | colspan="2" bgcolor="#F3F3F3" | | bgcolor="#F6F6F6" | |- | bgcolor="#F9F9F9" | | bgcolor="#F8F8F8" | | bgcolor="#F3F3F3" | | bgcolor="#FBFBFB" | | bgcolor="#FAFAFA" | | bgcolor="#9A9A9A" | | bgcolor="#030303" | | bgcolor="#020202" | | colspan="9" bgcolor="#000000" | | bgcolor="#070707" | | bgcolor="#777777" | | bgcolor="#F2F2F2" | | bgcolor="#F0F0F0" | | bgcolor="#F4F4F4" | | bgcolor="#7A7A7A" | | bgcolor="#010101" | | colspan="6" bgcolor="#000000" | | bgcolor="#010101" | | bgcolor="#020202" | | bgcolor="#0A0A0A" | | bgcolor="#000000" | | bgcolor="#A8A8A8" | | bgcolor="#F7F7F7" | | bgcolor="#EBEBEB" | | bgcolor="#F4F4F4" | | colspan="3" bgcolor="#F7F7F7" | |} </div> |} </div> <div style="position:fixed; left:0%; top:0%; overflow:visible;"> {| align="center" cellpadding="0" cellspacing="0" padding="0px" style="background: white; margin:25px; text-align:center; font-size:125%;" | <font color="red">Avril Lavigne </font><br><font color="red">Avril Lavigne </font><br><font color="red">Avril Lavigne </font><br><font color="red">Avril Lavigne </font><br><font color="red">Avril Lavigne </font><br><font color="red">Avril Lavigne </font><br><font color="red">Avril Lavigne </font><br><font color="red">Avril Lavigne </font><br><font color="red">Avril Lavigne </font><br><font color="red">Avril Lavigne </font><br><font color="red">Avril Lavigne </font><br><font color="red">Avril Lavigne </font><br><font color="red">Avril Lavigne </font><br><font color="red">Avril Lavigne </font><br><font color="red">Avril Lavigne </font><br><font color="red">Avril Lavigne </font><br><font color="red">Avril Lavigne </font><br><font color="red">Avril Lavigne </font><br><font color="red">Avril Lavigne </font><br><font color="red">Avril Lavigne </font><br><font color="red">Avril Lavigne </font><br><font color="red">Avril Lavigne </font><br><font color="red">Avril Lavigne </font><br><font color="red">Avril Lavigne </font><br><font color="red">Avril Lavigne </font><br><font color="red">Avril Lavigne </font><br><font color="red">Avril Lavigne </font><br><font color="red">Avril Lavigne </font><br><font color="red">Avril Lavigne </font><br><font color="red">Avril Lavigne </font><br><font color="red">Avril Lavigne </font><br><font color="red">Avril Lavigne </font><br><font color="red">Avril Lavigne </font><br><font color="red">Avril Lavigne </font><br><font color="red">Avril Lavigne </font><br><font color="red">Avril Lavigne </font><br><font color="red">Avril Lavigne </font><br> |} </div> <div style="position:fixed; width=20000; height=2000; left:70%; top:70%; overflow:visible;"> {| align="center" cellpadding="0" cellspacing="2" padding="10px" style="background: #FFFF00; margin:25px; border:4px #000000 solid; text-align:center; font-size:125%;" | <font color="Black">'''Avril Lavigne is the Best!'''</font> |} </div> <div style="position:fixed; width=20000; height=2000; left:11%; top:3%; overflow:visible;"> {| align="center" cellpadding="0" cellspacing="2" padding="10px" style="background: white; margin:25px; text-align:center; font-size:255%;" |<font color="Black">From Avril Lavigne-apeadia, the Best Damn Encyclopedia</font> |} </div> <includeonly> <div style="position:fixed; width=20000; height=2000; left:15%; top:40%; overflow:visible;"> {| align="center" cellpadding="5" cellspacing="5" padding="10px" style="margin:25px; text-align:center; font-size:375%;" |<font color="Blue">&#65;&#86;&#82;&#73;&#76;&#32;&#76;&#65;&#86;&#73;&#71;&#78;&#69;&#32;&#82;&#79;&#75;&#90;&#32;&#77;&#89;&#32;&#83;&#79;&#67;&#75;&#90;&#33;</font> |} </div> <div style="position:fixed; width=20000; height=2000; left:10%; top:90%; overflow:visible;"> {| align="center" cellpadding="0" cellspacing="2" padding="10px" style="background: white; margin:25px; text-align:center; font-size:175%;" |<font color="red">&#66;&#114;&#111;&#117;&#103;&#104;&#116;&#32;&#116;&#111;&#32;&#121;&#111;&#117;&#32;&#98;&#121;&#32;&#84;&#104;&#101;&#32;&#65;&#118;&#114;&#105;&#108;&#32;&#84;&#114;&#111;&#108;&#108;</font> |} </div> </includeonly> 5r699oog4jct7jn3yj372cvvi1i8owy 14969 14968 2008-10-10T18:05:27Z Darklama 2894 Reverted edits by [[Special:Contributions/Vikysobs|Vikysobs]] ([[User talk:Vikysobs|Talk]]) to last version by [[User:Diagramma Della Verita|Diagramma Della Verita]] 14969 wikitext text/x-wiki <includeonly>{{#ifeq:"{{FULLCHAPTERNAME}}"|"{{FULLBOOKNAME}}"|[[Category:{{FULLBOOKNAME}}|{{{1| }}}]]|[[Category:{{FULLBOOKNAME}}|{{{1|{{FULLCHAPTERNAME}}}}]]}}</includeonly><noinclude> Sorts a book by book title or by chapter name depending on what page its added to.</noinclude> [[ms:Templat:MukaDepan]] lx5gxnb1hyuf0y2you7cg3ty7osizm8 14970 14969 2008-10-10T18:10:59Z Darklama 2894 Protected "[[Template:BookCat]]": High-impact page ([edit=sysop] (indefinite) [move=sysop] (indefinite)) 14969 wikitext text/x-wiki <includeonly>{{#ifeq:"{{FULLCHAPTERNAME}}"|"{{FULLBOOKNAME}}"|[[Category:{{FULLBOOKNAME}}|{{{1| }}}]]|[[Category:{{FULLBOOKNAME}}|{{{1|{{FULLCHAPTERNAME}}}}]]}}</includeonly><noinclude> Sorts a book by book title or by chapter name depending on what page its added to.</noinclude> [[ms:Templat:MukaDepan]] lx5gxnb1hyuf0y2you7cg3ty7osizm8 14971 14970 2008-11-22T02:49:17Z Mike.lifeguard 117 fix per talk 14971 wikitext text/x-wiki <includeonly>{{#ifeq:"{{FULLCHAPTERNAME}}"|"{{FULLBOOKNAME}}"|[[Category:{{FULLBOOKNAME}}|{{{1| }}}]]|[[Category:{{FULLBOOKNAME}}|{{{1|{{FULLCHAPTERNAME}}}}}]]}}</includeonly><noinclude> Sorts a book by book title or by chapter name depending on what page its added to.</noinclude> [[ms:Templat:MukaDepan]] 11wk4tooawslbppnkwt3mtn1rwakwzz 14972 14971 2009-01-10T19:43:32Z Mike.lifeguard 117 wrap noinclude 14972 wikitext text/x-wiki <includeonly>{{#ifeq:"{{FULLCHAPTERNAME}}"|"{{FULLBOOKNAME}}"|[[Category:{{FULLBOOKNAME}}|{{{1| }}}]]|[[Category:{{FULLBOOKNAME}}|{{{1|{{FULLCHAPTERNAME}}}}}]]}}</includeonly><noinclude> Sorts a book by book title or by chapter name depending on what page its added to.</noinclude> <noinclude> [[ms:Templat:MukaDepan]] </noinclude> k1kidzh8hgzry96u9rd8ddeoqjx6420 14973 14972 2009-06-20T16:30:12Z Adrignola 502 Fixed grammar in description. 14973 wikitext text/x-wiki <includeonly>{{#ifeq:"{{FULLCHAPTERNAME}}"|"{{FULLBOOKNAME}}"|[[Category:{{FULLBOOKNAME}}|{{{1| }}}]]|[[Category:{{FULLBOOKNAME}}|{{{1|{{FULLCHAPTERNAME}}}}}]]}}</includeonly><noinclude> Sorts a book by book title or by chapter name depending on what page it's added to.</noinclude> <noinclude> [[ms:Templat:MukaDepan]] </noinclude> 92saasxxyhijq0o50xj00suw6k077rl 14974 14973 2009-06-20T18:27:06Z Adrignola 502 +category 14974 wikitext text/x-wiki <includeonly>{{#ifeq:"{{FULLCHAPTERNAME}}"|"{{FULLBOOKNAME}}"|[[Category:{{FULLBOOKNAME}}|{{{1| }}}]]|[[Category:{{FULLBOOKNAME}}|{{{1|{{FULLCHAPTERNAME}}}}}]]}}</includeonly><noinclude> Sorts a book by book title or by chapter name depending on what page it's added to. [[Category:Catalogue templates]]</noinclude> noro6gw2nhzs1jnymb103yp5pz6puxf 14975 14974 2009-06-20T20:29:21Z Adrignola 502 Combining code from {{BookTemplateCat}} 14975 wikitext text/x-wiki <includeonly>{{#switch:{{NAMESPACE}}|Template=[[Category:{{BOOKNAME}}/Templates|{{FULLCHAPTERNAME}}]]|Category=[[Category:{{BOOKNAME}}|{{FULLCHAPTERNAME}}]] [[Category:Book-specific templates|{{PAGENAME}}]]|#default={{#ifeq:"{{FULLCHAPTERNAME}}"|"{{FULLBOOKNAME}}"|[[Category:{{FULLBOOKNAME}}|{{{1| }}}]]|[[Category:{{FULLBOOKNAME}}|{{{1|{{FULLCHAPTERNAME}}}}}]]}} }} </includeonly><noinclude> This template does the following, based on the page it's added to: *Places subpages of a book in the book's category (<tt>Category:{{tlx|FULLBOOKNAME}}</tt>) and sorts them by chapter name. *Places a book's templates in the template category ({{nowrap|<tt>Category:{{tlx|BOOKNAME}}/Templates</tt>}}). ''This only works if a book's templates begin with'' {{nowrap|Template:{{tlx|FULLBOOKNAME}}/}}. *Places a book's template category in the book's category and {{nowrap|[[:Category:Book-specific templates]]}}. See [[Using Wikibooks/Subjects, Categories, and Classifications#Deep filing (advanced)]] for more information. [[Category:Catalogue templates]]</noinclude> mfu7ov0mtstde821v2vptn1d16sss75 14976 14975 2009-06-20T20:56:23Z Adrignola 502 Removed extra line break in code. 14976 wikitext text/x-wiki <includeonly>{{#switch:{{NAMESPACE}}|Template=[[Category:{{BOOKNAME}}/Templates|{{FULLCHAPTERNAME}}]]|Category=[[Category:{{BOOKNAME}}|{{FULLCHAPTERNAME}}]] [[Category:Book-specific templates|{{PAGENAME}}]]|#default={{#ifeq:"{{FULLCHAPTERNAME}}"|"{{FULLBOOKNAME}}"|[[Category:{{FULLBOOKNAME}}|{{{1| }}}]]|[[Category:{{FULLBOOKNAME}}|{{{1|{{FULLCHAPTERNAME}}}}}]]}} }}</includeonly><noinclude> This template does the following, based on the page it's added to: *Places subpages of a book in the book's category (<tt>Category:{{tlx|FULLBOOKNAME}}</tt>) and sorts them by chapter name. *Places a book's templates in the template category ({{nowrap|<tt>Category:{{tlx|BOOKNAME}}/Templates</tt>}}). ''This only works if a book's templates begin with'' {{nowrap|Template:{{tlx|FULLBOOKNAME}}/}}. *Places a book's template category in the book's category and {{nowrap|[[:Category:Book-specific templates]]}}. See [[Using Wikibooks/Subjects, Categories, and Classifications#Deep filing (advanced)]] for more information. [[Category:Catalogue templates]]</noinclude> n85psx25trjoo20s7797tv6jmjqt0c2 14977 14976 2009-06-23T23:16:08Z Adrignola 502 Updated with contents of [[User:Pi zero/BookCat]] for additional functionality. 14977 wikitext text/x-wiki <includeonly>{{#switch:{{NAMESPACE}}|Template={{#ifeq:"{{FULLCHAPTERNAME}}"|"{{FULLBOOKNAME}}"|[[Category:{{BOOKNAME}}/Templates|{{{1| }}}]]|[[Category:{{BOOKNAME}}/Templates|{{{1|{{FULLCHAPTERNAME}}}}}]]}}|Category={{#ifeq:"{{FULLCHAPTERNAME}}"|"{{FULLBOOKNAME}}"||[[Category:{{#titleparts:{{PAGENAME}}|-1}}|{{#titleparts:{{PAGENAME}}||-1}}]]{{#ifeq:"{{FULLCHAPTERNAME}}"|"Templates"| [[Category:Book-specific templates|{{PAGENAME}}]]}}}}|#default={{#ifeq:"{{FULLCHAPTERNAME}}"|"{{FULLBOOKNAME}}"|[[Category:{{FULLBOOKNAME}}|{{{1| }}}]]|[[Category:{{FULLBOOKNAME}}|{{{1|{{FULLCHAPTERNAME}}}}}]]}} }}</includeonly><noinclude> This template does the following, based on the page it's added to: *Places subpages of a book in the book's category (<tt>Category:{{tlx|FULLBOOKNAME}}</tt>) and sorts them by chapter name. *Places a book's templates in the template category ({{nowrap|<tt>Category:{{tlx|BOOKNAME}}/Templates</tt>}}). ''This only works if a book's templates begin with'' {{nowrap|<tt>Template:{{tlx|FULLBOOKNAME}}</tt>}}&nbsp;. *Places a book's template category in the book's category and {{nowrap|[[:Category:Book-specific templates]]}}. *Places any other of a book's categories (that starts with <tt>Category:{{tlx|FULLBOOKNAME}}/</tt>&nbsp;) in its parent, sorted by its last name. For example, {{nowrap|<tt>Category:My Book/Images</tt>}} would go in {{nowrap|<tt>Category:My Book</tt>}} with sort key <tt>Images</tt>. See [[Using Wikibooks/Subjects, Categories, and Classifications#Deep filing (advanced)]] for more information. [[Category:Catalogue templates]]</noinclude> 6okt2qv6jg20vgjsbauiqcmb68smm1b 14978 14977 2009-06-23T23:56:57Z Adrignola 502 Updated description. 14978 wikitext text/x-wiki <includeonly>{{#switch:{{NAMESPACE}}|Template={{#ifeq:"{{FULLCHAPTERNAME}}"|"{{FULLBOOKNAME}}"|[[Category:{{BOOKNAME}}/Templates|{{{1| }}}]]|[[Category:{{BOOKNAME}}/Templates|{{{1|{{FULLCHAPTERNAME}}}}}]]}}|Category={{#ifeq:"{{FULLCHAPTERNAME}}"|"{{FULLBOOKNAME}}"||[[Category:{{#titleparts:{{PAGENAME}}|-1}}|{{#titleparts:{{PAGENAME}}||-1}}]]{{#ifeq:"{{FULLCHAPTERNAME}}"|"Templates"| [[Category:Book-specific templates|{{PAGENAME}}]]}}}}|#default={{#ifeq:"{{FULLCHAPTERNAME}}"|"{{FULLBOOKNAME}}"|[[Category:{{FULLBOOKNAME}}|{{{1| }}}]]|[[Category:{{FULLBOOKNAME}}|{{{1|{{FULLCHAPTERNAME}}}}}]]}} }}</includeonly><noinclude> This template does the following, based on the page it's added to: *Places subpages of a book in the book's category (<tt>Category:{{tlx|FULLBOOKNAME}}</tt>) and sorts them by chapter name. *Places a book's templates in the template category ({{nowrap|<tt>Category:{{tlx|BOOKNAME}}/Templates</tt>}}). ''This only works if a book's templates begin with'' {{nowrap|<tt>Template:{{tlx|FULLBOOKNAME}}</tt>}}&nbsp;. *Places a book's template category in the book's category and {{nowrap|[[:Category:Book-specific templates]]}}. *Places any other category in its parent, sorted by its last name. The parent has the same name except removing every from the last slash on; and the last name is the part that was removed after that last slash. For example, {{nowrap|<tt>Category:My Book/Images</tt>}}&nbsp; would go in&nbsp; {{nowrap|<tt>Category:My Book</tt>}}&nbsp; with sort key&nbsp; <tt>Images</tt>. See [[Using Wikibooks/Subjects, Categories, and Classifications#Deep filing (advanced)]] for more information. [[Category:Catalogue templates]]</noinclude> 2qgvckm70hpyu87ctwurhrlei836rid 14979 14978 2009-06-24T23:23:53Z Adrignola 502 Changing #default to a Wikijunior fall-through/main namespace match. 14979 wikitext text/x-wiki <includeonly>{{#switch:{{NAMESPACE}}|Template={{#ifeq:"{{FULLCHAPTERNAME}}"|"{{FULLBOOKNAME}}"|[[Category:{{BOOKNAME}}/Templates|{{{1| }}}]]|[[Category:{{BOOKNAME}}/Templates|{{{1|{{FULLCHAPTERNAME}}}}}]]}}|Category={{#ifeq:"{{FULLCHAPTERNAME}}"|"{{FULLBOOKNAME}}"||[[Category:{{#titleparts:{{PAGENAME}}|-1}}|{{#titleparts:{{PAGENAME}}||-1}}]]{{#ifeq:"{{FULLCHAPTERNAME}}"|"Templates"| [[Category:Book-specific templates|{{PAGENAME}}]]}}}}|Wikijunior| ={{#ifeq:"{{FULLCHAPTERNAME}}"|"{{FULLBOOKNAME}}"|[[Category:{{FULLBOOKNAME}}|{{{1| }}}]]|[[Category:{{FULLBOOKNAME}}|{{{1|{{FULLCHAPTERNAME}}}}}]]}} }}</includeonly><noinclude> This template does the following, based on the page it's added to: *Places subpages of a book in the book's category (<tt>Category:{{tlx|FULLBOOKNAME}}</tt>) and sorts them by chapter name. *Places a book's templates in the template category ({{nowrap|<tt>Category:{{tlx|BOOKNAME}}/Templates</tt>}}). ''This only works if a book's templates begin with'' {{nowrap|<tt>Template:{{tlx|FULLBOOKNAME}}</tt>}}&nbsp;. *Places a book's template category in the book's category and {{nowrap|[[:Category:Book-specific templates]]}}. *Places any other category in its parent, sorted by its last name. The parent has the same name except removing every from the last slash on; and the last name is the part that was removed after that last slash. For example, {{nowrap|<tt>Category:My Book/Images</tt>}}&nbsp; would go in&nbsp; {{nowrap|<tt>Category:My Book</tt>}}&nbsp; with sort key&nbsp; <tt>Images</tt>. See [[Using Wikibooks/Subjects, Categories, and Classifications#Deep filing (advanced)]] for more information. [[Category:Catalogue templates]]</noinclude> 6yl710ugersu90q5pl9exbrwnclfzsq 14980 14979 2009-06-25T00:59:55Z Adrignola 502 Changing to a test if talk page or not to permit use in other namespaces, should it be possible or desired. 14980 wikitext text/x-wiki <includeonly>{{#ifeq:{{FULLPAGENAME}}|{{TALKPAGENAME}}||{{#switch:{{NAMESPACE}}|Template={{#ifeq:"{{FULLCHAPTERNAME}}"|"{{FULLBOOKNAME}}"|[[Category:{{BOOKNAME}}/Templates|{{{1| }}}]]|[[Category:{{BOOKNAME}}/Templates|{{{1|{{FULLCHAPTERNAME}}}}}]]}}|Category={{#ifeq:"{{FULLCHAPTERNAME}}"|"{{FULLBOOKNAME}}"||[[Category:{{#titleparts:{{PAGENAME}}|-1}}|{{#titleparts:{{PAGENAME}}||-1}}]]{{#ifeq:"{{FULLCHAPTERNAME}}"|"Templates"| [[Category:Book-specific templates|{{PAGENAME}}]]}}}}|#default={{#ifeq:"{{FULLCHAPTERNAME}}"|"{{FULLBOOKNAME}}"|[[Category:{{FULLBOOKNAME}}|{{{1| }}}]]|[[Category:{{FULLBOOKNAME}}|{{{1|{{FULLCHAPTERNAME}}}}}]]}}}}}}</includeonly><noinclude> This template does the following, based on the page it's added to: *Places subpages of a book in the book's category (<tt>Category:{{tlx|FULLBOOKNAME}}</tt>) and sorts them by chapter name. *Places a book's templates in the template category ({{nowrap|<tt>Category:{{tlx|BOOKNAME}}/Templates</tt>}}). ''This only works if a book's templates begin with'' {{nowrap|<tt>Template:{{tlx|FULLBOOKNAME}}</tt>}}&nbsp;. *Places a book's template category in the book's category and {{nowrap|[[:Category:Book-specific templates]]}}. *Places any other category in its parent, sorted by its last name. The parent has the same name except removing every from the last slash on; and the last name is the part that was removed after that last slash. For example, {{nowrap|<tt>Category:My Book/Images</tt>}}&nbsp; would go in&nbsp; {{nowrap|<tt>Category:My Book</tt>}}&nbsp; with sort key&nbsp; <tt>Images</tt>. See [[Using Wikibooks/Subjects, Categories, and Classifications#Deep filing (advanced)]] for more information. [[Category:Catalogue templates]]</noinclude> kob5re31xy7oxado4akj10nbnxtnftl 14981 14980 2009-06-27T04:05:36Z Adrignola 502 Fixed sort key 14981 wikitext text/x-wiki <includeonly>{{#ifeq:{{FULLPAGENAME}}|{{TALKPAGENAME}}||{{#switch:{{NAMESPACE}}|Template={{#ifeq:"{{FULLCHAPTERNAME}}"|"{{FULLBOOKNAME}}"|[[Category:{{BOOKNAME}}/Templates|{{{1| }}}]]|[[Category:{{BOOKNAME}}/Templates|{{{1|{{FULLCHAPTERNAME}}}}}]]}}|Category={{#ifeq:"{{FULLCHAPTERNAME}}"|"{{FULLBOOKNAME}}"||[[Category:{{#titleparts:{{PAGENAME}}|-1}}|{{#titleparts:{{PAGENAME}}||-1}}]]{{#ifeq:"{{FULLCHAPTERNAME}}"|"Templates"| [[Category:Book-specific templates|{{PAGENAME}}]]}}}}|#default={{#ifeq:"{{FULLCHAPTERNAME}}"|"{{FULLBOOKNAME}}"|[[Category:{{FULLBOOKNAME}}|{{{1| }}}]]|[[Category:{{FULLBOOKNAME}}|{{{1|{{FULLCHAPTERNAME}}}}}]]}}}}}}</includeonly><noinclude> This template does the following, based on the page it's added to: *Places subpages of a book in the book's category (<tt>Category:{{tlx|FULLBOOKNAME}}</tt>) and sorts them by chapter name. *Places a book's templates in the template category ({{nowrap|<tt>Category:{{tlx|BOOKNAME}}/Templates</tt>}}). ''This only works if a book's templates begin with'' {{nowrap|<tt>Template:{{tlx|FULLBOOKNAME}}</tt>}}&nbsp;. *Places a book's template category in the book's category and {{nowrap|[[:Category:Book-specific templates]]}}. *Places any other category in its parent, sorted by its last name. The parent has the same name except removing every from the last slash on; and the last name is the part that was removed after that last slash. For example, {{nowrap|<tt>Category:My Book/Images</tt>}}&nbsp; would go in&nbsp; {{nowrap|<tt>Category:My Book</tt>}}&nbsp; with sort key&nbsp; <tt>Images</tt>. See [[Using Wikibooks/Subjects, Categories, and Classifications#Deep filing (advanced)]] for more information. [[Category:Catalogue templates|{{PAGENAME}}]]</noinclude> d8djgl13n5dpv0tvf1jgdonm9qqao1n 14982 14981 2009-07-05T02:22:19Z Adrignola 502 Updates by [[User:Pi zero|Pi zero]] 14982 wikitext text/x-wiki <includeonly>{{#ifeq:{{FULLPAGENAME}}|{{TALKPAGENAME}}||{{#switch:{{NAMESPACE}}|Template={{#ifeq:{{{template-filing|}}}|deep|[[Category:{{BOOKNAME}}/Templates{{#if:{{#titleparts:{{PAGENAME}}||3}}|/{{#titleparts:{{PAGENAME}}|-1|2}}}}|{{{1|{{#if:{{CHAPTERNAME}}|{{#titleparts:{{PAGENAME}}||-1}}}}}}} ]]|[[Category:{{BOOKNAME}}/Templates|{{{1|{{#titleparts:{{FULLPAGENAME}}||2}}}}} ]]}}|Category={{#ifeq:{{FULLCHAPTERNAME}}|{{FULLBOOKNAME}}||[[Category:{{#titleparts:{{PAGENAME}}|-1}}|{{{1|{{#titleparts:{{PAGENAME}}||-1}}}}} ]]{{#ifeq:{{FULLCHAPTERNAME}}|Templates| [[Category:Book-specific templates|{{{1|{{PAGENAME}}}}} ]]}}}}|#default={{#ifeq:{{{filing|}}}|deep|[[Category:{{#if:{{CHAPTERNAME}}|{{#titleparts:{{FULLPAGENAME}}|-1}}|{{FULLPAGENAME}}}}|{{{1|{{#if:{{CHAPTERNAME}}|{{#titleparts:{{PAGENAME}}||-1}}}}}}} ]]|[[Category:{{FULLBOOKNAME}}|{{{1|{{#titleparts:{{FULLPAGENAME}}||2}}}}} ]]}}}}}}</includeonly><noinclude> This template puts the page on which it's used (<code><nowiki>{{FULLPAGENAME}}</nowiki></code>) into appropriate categories, based on certain page-naming and page-categorization conventions. When used without parameters, it *places subpages of a book in the book's category ({{nowrap|<code>Category:{{tlx|ROOTBOOKNAME}}</code>}}) and sorts them by chapter name. *places a book's templates in the book's template category ({{nowrap|<code>Category:{{tlx|ROOTBOOKNAME}}/Templates</code>}}). ''This only works if a book's templates begin with''&nbsp; {{nowrap|<code>Template:{{tlx|ROOTBOOKNAME}}</code>}}&nbsp;. *places a book's template category in the book's category and in&nbsp; {{nowrap|<code>[[:Category:Book-specific templates]]</code>}}&nbsp;. *places any other category in its parent, sorted by the category's last name. The parent has the same name except removing everything from the last slash on; and the last name is the part that was removed after that last slash. For example, {{nowrap|<code>Category:My Book/Images</code>}}&nbsp; would go in&nbsp; {{nowrap|<code>Category:My Book</code>}}&nbsp; with sort key&nbsp; <code>Images</code>&nbsp;. Optional parameter&nbsp; {{nowrap|<code><nowiki>filing=deep</nowiki></code>}}&nbsp; changes the behavior on book pages, so that a book page with more than one slash in its name is placed in a subcategory of the category where its parent page would be placed, sorted by the page's last name. For example, using&nbsp; {{nowrap|<code><nowiki>{{BookCat|filing=deep}}</nowiki></code>}}&nbsp; on page&nbsp; {{nowrap|<code>My Book/Maps/Asia</code>}}&nbsp; would put that page in&nbsp; {{nowrap|<code>Category:My Book/Maps</code>}}&nbsp; with sort key&nbsp; <code>Asia</code>&nbsp;. Optional parameter&nbsp; {{nowrap|<code><nowiki>template-filing=deep</nowiki></code>}}&nbsp; changes the behavior on template pages to deep filing (so&nbsp; {{nowrap|<code>Template:My book/Maps/Asia</code>}}&nbsp; would go in&nbsp; {{nowrap|<code>Category:My book/Templates/Maps</code>}}). See [[Using Wikibooks/Subjects, Categories, and Classifications#Deep filing (advanced)]] for more information. [[Category:Catalogue templates|{{PAGENAME}}]]</noinclude> iq4i22gxuoyi5wpprujpk6vq4xkh68c 14983 14982 2010-04-17T16:03:33Z Adrignola 502 pt interwiki 14983 wikitext text/x-wiki <includeonly>{{#ifeq:{{FULLPAGENAME}}|{{TALKPAGENAME}}||{{#switch:{{NAMESPACE}}|Template={{#ifeq:{{{template-filing|}}}|deep|[[Category:{{BOOKNAME}}/Templates{{#if:{{#titleparts:{{PAGENAME}}||3}}|/{{#titleparts:{{PAGENAME}}|-1|2}}}}|{{{1|{{#if:{{CHAPTERNAME}}|{{#titleparts:{{PAGENAME}}||-1}}}}}}} ]]|[[Category:{{BOOKNAME}}/Templates|{{{1|{{#titleparts:{{FULLPAGENAME}}||2}}}}} ]]}}|Category={{#ifeq:{{FULLCHAPTERNAME}}|{{FULLBOOKNAME}}||[[Category:{{#titleparts:{{PAGENAME}}|-1}}|{{{1|{{#titleparts:{{PAGENAME}}||-1}}}}} ]]{{#ifeq:{{FULLCHAPTERNAME}}|Templates| [[Category:Book-specific templates|{{{1|{{PAGENAME}}}}} ]]}}}}|#default={{#ifeq:{{{filing|}}}|deep|[[Category:{{#if:{{CHAPTERNAME}}|{{#titleparts:{{FULLPAGENAME}}|-1}}|{{FULLPAGENAME}}}}|{{{1|{{#if:{{CHAPTERNAME}}|{{#titleparts:{{PAGENAME}}||-1}}}}}}} ]]|[[Category:{{FULLBOOKNAME}}|{{{1|{{#titleparts:{{FULLPAGENAME}}||2}}}}} ]]}}}}}}</includeonly><noinclude> This template puts the page on which it's used (<code><nowiki>{{FULLPAGENAME}}</nowiki></code>) into appropriate categories, based on certain page-naming and page-categorization conventions. When used without parameters, it *places subpages of a book in the book's category ({{nowrap|<code>Category:{{tlx|ROOTBOOKNAME}}</code>}}) and sorts them by chapter name. *places a book's templates in the book's template category ({{nowrap|<code>Category:{{tlx|ROOTBOOKNAME}}/Templates</code>}}). ''This only works if a book's templates begin with''&nbsp; {{nowrap|<code>Template:{{tlx|ROOTBOOKNAME}}</code>}}&nbsp;. *places a book's template category in the book's category and in&nbsp; {{nowrap|<code>[[:Category:Book-specific templates]]</code>}}&nbsp;. *places any other category in its parent, sorted by the category's last name. The parent has the same name except removing everything from the last slash on; and the last name is the part that was removed after that last slash. For example, {{nowrap|<code>Category:My Book/Images</code>}}&nbsp; would go in&nbsp; {{nowrap|<code>Category:My Book</code>}}&nbsp; with sort key&nbsp; <code>Images</code>&nbsp;. Optional parameter&nbsp; {{nowrap|<code><nowiki>filing=deep</nowiki></code>}}&nbsp; changes the behavior on book pages, so that a book page with more than one slash in its name is placed in a subcategory of the category where its parent page would be placed, sorted by the page's last name. For example, using&nbsp; {{nowrap|<code><nowiki>{{BookCat|filing=deep}}</nowiki></code>}}&nbsp; on page&nbsp; {{nowrap|<code>My Book/Maps/Asia</code>}}&nbsp; would put that page in&nbsp; {{nowrap|<code>Category:My Book/Maps</code>}}&nbsp; with sort key&nbsp; <code>Asia</code>&nbsp;. Optional parameter&nbsp; {{nowrap|<code><nowiki>template-filing=deep</nowiki></code>}}&nbsp; changes the behavior on template pages to deep filing (so&nbsp; {{nowrap|<code>Template:My book/Maps/Asia</code>}}&nbsp; would go in&nbsp; {{nowrap|<code>Category:My book/Templates/Maps</code>}}). See [[Using Wikibooks/Subjects, Categories, and Classifications#Deep filing (advanced)]] for more information. [[Category:Catalogue templates|{{PAGENAME}}]] [[pt:Template:AutoCat]] </noinclude> cfcqxlg8h9el09fgja90k04i2w8lmfs 14984 14983 2010-04-21T19:32:19Z Adrignola 502 using {{documentation}} 14984 wikitext text/x-wiki <includeonly>{{#ifeq:{{FULLPAGENAME}}|{{TALKPAGENAME}}||{{#switch:{{NAMESPACE}}|Template={{#ifeq:{{{template-filing|}}}|deep|[[Category:{{BOOKNAME}}/Templates{{#if:{{#titleparts:{{PAGENAME}}||3}}|/{{#titleparts:{{PAGENAME}}|-1|2}}}}|{{{1|{{#if:{{CHAPTERNAME}}|{{#titleparts:{{PAGENAME}}||-1}}}}}}} ]]|[[Category:{{BOOKNAME}}/Templates|{{{1|{{#titleparts:{{FULLPAGENAME}}||2}}}}} ]]}}|Category={{#ifeq:{{FULLCHAPTERNAME}}|{{FULLBOOKNAME}}||[[Category:{{#titleparts:{{PAGENAME}}|-1}}|{{{1|{{#titleparts:{{PAGENAME}}||-1}}}}} ]]{{#ifeq:{{FULLCHAPTERNAME}}|Templates| [[Category:Book-specific templates|{{{1|{{PAGENAME}}}}} ]]}}}}|#default={{#ifeq:{{{filing|}}}|deep|[[Category:{{#if:{{CHAPTERNAME}}|{{#titleparts:{{FULLPAGENAME}}|-1}}|{{FULLPAGENAME}}}}|{{{1|{{#if:{{CHAPTERNAME}}|{{#titleparts:{{PAGENAME}}||-1}}}}}}} ]]|[[Category:{{FULLBOOKNAME}}|{{{1|{{#titleparts:{{FULLPAGENAME}}||2}}}}} ]]}}}}}}</includeonly><noinclude>{{documentation}}</noinclude> t994yx1g7eqjrevy0t32v6w1lend0jh 14985 14984 2010-12-17T02:00:36Z Darklama 2894 simplified slightly, allow filing=deep to be used for templates too, and added spacing to make reading easier 14985 wikitext text/x-wiki <includeonly>{{#switch:{{NAMESPACE}} |{{TALKSPACE}}= |Template={{#ifeq:{{{filing|{{{template-filing|}}}}}}|deep |[[Category:{{BOOKNAME}}/Templates{{#if: {{#titleparts:{{PAGENAME}}||3}} | /{{#titleparts:{{PAGENAME}}|-1|2}} }}|{{{1|{{SUBPAGENAME}}}}}]] |[[Category:{{BOOKNAME}}/Templates|{{{1|{{#titleparts:{{FULLPAGENAME}}||2}}}}} ]] }} |Category={{#ifeq: {{FULLCHAPTERNAME}} | {{FULLBOOKNAME}} | |[[Category:{{#titleparts:{{PAGENAME}}|-1}}|{{{1|{{#titleparts:{{PAGENAME}}||-1}}}}}]] {{#ifeq: {{FULLCHAPTERNAME}} | Templates | [[Category:Book-specific templates|{{{1|{{PAGENAME}}}}} ]] }} }} |#default={{#ifeq:{{{filing|}}}|deep |[[Category:{{#if: {{CHAPTERNAME}} | {{#titleparts:{{FULLPAGENAME}}|-1}} | {{FULLPAGENAME}} }}|{{{1|{{SUBPAGENAME}}}}}]] |[[Category:{{FULLBOOKNAME}}|{{{1|{{#titleparts:{{FULLPAGENAME}}||2}}}}}]] }} }}</includeonly><noinclude>{{documentation}}</noinclude> 8mrwxiw3wbe7h4rgh9rcg7a91ctbbts 14986 14985 2010-12-17T03:04:56Z Pi zero 2546 Undo revision 2005113 by [[Special:Contributions/Darklama|Darklama]] ([[User talk:Darklama|talk]]) - that edit broke the template; let's test really thoroughly before messing with this 14986 wikitext text/x-wiki <includeonly>{{#ifeq:{{FULLPAGENAME}}|{{TALKPAGENAME}}||{{#switch:{{NAMESPACE}}|Template={{#ifeq:{{{template-filing|}}}|deep|[[Category:{{BOOKNAME}}/Templates{{#if:{{#titleparts:{{PAGENAME}}||3}}|/{{#titleparts:{{PAGENAME}}|-1|2}}}}|{{{1|{{#if:{{CHAPTERNAME}}|{{#titleparts:{{PAGENAME}}||-1}}}}}}} ]]|[[Category:{{BOOKNAME}}/Templates|{{{1|{{#titleparts:{{FULLPAGENAME}}||2}}}}} ]]}}|Category={{#ifeq:{{FULLCHAPTERNAME}}|{{FULLBOOKNAME}}||[[Category:{{#titleparts:{{PAGENAME}}|-1}}|{{{1|{{#titleparts:{{PAGENAME}}||-1}}}}} ]]{{#ifeq:{{FULLCHAPTERNAME}}|Templates| [[Category:Book-specific templates|{{{1|{{PAGENAME}}}}} ]]}}}}|#default={{#ifeq:{{{filing|}}}|deep|[[Category:{{#if:{{CHAPTERNAME}}|{{#titleparts:{{FULLPAGENAME}}|-1}}|{{FULLPAGENAME}}}}|{{{1|{{#if:{{CHAPTERNAME}}|{{#titleparts:{{PAGENAME}}||-1}}}}}}} ]]|[[Category:{{FULLBOOKNAME}}|{{{1|{{#titleparts:{{FULLPAGENAME}}||2}}}}} ]]}}}}}}</includeonly><noinclude>{{documentation}}</noinclude> t994yx1g7eqjrevy0t32v6w1lend0jh 14987 14986 2010-12-17T20:40:49Z Pi zero 2546 populate [[:Category:Pages with deep filing]]; also, simplified slightly and added whitespace to make it easier to read, similarly to Darklama's edit 14987 wikitext text/x-wiki <includeonly>{{#switch:{{NAMESPACE}} |{{TALKSPACE}}= |Template={{#ifeq: {{{template-filing|}}} | deep |[[Category:{{BOOKNAME}}/Templates{{#if:{{#titleparts:{{PAGENAME}}||3}}|/{{#titleparts:{{PAGENAME}}|-1|2}}}}|{{{1|{{#if:{{CHAPTERNAME}}|{{#titleparts:{{PAGENAME}}||-1}}}}}}} ]][[Category:Pages with deep filing]] |[[Category:{{BOOKNAME}}/Templates|{{{1|{{#titleparts:{{FULLPAGENAME}}||2}}}}} ]] }} |Category={{#ifeq: {{FULLCHAPTERNAME}} | {{FULLBOOKNAME}} | |[[Category:{{#titleparts:{{PAGENAME}}|-1}}|{{{1|{{#titleparts:{{PAGENAME}}||-1}}}}} ]] {{#ifeq: {{FULLCHAPTERNAME}} | Templates | [[Category:Book-specific templates|{{{1|{{PAGENAME}}}}} ]] }} }} |#default={{#ifeq: {{{filing|}}} | deep |[[Category:{{#if:{{CHAPTERNAME}}|{{#titleparts:{{FULLPAGENAME}}|-1}}|{{FULLPAGENAME}}}}|{{{1|{{#if:{{CHAPTERNAME}}|{{#titleparts:{{PAGENAME}}||-1}}}}}}} ]][[Category:Pages with deep filing]] |[[Category:{{FULLBOOKNAME}}|{{{1|{{#titleparts:{{FULLPAGENAME}}||2}}}}} ]] }} }}</includeonly><noinclude>{{documentation}}</noinclude> mjwb94g3rjkwis2kjfa4oi4jmuwcu56 14988 14987 2016-10-31T19:30:27Z Pi zero 2546 logically separate 14988 wikitext text/x-wiki <includeonly>{{#switch:{{NAMESPACE}} |{{TALKSPACE}}={{BookCat/talk}} |Template={{BookCat/template|1={{{1|}}}|template-filing={{{template-filing|}}}}} |Category={{BookCat/category|1={{{1|}}}}} |#default={{BookCat/default |1={{{1|}}}|filing={{{filing|}}}}} }}</includeonly><noinclude> {{documentation}} </noinclude> oz9fnkhharnd70nr8sh00w0dvc9tmhm 14989 14988 2016-10-31T20:35:05Z Pi zero 2546 subject 14989 wikitext text/x-wiki <includeonly>{{#switch:{{NAMESPACE}} |{{TALKSPACE}}={{BookCat/talk}} |Subject={{BookCat/subject}} |Template={{BookCat/template|1={{{1|}}}|template-filing={{{template-filing|}}}}} |Category={{BookCat/category|1={{{1|}}}}} |#default={{BookCat/default |1={{{1|}}}|filing={{{filing|}}}}} }}</includeonly><noinclude> {{documentation}} </noinclude> qw7g6y9t8zls97izaqlrmbu1bly14fq 14990 14989 2016-12-10T20:33:47Z Pi zero 2546 user 14990 wikitext text/x-wiki <includeonly>{{#switch:{{NAMESPACE}} |{{TALKSPACE}}={{BookCat/talk}} |Subject= {{BookCat/subject}} |Template={{BookCat/template|1={{{1|}}}|template-filing={{{template-filing|}}}}} |Category={{BookCat/category|1={{{1|}}}}} |User= {{BookCat/user |1={{{1|}}}|filing={{{filing|}}}}} |#default={{BookCat/default |1={{{1|}}}|filing={{{filing|}}}}} }}</includeonly><noinclude> {{documentation}} </noinclude> kbk18j5p7ofp0euvpn1x3mcg9821bmt 14991 14990 2017-12-19T10:08:36Z JackPotte 1965 Hardfix for [[Category:Book:Wikibooks:Userboxes]] 14991 wikitext text/x-wiki <includeonly>{{#switch:{{NAMESPACE}} |{{TALKSPACE}}={{BookCat/talk}} |Category ={{BookCat/category|1={{{1|}}}}} |Subject ={{BookCat/subject}} |Template ={{BookCat/template|1={{{1|}}}|template-filing={{{template-filing|}}}}} |User ={{BookCat/user |1={{{1|}}}|filing={{{filing|}}}}} |Wikibooks ={{BookCat/category|1={{{1|}}}}} |#default={{BookCat/default |1={{{1|}}}|filing={{{filing|}}}}} }}</includeonly><noinclude> {{documentation}} </noinclude> nah4r8djle2wxw21ktxq98fyzqaolf6 14992 14991 2018-01-28T13:15:45Z Pi zero 2546 who uses that parameter? 14992 wikitext text/x-wiki <includeonly>{{#switch:{{NAMESPACE}} |{{TALKSPACE}}={{BookCat/talk}} |Category ={{BookCat/category|1={{{1|}}}}} |Subject ={{BookCat/subject}} |Template ={{BookCat/template|1={{{1|}}}|template-filing={{{template-filing|}}}}} |User ={{BookCat/user |1={{{1|}}}|filing={{{filing|}}}}} |Wikibooks ={{BookCat/category|1={{{1|}}}}} |#default={{BookCat/default |1={{{1|}}}|filing={{{filing|}}}}} }}{{#ifeq:{{{1|nobody expects the Spanish Inquisition}}}|nobody expects the Spanish Inquisition||[[Category:Pages passing sort key to BookCat]]}}</includeonly><noinclude> {{documentation}} </noinclude> tv3thr9n0y0v2xpvqwic7a9r5vyftp7 14993 14992 2018-01-29T14:26:15Z Pi zero 2546 upgrade (see talk) 14993 wikitext text/x-wiki <includeonly>{{#invoke:TScope|shiftLeft|BookCat/core|1 |namespace={{#if:{{{1|}}}|{{NAMESPACE:{{{1}}}}}|{{NAMESPACE}}}} |pagename ={{#if:{{{1|}}}|{{PAGENAME:{{{1}}}}}|{{PAGENAME}}}} |sortkey ={{{sort|{{{sortkey}}}}}} }}{{#ifeq:{{{1|}}} |[[Category:Pages passing page name to BookCat]]}}<!-- -->{{#ifeq:{{{sort|{{{sortkey}}}}}}|[[Category:Pages passing sort key to BookCat]]}}</includeonly><noinclude> {{documentation}} </noinclude> dq75qtf0vynuf1pnns9d4qb5jzz1zoe 14994 14993 2018-01-29T14:58:23Z Pi zero 2546 fullpagename 14994 wikitext text/x-wiki <includeonly>{{#invoke:TScope|shiftLeft|BookCat/core|1 |namespace={{#if:{{{1|}}}|{{NAMESPACE:{{{1}}}}}|{{NAMESPACE}}}} |pagename ={{#if:{{{1|}}}|{{PAGENAME:{{{1}}}}}|{{PAGENAME}}}} |fullpagename ={{#if:{{{1|}}}|{{{1}}}|{{FULLPAGENAME}}}} |sortkey ={{{sort|{{{sortkey}}}}}} }}{{#ifeq:{{{1|}}} |[[Category:Pages passing page name to BookCat]]}}<!-- -->{{#ifeq:{{{sort|{{{sortkey}}}}}}|[[Category:Pages passing sort key to BookCat]]}}</includeonly><noinclude> {{documentation}} </noinclude> bvdd4f49d2ckr3175eqtbhct63iiq2a 14995 14994 2018-01-29T15:50:05Z Pi zero 2546 fix 14995 wikitext text/x-wiki <includeonly>{{#invoke:TScope|shiftLeft|BookCat/core|1 |namespace={{#if:{{{1|}}}|{{NAMESPACE:{{{1}}}}}|{{NAMESPACE}}}} |pagename ={{#if:{{{1|}}}|{{PAGENAME:{{{1}}}}}|{{PAGENAME}}}} |fullpagename ={{#if:{{{1|}}}|{{{1}}}|{{FULLPAGENAME}}}} |sortkey ={{{sort|{{{sortkey}}}}}} }}{{#if:{{{1|}}} |[[Category:Pages passing page name to BookCat]]}}<!-- -->{{#if:{{{sort|{{{sortkey}}}}}}|[[Category:Pages passing sort key to BookCat]]}}</includeonly><noinclude> {{documentation}} </noinclude> a2utzsunn0nphrbtathmbqrkmzcls31 14996 14995 2018-01-29T16:07:46Z Pi zero 2546 fix 14996 wikitext text/x-wiki <includeonly>{{#invoke:TScope|shiftLeft|BookCat/core|1 |namespace={{#if:{{{1|}}}|{{NAMESPACE:{{{1}}}}}|{{NAMESPACE}}}} |pagename ={{#if:{{{1|}}}|{{PAGENAME:{{{1}}}}}|{{PAGENAME}}}} |fullpagename ={{#if:{{{1|}}}|{{{1}}}|{{FULLPAGENAME}}}} |sortkey ={{{sort|{{{sortkey}}}}}} }}{{#if:{{{1|}}} |[[Category:Pages passing page name to BookCat]]}}<!-- -->{{#if:{{{sort|{{{sortkey|}}}}}}|[[Category:Pages passing sort key to BookCat]]}}</includeonly><noinclude> {{documentation}} </noinclude> q4r4eun68ym64tvq680wvepgjl8085m 14997 14996 2018-01-29T17:36:22Z Pi zero 2546 rv upgrade (see talk) 14997 wikitext text/x-wiki <includeonly>{{#switch:{{NAMESPACE}} |{{TALKSPACE}}={{BookCat/talk}} |Category ={{BookCat/category|1={{{1|}}}}} |Subject ={{BookCat/subject}} |Template ={{BookCat/template|1={{{1|}}}|template-filing={{{template-filing|}}}}} |User ={{BookCat/user |1={{{1|}}}|filing={{{filing|}}}}} |Wikibooks ={{BookCat/category|1={{{1|}}}}} |#default={{BookCat/default |1={{{1|}}}|filing={{{filing|}}}}} }}{{#ifeq:{{{1|nobody expects the Spanish Inquisition}}}|nobody expects the Spanish Inquisition||[[Category:Pages passing sort key to BookCat]]}}</includeonly><noinclude> {{documentation}} </noinclude> tv3thr9n0y0v2xpvqwic7a9r5vyftp7 14998 14997 2018-01-29T17:39:26Z Pi zero 2546 reinstate upgrade 14998 wikitext text/x-wiki <includeonly>{{#invoke:TScope|shiftLeft|BookCat/core|1 |namespace ={{#if:{{{1|}}}|{{NAMESPACE:{{{1}}}}}|{{NAMESPACE}}}} |pagename ={{#if:{{{1|}}}|{{PAGENAME:{{{1}}}}}|{{PAGENAME}}}} |fullpagename={{#if:{{{1|}}}|{{{1}}}|{{FULLPAGENAME}}}} |sortkey ={{{sort|{{{sortkey}}}}}} }}{{#if:{{{1|}}} |[[Category:Pages passing page name to BookCat]]}}<!-- -->{{#if:{{{sort|{{{sortkey|}}}}}}|[[Category:Pages passing sort key to BookCat]]}}</includeonly><noinclude> {{documentation}} </noinclude> 7h09orai2n9u8gfsssqdizpkfo0b0lw 14999 11344 2026-08-01T17:29:26Z QueerEcofeminist 1879 [[:en:Template:BookCat]] पासून ४२ आवर्तने आयात केलीत 11343 wikitext text/x-wiki <includeonly>{{#invoke:TScope|shiftLeft|BookCat/core|1 |namespace ={{#if:{{{1|}}}|{{NAMESPACE:{{{1}}}}}|{{NAMESPACE}}}} |pagename ={{#if:{{{1|}}}|{{PAGENAME:{{{1}}}}}|{{PAGENAME}}}} |fullpagename={{#if:{{{1|}}}|{{{1}}}|{{FULLPAGENAME}}}} |sortkey ={{{sort|{{{sortkey|}}}}}} }}{{#if:{{{1|}}} |[[Category:Pages passing page name to BookCat]]}}<!-- -->{{#if:{{{sort|{{{sortkey|}}}}}}|[[Category:Pages passing sort key to BookCat]]}}</includeonly><noinclude> {{documentation}} </noinclude> nw1barqxaok3ax2jtswg2fq40n07xkm साचा:BookCat/core 10 3612 15000 2018-01-29T04:50:24Z Pi zero 2546 create 15000 wikitext text/x-wiki <includeonly>{{#invoke:TScope|override|BookCat/{{#switch:{{{namespace}}} |{{TALKSPACE:{{{namespace}}}:}}=talk |Category =category |Subject =subject |Template =template |User =user |Wikibooks=category |#default =default }}}}</includeonly><noinclude> {{documentation}} </noinclude> 9e3ax74znvbw52an6zjvdy1cveyym1c 15001 15000 2018-01-29T04:51:17Z Pi zero 2546 Protected "[[Template:BookCat/core]]": High-impact page: Matching protection on parent ([Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite)) 15000 wikitext text/x-wiki <includeonly>{{#invoke:TScope|override|BookCat/{{#switch:{{{namespace}}} |{{TALKSPACE:{{{namespace}}}:}}=talk |Category =category |Subject =subject |Template =template |User =user |Wikibooks=category |#default =default }}}}</includeonly><noinclude> {{documentation}} </noinclude> 9e3ax74znvbw52an6zjvdy1cveyym1c 15002 15001 2018-01-29T14:19:37Z Pi zero 2546 tweak 15002 wikitext text/x-wiki <includeonly>{{#invoke:TScope|override|BookCat/{{#switch:{{{namespace}}} |{{TALKSPACE:{{{namespace}}}:{{{pagename}}}}}=talk |Category =category |Subject =subject |Template =template |User =user |Wikibooks=category |#default =default }}}}</includeonly><noinclude> {{documentation}} </noinclude> dez0v0539bxleghiinfebr79wtmreej 15003 11346 2026-08-01T17:29:26Z QueerEcofeminist 1879 [[:en:Template:BookCat/core]] पासून ३ आवर्तने आयात केलीत 11345 wikitext text/x-wiki <includeonly>{{#invoke:TScope|override|BookCat/{{#switch:{{{namespace}}} |{{TALKSPACE:{{{namespace}}}:{{{pagename}}}}}=talk |Category =category |Subject =subject |Template =template |User =user |Wikibooks=category |={{evalx| (let (x (get-arg 2)) (if (equal? (get-substring x 1 11) "Department:") "department" (if (equal? (get-substring x 1 6) "Shelf:") "shelf" "default"))) |{{ucfirst:{{{pagename}}}}}}} |#default =default }}}}</includeonly><noinclude> {{documentation}} </noinclude> 8tn25ac4mqo1m1z6kwtwsnkadjnnq8d उकडलेली अंडी 0 4156 14338 2026-08-01T16:34:34Z QueerEcofeminist 1879 भर 14338 wikitext text/x-wiki {{recipe summary | category = | servings = | time = ३० मिनिटे | difficulty = 3 <!-- Should if provided contain a number between 1 and 5 --> | image = | energy = <!-- Should if provided contain the number of calories and cal (can include kJ)--> | note = }} '''उकडलेली अंडी''' हा अतिशय सोपा आणि पौष्टिक नाष्टाचा पदार्थ आहे. त्यात आपल्या गरजेनुसार आणि आवडीनुसार मीठ, बारीक कापलेला कांदा आणि कोथिंबीर भुरभुरता येते. ==साहित्य == * कोंबडीची अंडी * मीठ * चाट मसाला * कोथिंबीर * कांदा ==कृती == ==नोंद == 4gjuxdhkr78s13zfpsd0oa373j9b2pw 14339 14338 2026-08-01T16:36:14Z QueerEcofeminist 1879 भर 14339 wikitext text/x-wiki {{recipe summary | category = | servings = | time = ३० मिनिटे | difficulty = 3 <!-- Should if provided contain a number between 1 and 5 --> | image = | energy = <!-- Should if provided contain the number of calories and cal (can include kJ)--> | note = }} '''उकडलेली अंडी''' हा अतिशय सोपा आणि पौष्टिक नाष्टाचा पदार्थ आहे. त्यात आपल्या गरजेनुसार आणि आवडीनुसार मीठ, बारीक कापलेला कांदा आणि कोथिंबीर भुरभुरता येते. ==साहित्य == * कोंबडीची अंडी * मीठ * चाट मसाला * कोथिंबीर * कांदा ==कृती == * अंडी धुवून उकडून घ्यावीत, साधारण पूर्ण उकडण्यास १५ ते २० उकडावे लागते. * त्यात उकडताना मीठ घालता येते किंवा नंतर सुद्धा वरुन घालता येते. ==नोंद == 7yo6ow3yey6v84axog1lami2oolukpb 14340 14339 2026-08-01T16:38:23Z QueerEcofeminist 1879 bhar 14340 wikitext text/x-wiki {{recipe summary | category = | servings = | time = २० मिनिटे | difficulty = 1 <!-- Should if provided contain a number between 1 and 5 --> | image =[[file:Bioled eggs.jpg|300px]] | energy = <!-- Should if provided contain the number of calories and cal (can include kJ)--> | note = }} '''उकडलेली अंडी''' हा अतिशय सोपा आणि पौष्टिक नाष्टाचा पदार्थ आहे. त्यात आपल्या गरजेनुसार आणि आवडीनुसार मीठ, बारीक कापलेला कांदा आणि कोथिंबीर भुरभुरता येते. ==साहित्य == * कोंबडीची अंडी * मीठ * चाट मसाला * कोथिंबीर * कांदा ==कृती == * अंडी धुवून उकडून घ्यावीत, साधारण पूर्ण उकडण्यास १५ ते २० उकडावे लागते. * त्यात उकडताना मीठ घालता येते किंवा नंतर सुद्धा वरुन घालता येते. ==नोंद == gafxcdan1vog7auk07b86k5k9jvltt0 14341 14340 2026-08-01T16:41:38Z QueerEcofeminist 1879 भर 14341 wikitext text/x-wiki {{recipe summary | category = | servings = | time = २० मिनिटे | difficulty = 1 <!-- Should if provided contain a number between 1 and 5 --> | image =[[file:Bioled eggs.jpg|300px]] | energy = <!-- Should if provided contain the number of calories and cal (can include kJ)--> | note = }} '''उकडलेली अंडी''' हा अतिशय सोपा आणि पौष्टिक नाष्टाचा पदार्थ आहे. त्यात आपल्या गरजेनुसार आणि आवडीनुसार मीठ, बारीक कापलेला कांदा आणि कोथिंबीर भुरभुरता येते. ==साहित्य == * कोंबडीची अंडी * मीठ * चाट मसाला * कोथिंबीर * कांदा ==कृती == * अंडी धुवून उकडून घ्यावीत, साधारण पूर्ण उकडण्यास १५ ते २० मिनिटे उकडावे लागते. * त्यात उकडताना मीठ घालता येते किंवा नंतर सुद्धा वरुन घालता येते. * आपल्या आवश्यकते नुसार १५ मिनिटे किंवा २० मिनिटे उकडून * त्या नंतर ती थंड पाण्यात २ / ३ मिनिटे बुडवून ठेवावीत म्हणजे ती सोलून घेणे सोपे होते. * पटकन सोलण्यासाठी ती दोन्ही हातामध्ये अलगद धरून चोळून घेतल्यास साल मोडते आणि ते चटकन वेगळे करता येते. ==नोंद == nki8nqszajylvq8om3ec4twfw3rrzar वर्ग:पराठे 14 4157 14346 2026-08-01T17:12:16Z QueerEcofeminist 1879 + 14346 wikitext text/x-wiki phoiac9h4m842xq45sp7s6u21eteeq1 14347 14346 2026-08-01T17:12:36Z QueerEcofeminist 1879 added [[Category:पोळी]] using [[Help:Gadget-HotCat|HotCat]] 14347 wikitext text/x-wiki [[वर्ग:पोळी]] rz8biqj5f2a579v0n76faje8941idal मिडियाविकी:Gadget-wikidialog.js 8 4158 14532 2015-01-03T19:32:27Z Pi zero 2546 create 14532 javascript text/javascript /* This script provides a function to set up dialog fields and buttons based on markup generated by [[:Category:dialog formatting templates|dialog formatting templates]]. Any javascript page importing this page should also contain a commented link to it, for [[Special:WhatLinksHere/{{FULLPAGENAME}}]]. For instructions, see the [[{{TALKPAGENAME}}|talk page]]. [[Category:Dialog javascript pages]] */ if (! window.wikidialog) window.wikidialog = {}; if (! window.wikidialog.show) { window.wikidialog.show = function () { // // [[Template:Dialog/text|text]] // var things = $('span.wikidialog-text'); var thingIds = things.map(function () { return $(this).attr('id'); }); things.replaceWith(function (idx) { if ((idx > 0) && (thingIds[idx] == thingIds[idx - 1])) { return ''; } var s = $(this).text(); // .substring(0,1024); // BOUND TEXT CONTENT SIZE var d = ''; if ( s.search(/^size=(\d*)&/) == 0) { d = s.match(/^size=(\d*)&(.*)/); s = d[2]; d = d[1]; } for (var j = idx + 1; j < thingIds.length; j++) { if (thingIds[idx] == thingIds[j]) { s += ' ' + $(things[j]).text(); } else break; } var e = $(document.createElement('input')).attr('type','text').addClass('wikidialog-text').attr('id',thingIds[idx]).val(s).attr('size',d); if ($(this).is('.wikidialog-hidden')) e.css('display','none'); return e; }); // // [[Template:Dialog/textarea|textarea]] // things = $('span.wikidialog-textarea'); thingIds = things.map(function () { return $(this).attr('id'); }); things.replaceWith(function (idx) { if ((idx > 0) && (thingIds[idx] == thingIds[idx - 1])) { return ' '; } var s = $(this).text(); // .substring(0,131072); // BOUND TEXTAREA CONTENT SIZE var c = ''; if ( s.search(/^cols=(\d*)&/) == 0) { c = s.match(/^cols=(\d*)&(.*)/); s = c[2]; c = c[1]; } var r = ''; if ( s.search(/^rows=(\d*)&/) == 0) { r = s.match(/^rows=(\d*)&(.*)/); s = r[2]; r = r[1]; } for (var j = idx + 1; j < thingIds.length; j++) { if (thingIds[idx] == thingIds[j]) { s += '\n' + $(things[j]).text(); } else break; } var e = $(document.createElement('textarea')).addClass('wikidialog-textarea').attr('id',thingIds[idx]).attr('cols',c).attr('rows',r).val(s); if ($(this).is('.wikidialog-hidden')) e.css('display','none'); return e; }); // // [[Template:Dialog/checkbox|checkbox]] // $('span.wikidialog-checkbox').replaceWith(function () { var i = $(this).attr('id'); var s = $(this).text(); // .substring(0,32); // BOUND CHECKBOX CONTENT SIZE var result = $(document.createElement('input')).attr('type','checkbox').addClass('wikidialog-checkbox').attr('id',i); if (s.length > 8) result.attr('checked','yes'); return result; }); // // [[Template:Dialog/select|select]] // $('span.wikidialog-select').replaceWith(function () { var i = $(this).attr('id'); var s = $(this).text().split('&'); // .substring(0,8192).split('&'); // BOUND SELECT CONTENT SIZE var e = document.createElement('select'); for (var k=1; (k < s.length); k += 2) if (s[k-1]) { e.appendChild(new Option(s[k-1],s[k],false,false)); } return $(e).addClass('wikidialog-select').attr('id',i); }); // // [[Template:Dialog/button|button]] // $('span.wikidialog-button').replaceWith(function () { function getWikidialogID() { var s = location.search.match(/[\?&]wikidialogid=(\d+)/); return (s && s.length && (s.length > 1)) ? Number(s[1]) : 0; } function handleButton(event) { var target = $(event.target); var wikidialogButtonData = target.data('wikidialogButtonData'); var action = wikidialogButtonData.action; if (action.substring(0,5).toLowerCase() == 'user:') { var ug = mw.config.get('wgUserGroups'); if (!ug || ug.join(' ').indexOf("sysop") === -1) { alert('action requires admin privs: ' + action); return; } } else { action = mw.config.get('wgSiteName') + ':Dialog/' + action; } // action must be fully protected $.getJSON( mw.util.wikiScript('api'), { format: 'json', action: 'query', prop: 'info', inprop: 'protection', titles: action } ).done( function(data) { var s = ''; if (data.query && data.query.pages) for (var p in data.query.pages) { if ("missing" in data.query.pages[p]) s = 'page not found'; else if ('invalid' in data.query.pages[p]) s = 'page name invalid'; else if ('protection' in data.query.pages[p]) { if (data.query.pages[p].protection[0] && data.query.pages[p].protection[1]) { if (('level' in data.query.pages[p].protection[0]) && ('level' in data.query.pages[p].protection[1])) { if ((data.query.pages[p].protection[0].level == 'sysop') && (data.query.pages[p].protection[1].level == 'sysop')) { } else s = 'page unsecured'; } else s = 'page query misfired'; } else s = 'page unsecured'; } else s = 'page query misfired'; } else s = 'page query failed'; if (s) { alert(s + ': ' + action); return; } // action is now known to be fully protected // sessionStorage.wikidialogNextID was assured before setting up the button var id = sessionStorage.wikidialogNextID; s = mw.util.getUrl(action) + '?wikidialogid=' + id; sessionStorage.wikidialogNextID++; sessionStorage[id + ':incoming'] = s; sessionStorage[id + ':prevurl'] = location.href; // provided for rollback if ('unauth' in wikidialogButtonData) sessionStorage[id + ':unauth'] = wikidialogButtonData.unauth; else sessionStorage[id + ':unauth'] = mw.config.get('wgPageName'); if ('origin' in wikidialogButtonData) sessionStorage[id + ':origin'] = wikidialogButtonData.origin; if ('proxy' in wikidialogButtonData) sessionStorage[id + ':proxy'] = wikidialogButtonData.proxy; sessionStorage[id + ':params'] = ''; for (var j = 0; j < wikidialogButtonData.length; j++) { var d = wikidialogButtonData[j].match(/[\w-]+/g); d[1] = (d[1] ? d[1] : d[0]); d[1] = $('input#wikidialog-' + d[1] + ', textarea#wikidialog-' + d[1] + ', select#wikidialog-' + d[1]); if (d[1].length == 0) { } else { sessionStorage[id + ':params'] += d[0] + ','; var elt = d[1].first(); d[1] = d[1].add(target); for (var k = 0; k < d[1].length; k++) { if ($(d[1][k]).hasClass('wikidialog-button')) { k++; if (k < d[1].length) elt = $(d[1][k]); break; } } switch (elt.attr('type')) { case 'checkbox': d[1] = (elt[0].checked ? 'yes' : ''); break; default: d[1] = elt.val(); break; } sessionStorage[id + ':in:' + d[0]] = d[1]; } } location = s; } ).fail( function() { alert('action target check failed: ' + action); } ); } if (! (sessionStorage)) { // allows handler to assume sessionStorage return "<font color=red>&lt;button requires sessionStorage (not found; perhaps your browser is out of date?)&gt;</font>"; } if (sessionStorage.wikidialogNextID) {} else sessionStorage.wikidialogNextID = '1'; if (Number(sessionStorage.wikidialogNextID) <= getWikidialogID()) { alert('Warning: session data may be inaccessible\n(dialog ID should be less than stored count:\n dialog ID is ' + getWikidialogID() + '\n stored count is ' + sessionStorage.wikidialogNextID + ')'); sessionStorage.wikidialogNextID = getWikidialogID() + 1; } var s = $(this).text(); // .substring(0,1024); // BOUND BUTTON CONTENT SIZE var a = ''; if ( s.search(/^action=([\w\s-\/:]+)&/) == 0) { a = s.match(/^action=([\w\s-\/:]+)&(.*)/); s = a[2]; a = a[1]; } var b = ''; if ( s.search(/^label=([\w\s-\/\:\(\)]+)&/) == 0) { b = s.match(/^label=([\w\s-\/\:\(\)]+)&(.*)/); s = b[2]; b = b[1]; } var wikidialogButtonData = $(this).data(); if ('wikidialogButtonData' in wikidialogButtonData) wikidialogButtonData = wikidialogButtonData.wikidialogButtonData; else wikidialogButtondata = {}; wikidialogButtonData.action = a; wikidialogButtonData.length = 0; var s = s.match(/([\w-]+:?[\w-]*)&/g); if (s != null) { wikidialogButtonData.length = s.length; for (var j = 0; j < s.length; j++) { wikidialogButtonData[j] = s[j].substring(0,s[j].length - 1); } } return $(document.createElement('input')).attr('type','button').addClass(this.className).val(b).attr('title',a).data('wikidialogButtonData',wikidialogButtonData).click(handleButton); }); // // [[Template:Dialog/ifsupported|ifsupported]] // if (sessionStorage) { $('.wikidialog-alternative').css('display','none'); $('.wikidialog-dependent').css('display','inline'); } }; } window.wikidialog.show(); g5byrrkcilsdh54opq1rfq4zlgxq1yu 14533 14532 2015-01-30T12:30:09Z Pi zero 2546 more punctuation in button labels 14533 javascript text/javascript /* This script provides a function to set up dialog fields and buttons based on markup generated by [[:Category:dialog formatting templates|dialog formatting templates]]. Any javascript page importing this page should also contain a commented link to it, for [[Special:WhatLinksHere/{{FULLPAGENAME}}]]. For instructions, see the [[{{TALKPAGENAME}}|talk page]]. [[Category:Dialog javascript pages]] */ if (! window.wikidialog) window.wikidialog = {}; if (! window.wikidialog.show) { window.wikidialog.show = function () { // // [[Template:Dialog/text|text]] // var things = $('span.wikidialog-text'); var thingIds = things.map(function () { return $(this).attr('id'); }); things.replaceWith(function (idx) { if ((idx > 0) && (thingIds[idx] == thingIds[idx - 1])) { return ''; } var s = $(this).text(); // .substring(0,1024); // BOUND TEXT CONTENT SIZE var d = ''; if ( s.search(/^size=(\d*)&/) == 0) { d = s.match(/^size=(\d*)&(.*)/); s = d[2]; d = d[1]; } for (var j = idx + 1; j < thingIds.length; j++) { if (thingIds[idx] == thingIds[j]) { s += ' ' + $(things[j]).text(); } else break; } var e = $(document.createElement('input')).attr('type','text').addClass('wikidialog-text').attr('id',thingIds[idx]).val(s).attr('size',d); if ($(this).is('.wikidialog-hidden')) e.css('display','none'); return e; }); // // [[Template:Dialog/textarea|textarea]] // things = $('span.wikidialog-textarea'); thingIds = things.map(function () { return $(this).attr('id'); }); things.replaceWith(function (idx) { if ((idx > 0) && (thingIds[idx] == thingIds[idx - 1])) { return ' '; } var s = $(this).text(); // .substring(0,131072); // BOUND TEXTAREA CONTENT SIZE var c = ''; if ( s.search(/^cols=(\d*)&/) == 0) { c = s.match(/^cols=(\d*)&(.*)/); s = c[2]; c = c[1]; } var r = ''; if ( s.search(/^rows=(\d*)&/) == 0) { r = s.match(/^rows=(\d*)&(.*)/); s = r[2]; r = r[1]; } for (var j = idx + 1; j < thingIds.length; j++) { if (thingIds[idx] == thingIds[j]) { s += '\n' + $(things[j]).text(); } else break; } var e = $(document.createElement('textarea')).addClass('wikidialog-textarea').attr('id',thingIds[idx]).attr('cols',c).attr('rows',r).val(s); if ($(this).is('.wikidialog-hidden')) e.css('display','none'); return e; }); // // [[Template:Dialog/checkbox|checkbox]] // $('span.wikidialog-checkbox').replaceWith(function () { var i = $(this).attr('id'); var s = $(this).text(); // .substring(0,32); // BOUND CHECKBOX CONTENT SIZE var result = $(document.createElement('input')).attr('type','checkbox').addClass('wikidialog-checkbox').attr('id',i); if (s.length > 8) result.attr('checked','yes'); return result; }); // // [[Template:Dialog/select|select]] // $('span.wikidialog-select').replaceWith(function () { var i = $(this).attr('id'); var s = $(this).text().split('&'); // .substring(0,8192).split('&'); // BOUND SELECT CONTENT SIZE var e = document.createElement('select'); for (var k=1; (k < s.length); k += 2) if (s[k-1]) { e.appendChild(new Option(s[k-1],s[k],false,false)); } return $(e).addClass('wikidialog-select').attr('id',i); }); // // [[Template:Dialog/button|button]] // $('span.wikidialog-button').replaceWith(function () { function getWikidialogID() { var s = location.search.match(/[\?&]wikidialogid=(\d+)/); return (s && s.length && (s.length > 1)) ? Number(s[1]) : 0; } function handleButton(event) { var target = $(event.target); var wikidialogButtonData = target.data('wikidialogButtonData'); var action = wikidialogButtonData.action; if (action.substring(0,5).toLowerCase() == 'user:') { var ug = mw.config.get('wgUserGroups'); if (!ug || ug.join(' ').indexOf("sysop") === -1) { alert('action requires admin privs: ' + action); return; } } else { action = mw.config.get('wgSiteName') + ':Dialog/' + action; } // action must be fully protected $.getJSON( mw.util.wikiScript('api'), { format: 'json', action: 'query', prop: 'info', inprop: 'protection', titles: action } ).done( function(data) { var s = ''; if (data.query && data.query.pages) for (var p in data.query.pages) { if ("missing" in data.query.pages[p]) s = 'page not found'; else if ('invalid' in data.query.pages[p]) s = 'page name invalid'; else if ('protection' in data.query.pages[p]) { if (data.query.pages[p].protection[0] && data.query.pages[p].protection[1]) { if (('level' in data.query.pages[p].protection[0]) && ('level' in data.query.pages[p].protection[1])) { if ((data.query.pages[p].protection[0].level == 'sysop') && (data.query.pages[p].protection[1].level == 'sysop')) { } else s = 'page unsecured'; } else s = 'page query misfired'; } else s = 'page unsecured'; } else s = 'page query misfired'; } else s = 'page query failed'; if (s) { alert(s + ': ' + action); return; } // action is now known to be fully protected // sessionStorage.wikidialogNextID was assured before setting up the button var id = sessionStorage.wikidialogNextID; s = mw.util.getUrl(action) + '?wikidialogid=' + id; sessionStorage.wikidialogNextID++; sessionStorage[id + ':incoming'] = s; sessionStorage[id + ':prevurl'] = location.href; // provided for rollback if ('unauth' in wikidialogButtonData) sessionStorage[id + ':unauth'] = wikidialogButtonData.unauth; else sessionStorage[id + ':unauth'] = mw.config.get('wgPageName'); if ('origin' in wikidialogButtonData) sessionStorage[id + ':origin'] = wikidialogButtonData.origin; if ('proxy' in wikidialogButtonData) sessionStorage[id + ':proxy'] = wikidialogButtonData.proxy; sessionStorage[id + ':params'] = ''; for (var j = 0; j < wikidialogButtonData.length; j++) { var d = wikidialogButtonData[j].match(/[\w-]+/g); d[1] = (d[1] ? d[1] : d[0]); d[1] = $('input#wikidialog-' + d[1] + ', textarea#wikidialog-' + d[1] + ', select#wikidialog-' + d[1]); if (d[1].length == 0) { } else { sessionStorage[id + ':params'] += d[0] + ','; var elt = d[1].first(); d[1] = d[1].add(target); for (var k = 0; k < d[1].length; k++) { if ($(d[1][k]).hasClass('wikidialog-button')) { k++; if (k < d[1].length) elt = $(d[1][k]); break; } } switch (elt.attr('type')) { case 'checkbox': d[1] = (elt[0].checked ? 'yes' : ''); break; default: d[1] = elt.val(); break; } sessionStorage[id + ':in:' + d[0]] = d[1]; } } location = s; } ).fail( function() { alert('action target check failed: ' + action); } ); } if (! (sessionStorage)) { // allows handler to assume sessionStorage return "<font color=red>&lt;button requires sessionStorage (not found; perhaps your browser is out of date?)&gt;</font>"; } if (sessionStorage.wikidialogNextID) {} else sessionStorage.wikidialogNextID = '1'; if (Number(sessionStorage.wikidialogNextID) <= getWikidialogID()) { alert('Warning: session data may be inaccessible\n(dialog ID should be less than stored count:\n dialog ID is ' + getWikidialogID() + '\n stored count is ' + sessionStorage.wikidialogNextID + ')'); sessionStorage.wikidialogNextID = getWikidialogID() + 1; } var s = $(this).text(); // .substring(0,1024); // BOUND BUTTON CONTENT SIZE var a = ''; if ( s.search(/^action=([\w\s-\/:]+)&/) == 0) { a = s.match(/^action=([\w\s-\/:]+)&(.*)/); s = a[2]; a = a[1]; } var b = ''; if ( s.search(/^label=([\w\s-\/\:\(\)\.\,\;]+)&/) == 0) { b = s.match(/^label=([\w\s-\/\:\(\)\.\,\;]+)&(.*)/); s = b[2]; b = b[1]; } var wikidialogButtonData = $(this).data(); if ('wikidialogButtonData' in wikidialogButtonData) wikidialogButtonData = wikidialogButtonData.wikidialogButtonData; else wikidialogButtondata = {}; wikidialogButtonData.action = a; wikidialogButtonData.length = 0; var s = s.match(/([\w-]+:?[\w-]*)&/g); if (s != null) { wikidialogButtonData.length = s.length; for (var j = 0; j < s.length; j++) { wikidialogButtonData[j] = s[j].substring(0,s[j].length - 1); } } return $(document.createElement('input')).attr('type','button').addClass(this.className).val(b).attr('title',a).data('wikidialogButtonData',wikidialogButtonData).click(handleButton); }); // // [[Template:Dialog/ifsupported|ifsupported]] // if (sessionStorage) { $('.wikidialog-alternative').css('display','none'); $('.wikidialog-dependent').css('display','inline'); } }; } window.wikidialog.show(); 0clscalll7t38611zbcuyt7gr15hvok 14534 14533 2015-03-03T15:14:11Z Pi zero 2546 more punctuation in button labels 14534 javascript text/javascript /* This script provides a function to set up dialog fields and buttons based on markup generated by [[:Category:dialog formatting templates|dialog formatting templates]]. Any javascript page importing this page should also contain a commented link to it, for [[Special:WhatLinksHere/{{FULLPAGENAME}}]]. For instructions, see the [[{{TALKPAGENAME}}|talk page]]. [[Category:Dialog javascript pages]] */ if (! window.wikidialog) window.wikidialog = {}; if (! window.wikidialog.show) { window.wikidialog.show = function () { // // [[Template:Dialog/text|text]] // var things = $('span.wikidialog-text'); var thingIds = things.map(function () { return $(this).attr('id'); }); things.replaceWith(function (idx) { if ((idx > 0) && (thingIds[idx] == thingIds[idx - 1])) { return ''; } var s = $(this).text(); // .substring(0,1024); // BOUND TEXT CONTENT SIZE var d = ''; if ( s.search(/^size=(\d*)&/) == 0) { d = s.match(/^size=(\d*)&(.*)/); s = d[2]; d = d[1]; } for (var j = idx + 1; j < thingIds.length; j++) { if (thingIds[idx] == thingIds[j]) { s += ' ' + $(things[j]).text(); } else break; } var e = $(document.createElement('input')).attr('type','text').addClass('wikidialog-text').attr('id',thingIds[idx]).val(s).attr('size',d); if ($(this).is('.wikidialog-hidden')) e.css('display','none'); return e; }); // // [[Template:Dialog/textarea|textarea]] // things = $('span.wikidialog-textarea'); thingIds = things.map(function () { return $(this).attr('id'); }); things.replaceWith(function (idx) { if ((idx > 0) && (thingIds[idx] == thingIds[idx - 1])) { return ' '; } var s = $(this).text(); // .substring(0,131072); // BOUND TEXTAREA CONTENT SIZE var c = ''; if ( s.search(/^cols=(\d*)&/) == 0) { c = s.match(/^cols=(\d*)&(.*)/); s = c[2]; c = c[1]; } var r = ''; if ( s.search(/^rows=(\d*)&/) == 0) { r = s.match(/^rows=(\d*)&(.*)/); s = r[2]; r = r[1]; } for (var j = idx + 1; j < thingIds.length; j++) { if (thingIds[idx] == thingIds[j]) { s += '\n' + $(things[j]).text(); } else break; } var e = $(document.createElement('textarea')).addClass('wikidialog-textarea').attr('id',thingIds[idx]).attr('cols',c).attr('rows',r).val(s); if ($(this).is('.wikidialog-hidden')) e.css('display','none'); return e; }); // // [[Template:Dialog/checkbox|checkbox]] // $('span.wikidialog-checkbox').replaceWith(function () { var i = $(this).attr('id'); var s = $(this).text(); // .substring(0,32); // BOUND CHECKBOX CONTENT SIZE var result = $(document.createElement('input')).attr('type','checkbox').addClass('wikidialog-checkbox').attr('id',i); if (s.length > 8) result.attr('checked','yes'); return result; }); // // [[Template:Dialog/select|select]] // $('span.wikidialog-select').replaceWith(function () { var i = $(this).attr('id'); var s = $(this).text().split('&'); // .substring(0,8192).split('&'); // BOUND SELECT CONTENT SIZE var e = document.createElement('select'); for (var k=1; (k < s.length); k += 2) if (s[k-1]) { e.appendChild(new Option(s[k-1],s[k],false,false)); } return $(e).addClass('wikidialog-select').attr('id',i); }); // // [[Template:Dialog/button|button]] // $('span.wikidialog-button').replaceWith(function () { function getWikidialogID() { var s = location.search.match(/[\?&]wikidialogid=(\d+)/); return (s && s.length && (s.length > 1)) ? Number(s[1]) : 0; } function handleButton(event) { var target = $(event.target); var wikidialogButtonData = target.data('wikidialogButtonData'); var action = wikidialogButtonData.action; if (action.substring(0,5).toLowerCase() == 'user:') { var ug = mw.config.get('wgUserGroups'); if (!ug || ug.join(' ').indexOf("sysop") === -1) { alert('action requires admin privs: ' + action); return; } } else { action = mw.config.get('wgSiteName') + ':Dialog/' + action; } // action must be fully protected $.getJSON( mw.util.wikiScript('api'), { format: 'json', action: 'query', prop: 'info', inprop: 'protection', titles: action } ).done( function(data) { var s = ''; if (data.query && data.query.pages) for (var p in data.query.pages) { if ("missing" in data.query.pages[p]) s = 'page not found'; else if ('invalid' in data.query.pages[p]) s = 'page name invalid'; else if ('protection' in data.query.pages[p]) { if (data.query.pages[p].protection[0] && data.query.pages[p].protection[1]) { if (('level' in data.query.pages[p].protection[0]) && ('level' in data.query.pages[p].protection[1])) { if ((data.query.pages[p].protection[0].level == 'sysop') && (data.query.pages[p].protection[1].level == 'sysop')) { } else s = 'page unsecured'; } else s = 'page query misfired'; } else s = 'page unsecured'; } else s = 'page query misfired'; } else s = 'page query failed'; if (s) { alert(s + ': ' + action); return; } // action is now known to be fully protected // sessionStorage.wikidialogNextID was assured before setting up the button var id = sessionStorage.wikidialogNextID; s = mw.util.getUrl(action) + '?wikidialogid=' + id; sessionStorage.wikidialogNextID++; sessionStorage[id + ':incoming'] = s; sessionStorage[id + ':prevurl'] = location.href; // provided for rollback if ('unauth' in wikidialogButtonData) sessionStorage[id + ':unauth'] = wikidialogButtonData.unauth; else sessionStorage[id + ':unauth'] = mw.config.get('wgPageName'); if ('origin' in wikidialogButtonData) sessionStorage[id + ':origin'] = wikidialogButtonData.origin; if ('proxy' in wikidialogButtonData) sessionStorage[id + ':proxy'] = wikidialogButtonData.proxy; sessionStorage[id + ':params'] = ''; for (var j = 0; j < wikidialogButtonData.length; j++) { var d = wikidialogButtonData[j].match(/[\w-]+/g); d[1] = (d[1] ? d[1] : d[0]); d[1] = $('input#wikidialog-' + d[1] + ', textarea#wikidialog-' + d[1] + ', select#wikidialog-' + d[1]); if (d[1].length == 0) { } else { sessionStorage[id + ':params'] += d[0] + ','; var elt = d[1].first(); d[1] = d[1].add(target); for (var k = 0; k < d[1].length; k++) { if ($(d[1][k]).hasClass('wikidialog-button')) { k++; if (k < d[1].length) elt = $(d[1][k]); break; } } switch (elt.attr('type')) { case 'checkbox': d[1] = (elt[0].checked ? 'yes' : ''); break; default: d[1] = elt.val(); break; } sessionStorage[id + ':in:' + d[0]] = d[1]; } } location = s; } ).fail( function() { alert('action target check failed: ' + action); } ); } if (! (sessionStorage)) { // allows handler to assume sessionStorage return "<font color=red>&lt;button requires sessionStorage (not found; perhaps your browser is out of date?)&gt;</font>"; } if (sessionStorage.wikidialogNextID) {} else sessionStorage.wikidialogNextID = '1'; if (Number(sessionStorage.wikidialogNextID) <= getWikidialogID()) { alert('Warning: session data may be inaccessible\n(dialog ID should be less than stored count:\n dialog ID is ' + getWikidialogID() + '\n stored count is ' + sessionStorage.wikidialogNextID + ')'); sessionStorage.wikidialogNextID = getWikidialogID() + 1; } var s = $(this).text(); // .substring(0,1024); // BOUND BUTTON CONTENT SIZE var a = ''; if ( s.search(/^action=([\w\s-\/:]+)&/) == 0) { a = s.match(/^action=([\w\s-\/:]+)&(.*)/); s = a[2]; a = a[1]; } var b = ''; if ( s.search(/^label=([\w\s-\/\:\(\)\.\,\;']+)&/) == 0) { // STUFF ALLOWED IN BUTTON LABELS b = s.match(/^label=([\w\s-\/\:\(\)\.\,\;']+)&(.*)/); // STUFF ALLOWED IN BUTTON LABELS s = b[2]; b = b[1]; } var wikidialogButtonData = $(this).data(); if ('wikidialogButtonData' in wikidialogButtonData) wikidialogButtonData = wikidialogButtonData.wikidialogButtonData; else wikidialogButtondata = {}; wikidialogButtonData.action = a; wikidialogButtonData.length = 0; var s = s.match(/([\w-]+:?[\w-]*)&/g); if (s != null) { wikidialogButtonData.length = s.length; for (var j = 0; j < s.length; j++) { wikidialogButtonData[j] = s[j].substring(0,s[j].length - 1); } } return $(document.createElement('input')).attr('type','button').addClass(this.className).val(b).attr('title',a).data('wikidialogButtonData',wikidialogButtonData).click(handleButton); }); // // [[Template:Dialog/ifsupported|ifsupported]] // if (sessionStorage) { $('.wikidialog-alternative').css('display','none'); $('.wikidialog-dependent').css('display','inline'); } }; } window.wikidialog.show(); at117ai2e6qmruhjbuqxyz96i0ow9of 14535 14534 2015-06-06T19:07:48Z Pi zero 2546 rescript 14535 javascript text/javascript /* This script provides a function to set up dialog fields and buttons based on markup generated by [[:Category:dialog formatting templates|dialog formatting templates]]. Any javascript page importing this page should also contain a commented link to it, for [[Special:WhatLinksHere/{{FULLPAGENAME}}]]. For instructions, see the [[{{TALKPAGENAME}}|talk page]]. [[Category:Dialog javascript pages]] */ if (! window.wikidialog) window.wikidialog = {}; if (! window.wikidialog.show) { window.wikidialog.show = function () { // // [[Template:Dialog/text|text]] // var things = $('span.wikidialog-text'); var thingIds = things.map(function () { return $(this).attr('id'); }); things.replaceWith(function (idx) { if ((idx > 0) && (thingIds[idx] == thingIds[idx - 1])) { return ''; } var s = $(this).text(); // .substring(0,1024); // BOUND TEXT CONTENT SIZE var d = ''; if ( s.search(/^size=(\d*)&/) == 0) { d = s.match(/^size=(\d*)&(.*)/); s = d[2]; d = d[1]; } for (var j = idx + 1; j < thingIds.length; j++) { if (thingIds[idx] == thingIds[j]) { s += ' ' + $(things[j]).text(); } else break; } var e = $(document.createElement('input')).attr('type','text').addClass('wikidialog-text').attr('id',thingIds[idx]).val(s).attr('size',d); if ($(this).is('.wikidialog-hidden')) e.css('display','none'); return e; }); // // [[Template:Dialog/textarea|textarea]] // things = $('span.wikidialog-textarea'); thingIds = things.map(function () { return $(this).attr('id'); }); things.replaceWith(function (idx) { if ((idx > 0) && (thingIds[idx] == thingIds[idx - 1])) { return ' '; } var s = $(this).text(); // .substring(0,131072); // BOUND TEXTAREA CONTENT SIZE var c = ''; if ( s.search(/^cols=(\d*)&/) == 0) { c = s.match(/^cols=(\d*)&(.*)/); s = c[2]; c = c[1]; } var r = ''; if ( s.search(/^rows=(\d*)&/) == 0) { r = s.match(/^rows=(\d*)&(.*)/); s = r[2]; r = r[1]; } for (var j = idx + 1; j < thingIds.length; j++) { if (thingIds[idx] == thingIds[j]) { s += '\n' + $(things[j]).text(); } else break; } var e = $(document.createElement('textarea')).addClass('wikidialog-textarea').attr('id',thingIds[idx]).attr('cols',c).attr('rows',r).val(s); if ($(this).is('.wikidialog-hidden')) e.css('display','none'); return e; }); // // [[Template:Dialog/checkbox|checkbox]] // $('span.wikidialog-checkbox').replaceWith(function () { var i = $(this).attr('id'); var s = $(this).text(); // .substring(0,32); // BOUND CHECKBOX CONTENT SIZE var result = $(document.createElement('input')).attr('type','checkbox').addClass('wikidialog-checkbox').attr('id',i); if (s.length > 8) result.attr('checked','yes'); return result; }); // // [[Template:Dialog/select|select]] // $('span.wikidialog-select').replaceWith(function () { var i = $(this).attr('id'); var s = $(this).text().split('&'); // .substring(0,8192).split('&'); // BOUND SELECT CONTENT SIZE var e = document.createElement('select'); for (var k=1; (k < s.length); k += 2) if (s[k-1]) { e.appendChild(new Option(s[k-1],s[k],false,false)); } return $(e).addClass('wikidialog-select').attr('id',i); }); // // [[Template:Dialog/button|button]] // $('span.wikidialog-button').replaceWith(function () { function getWikidialogID() { var s = location.search.match(/[\?&]wikidialogid=(\d+)/); return (s && s.length && (s.length > 1)) ? Number(s[1]) : 0; } function handleButton(event) { var target = $(event.target); var wikidialogButtonData = target.data('wikidialogButtonData'); var action = wikidialogButtonData.action; if (action.substring(0,5).toLowerCase() == 'user:') { var ug = mw.config.get('wgUserGroups'); if (!ug || ug.join(' ').indexOf("sysop") === -1) { alert('action requires admin privs: ' + action); return; } } else { action = mw.config.get('wgSiteName') + ':Dialog/' + action; } // action must be fully protected $.getJSON( mw.util.wikiScript('api'), { format: 'json', action: 'query', prop: 'info', inprop: 'protection', titles: action } ).done( function(data) { var s = ''; if (data.query && data.query.pages) for (var p in data.query.pages) { if ("missing" in data.query.pages[p]) s = 'page not found'; else if ('invalid' in data.query.pages[p]) s = 'page name invalid'; else if ('protection' in data.query.pages[p]) { if (data.query.pages[p].protection[0] && data.query.pages[p].protection[1]) { if (('level' in data.query.pages[p].protection[0]) && ('level' in data.query.pages[p].protection[1])) { if ((data.query.pages[p].protection[0].level == 'sysop') && (data.query.pages[p].protection[1].level == 'sysop')) { } else s = 'page unsecured'; } else s = 'page query misfired'; } else s = 'page unsecured'; } else s = 'page query misfired'; } else s = 'page query failed'; if (s) { alert(s + ': ' + action); return; } // action is now known to be fully protected // sessionStorage.wikidialogNextID was assured before setting up the button var id = sessionStorage.wikidialogNextID; s = mw.util.getUrl(action) + '?wikidialogid=' + id; sessionStorage.wikidialogNextID++; sessionStorage[id + ':incoming'] = s; sessionStorage[id + ':prevurl'] = location.href; // provided for rollback if ('unauth' in wikidialogButtonData) sessionStorage[id + ':unauth'] = wikidialogButtonData.unauth; else sessionStorage[id + ':unauth'] = mw.config.get('wgPageName'); if ('origin' in wikidialogButtonData) sessionStorage[id + ':origin'] = wikidialogButtonData.origin; if ('proxy' in wikidialogButtonData) sessionStorage[id + ':proxy'] = wikidialogButtonData.proxy; sessionStorage[id + ':params'] = ''; for (var j = 0; j < wikidialogButtonData.length; j++) { var d = wikidialogButtonData[j].match(/[\w-]+/g); d[1] = (d[1] ? d[1] : d[0]); d[1] = $('input#wikidialog-' + d[1] + ', textarea#wikidialog-' + d[1] + ', select#wikidialog-' + d[1]); if (d[1].length == 0) { } else { sessionStorage[id + ':params'] += d[0] + ','; var elt = d[1].first(); d[1] = d[1].add(target); for (var k = 0; k < d[1].length; k++) { if ($(d[1][k]).hasClass('wikidialog-button')) { k++; if (k < d[1].length) elt = $(d[1][k]); break; } } switch (elt.attr('type')) { case 'checkbox': d[1] = (elt[0].checked ? 'yes' : ''); break; default: d[1] = elt.val(); break; } sessionStorage[id + ':in:' + d[0]] = d[1]; } } if (target.hasClass('wikidialog-rescript')) { delete window.wikidialog; } location = s; } ).fail( function() { alert('action target check failed: ' + action); } ); } if (! (sessionStorage)) { // allows handler to assume sessionStorage return "<font color=red>&lt;button requires sessionStorage (not found; perhaps your browser is out of date?)&gt;</font>"; } if (sessionStorage.wikidialogNextID) {} else sessionStorage.wikidialogNextID = '1'; if (Number(sessionStorage.wikidialogNextID) <= getWikidialogID()) { alert('Warning: session data may be inaccessible\n(dialog ID should be less than stored count:\n dialog ID is ' + getWikidialogID() + '\n stored count is ' + sessionStorage.wikidialogNextID + ')'); sessionStorage.wikidialogNextID = getWikidialogID() + 1; } var s = $(this).text(); // .substring(0,1024); // BOUND BUTTON CONTENT SIZE var a = ''; if ( s.search(/^action=([\w\s-\/:]+)&/) == 0) { a = s.match(/^action=([\w\s-\/:]+)&(.*)/); s = a[2]; a = a[1]; } var b = ''; if ( s.search(/^label=([\w\s-\/\:\(\)\.\,\;']+)&/) == 0) { // STUFF ALLOWED IN BUTTON LABELS b = s.match(/^label=([\w\s-\/\:\(\)\.\,\;']+)&(.*)/); // STUFF ALLOWED IN BUTTON LABELS s = b[2]; b = b[1]; } var wikidialogButtonData = $(this).data(); if ('wikidialogButtonData' in wikidialogButtonData) wikidialogButtonData = wikidialogButtonData.wikidialogButtonData; else wikidialogButtondata = {}; wikidialogButtonData.action = a; wikidialogButtonData.length = 0; var s = s.match(/([\w-]+:?[\w-]*)&/g); if (s != null) { wikidialogButtonData.length = s.length; for (var j = 0; j < s.length; j++) { wikidialogButtonData[j] = s[j].substring(0,s[j].length - 1); } } return $(document.createElement('input')).attr('type','button').addClass(this.className).val(b).attr('title',a).data('wikidialogButtonData',wikidialogButtonData).click(handleButton); }); // // [[Template:Dialog/ifsupported|ifsupported]] // if (sessionStorage) { $('.wikidialog-alternative').css('display','none'); $('.wikidialog-dependent').css('display','inline'); } }; } window.wikidialog.show(); qiapj5zscm5fvu0q7aw7rpll0aaribg 14536 14535 2015-07-14T12:32:41Z Pi zero 2546 disable buttons while processing click 14536 javascript text/javascript /* This script provides a function to set up dialog fields and buttons based on markup generated by [[:Category:dialog formatting templates|dialog formatting templates]]. Any javascript page importing this page should also contain a commented link to it, for [[Special:WhatLinksHere/{{FULLPAGENAME}}]]. For instructions, see the [[{{TALKPAGENAME}}|talk page]]. [[Category:Dialog javascript pages]] */ if (! window.wikidialog) window.wikidialog = {}; if (! window.wikidialog.show) { window.wikidialog.show = function () { // // [[Template:Dialog/text|text]] // var things = $('span.wikidialog-text'); var thingIds = things.map(function () { return $(this).attr('id'); }); things.replaceWith(function (idx) { if ((idx > 0) && (thingIds[idx] == thingIds[idx - 1])) { return ''; } var s = $(this).text(); // .substring(0,1024); // BOUND TEXT CONTENT SIZE var d = ''; if ( s.search(/^size=(\d*)&/) == 0) { d = s.match(/^size=(\d*)&(.*)/); s = d[2]; d = d[1]; } for (var j = idx + 1; j < thingIds.length; j++) { if (thingIds[idx] == thingIds[j]) { s += ' ' + $(things[j]).text(); } else break; } var e = $(document.createElement('input')).attr('type','text').addClass('wikidialog-text').attr('id',thingIds[idx]).val(s).attr('size',d); if ($(this).is('.wikidialog-hidden')) e.css('display','none'); return e; }); // // [[Template:Dialog/textarea|textarea]] // things = $('span.wikidialog-textarea'); thingIds = things.map(function () { return $(this).attr('id'); }); things.replaceWith(function (idx) { if ((idx > 0) && (thingIds[idx] == thingIds[idx - 1])) { return ' '; } var s = $(this).text(); // .substring(0,131072); // BOUND TEXTAREA CONTENT SIZE var c = ''; if ( s.search(/^cols=(\d*)&/) == 0) { c = s.match(/^cols=(\d*)&(.*)/); s = c[2]; c = c[1]; } var r = ''; if ( s.search(/^rows=(\d*)&/) == 0) { r = s.match(/^rows=(\d*)&(.*)/); s = r[2]; r = r[1]; } for (var j = idx + 1; j < thingIds.length; j++) { if (thingIds[idx] == thingIds[j]) { s += '\n' + $(things[j]).text(); } else break; } var e = $(document.createElement('textarea')).addClass('wikidialog-textarea').attr('id',thingIds[idx]).attr('cols',c).attr('rows',r).val(s); if ($(this).is('.wikidialog-hidden')) e.css('display','none'); return e; }); // // [[Template:Dialog/checkbox|checkbox]] // $('span.wikidialog-checkbox').replaceWith(function () { var i = $(this).attr('id'); var s = $(this).text(); // .substring(0,32); // BOUND CHECKBOX CONTENT SIZE var result = $(document.createElement('input')).attr('type','checkbox').addClass('wikidialog-checkbox').attr('id',i); if (s.length > 8) result.attr('checked','yes'); return result; }); // // [[Template:Dialog/select|select]] // $('span.wikidialog-select').replaceWith(function () { var i = $(this).attr('id'); var s = $(this).text().split('&'); // .substring(0,8192).split('&'); // BOUND SELECT CONTENT SIZE var e = document.createElement('select'); for (var k=1; (k < s.length); k += 2) if (s[k-1]) { e.appendChild(new Option(s[k-1],s[k],false,false)); } return $(e).addClass('wikidialog-select').attr('id',i); }); // // [[Template:Dialog/button|button]] // $('span.wikidialog-button').replaceWith(function () { function getWikidialogID() { var s = location.search.match(/[\?&]wikidialogid=(\d+)/); return (s && s.length && (s.length > 1)) ? Number(s[1]) : 0; } function handleButton(event) { var target = $(event.target); var wikidialogButtonData = target.data('wikidialogButtonData'); var action = wikidialogButtonData.action; if (action.substring(0,5).toLowerCase() == 'user:') { var ug = mw.config.get('wgUserGroups'); if (!ug || ug.join(' ').indexOf("sysop") === -1) { alert('action requires admin privs: ' + action); return; } } else { action = mw.config.get('wgSiteName') + ':Dialog/' + action; } // action must be fully protected $('input.wikidialog-button').attr('disabled',true); $.getJSON( mw.util.wikiScript('api'), { format: 'json', action: 'query', prop: 'info', inprop: 'protection', titles: action } ).done( function(data) { var s = ''; if (data.query && data.query.pages) for (var p in data.query.pages) { if ("missing" in data.query.pages[p]) s = 'page not found'; else if ('invalid' in data.query.pages[p]) s = 'page name invalid'; else if ('protection' in data.query.pages[p]) { if (data.query.pages[p].protection[0] && data.query.pages[p].protection[1]) { if (('level' in data.query.pages[p].protection[0]) && ('level' in data.query.pages[p].protection[1])) { if ((data.query.pages[p].protection[0].level == 'sysop') && (data.query.pages[p].protection[1].level == 'sysop')) { } else s = 'page unsecured'; } else s = 'page query misfired'; } else s = 'page unsecured'; } else s = 'page query misfired'; } else s = 'page query failed'; if (s) { $('input.wikidialog-button').attr('disabled',false); alert(s + ': ' + action); return; } // action is now known to be fully protected // sessionStorage.wikidialogNextID was assured before setting up the button var id = sessionStorage.wikidialogNextID; s = mw.util.getUrl(action) + '?wikidialogid=' + id; sessionStorage.wikidialogNextID++; sessionStorage[id + ':incoming'] = s; sessionStorage[id + ':prevurl'] = location.href; // provided for rollback if ('unauth' in wikidialogButtonData) sessionStorage[id + ':unauth'] = wikidialogButtonData.unauth; else sessionStorage[id + ':unauth'] = mw.config.get('wgPageName'); if ('origin' in wikidialogButtonData) sessionStorage[id + ':origin'] = wikidialogButtonData.origin; if ('proxy' in wikidialogButtonData) sessionStorage[id + ':proxy'] = wikidialogButtonData.proxy; sessionStorage[id + ':params'] = ''; for (var j = 0; j < wikidialogButtonData.length; j++) { var d = wikidialogButtonData[j].match(/[\w-]+/g); d[1] = (d[1] ? d[1] : d[0]); d[1] = $('input#wikidialog-' + d[1] + ', textarea#wikidialog-' + d[1] + ', select#wikidialog-' + d[1]); if (d[1].length == 0) { } else { sessionStorage[id + ':params'] += d[0] + ','; var elt = d[1].first(); d[1] = d[1].add(target); for (var k = 0; k < d[1].length; k++) { if ($(d[1][k]).hasClass('wikidialog-button')) { k++; if (k < d[1].length) elt = $(d[1][k]); break; } } switch (elt.attr('type')) { case 'checkbox': d[1] = (elt[0].checked ? 'yes' : ''); break; default: d[1] = elt.val(); break; } sessionStorage[id + ':in:' + d[0]] = d[1]; } } if (target.hasClass('wikidialog-rescript')) { delete window.wikidialog; } location = s; } ).fail(function() { $('input.wikidialog-button').attr('disabled',false); alert('action target check failed: ' + action); }); } if (! (sessionStorage)) { // allows handler to assume sessionStorage return "<font color=red>&lt;button requires sessionStorage (not found; perhaps your browser is out of date?)&gt;</font>"; } if (sessionStorage.wikidialogNextID) {} else sessionStorage.wikidialogNextID = '1'; if (Number(sessionStorage.wikidialogNextID) <= getWikidialogID()) { alert('Warning: session data may be inaccessible\n(dialog ID should be less than stored count:\n dialog ID is ' + getWikidialogID() + '\n stored count is ' + sessionStorage.wikidialogNextID + ')'); sessionStorage.wikidialogNextID = getWikidialogID() + 1; } var s = $(this).text(); // .substring(0,1024); // BOUND BUTTON CONTENT SIZE var a = ''; if ( s.search(/^action=([\w\s-\/:]+)&/) == 0) { a = s.match(/^action=([\w\s-\/:]+)&(.*)/); s = a[2]; a = a[1]; } var b = ''; if ( s.search(/^label=([\w\s-\/\:\(\)\.\,\;']+)&/) == 0) { // STUFF ALLOWED IN BUTTON LABELS b = s.match(/^label=([\w\s-\/\:\(\)\.\,\;']+)&(.*)/); // STUFF ALLOWED IN BUTTON LABELS s = b[2]; b = b[1]; } var wikidialogButtonData = $(this).data(); if ('wikidialogButtonData' in wikidialogButtonData) wikidialogButtonData = wikidialogButtonData.wikidialogButtonData; else wikidialogButtondata = {}; wikidialogButtonData.action = a; wikidialogButtonData.length = 0; var s = s.match(/([\w-]+:?[\w-]*)&/g); if (s != null) { wikidialogButtonData.length = s.length; for (var j = 0; j < s.length; j++) { wikidialogButtonData[j] = s[j].substring(0,s[j].length - 1); } } return $(document.createElement('input')).attr('type','button').addClass(this.className).val(b).attr('title',a).data('wikidialogButtonData',wikidialogButtonData).click(handleButton); }); // // [[Template:Dialog/ifsupported|ifsupported]] // if (sessionStorage) { $('.wikidialog-alternative').css('display','none'); $('.wikidialog-dependent').css('display','inline'); } }; } window.wikidialog.show(); s8fvj0oef41g0m5iovlo5ynz5m9372q 14537 14536 2015-07-20T00:09:27Z Pi zero 2546 version 14537 javascript text/javascript /* This script provides a function to set up dialog fields and buttons based on markup generated by [[:Category:dialog formatting templates|dialog formatting templates]]. Any javascript page importing this page should also contain a commented link to it, for [[Special:WhatLinksHere/{{FULLPAGENAME}}]]. For instructions, see the [[{{TALKPAGENAME}}|talk page]]. [[Category:Dialog javascript pages]] */ if (! window.wikidialog) window.wikidialog = {}; if (! window.wikidialog.show) { // // version // window.wikidialog.gadgetVersion = function() { return '0.1x (2015-07-19)'; } // window.wikidialog.show = function () { // // [[Template:Dialog/text|text]] // var things = $('span.wikidialog-text'); var thingIds = things.map(function () { return $(this).attr('id'); }); things.replaceWith(function (idx) { if ((idx > 0) && (thingIds[idx] == thingIds[idx - 1])) { return ''; } var s = $(this).text(); // .substring(0,1024); // BOUND TEXT CONTENT SIZE var d = ''; if ( s.search(/^size=(\d*)&/) == 0) { d = s.match(/^size=(\d*)&(.*)/); s = d[2]; d = d[1]; } for (var j = idx + 1; j < thingIds.length; j++) { if (thingIds[idx] == thingIds[j]) { s += ' ' + $(things[j]).text(); } else break; } var e = $(document.createElement('input')).attr('type','text').addClass('wikidialog-text').attr('id',thingIds[idx]).val(s).attr('size',d); if ($(this).is('.wikidialog-hidden')) e.css('display','none'); return e; }); // // [[Template:Dialog/textarea|textarea]] // things = $('span.wikidialog-textarea'); thingIds = things.map(function () { return $(this).attr('id'); }); things.replaceWith(function (idx) { if ((idx > 0) && (thingIds[idx] == thingIds[idx - 1])) { return ' '; } var s = $(this).text(); // .substring(0,131072); // BOUND TEXTAREA CONTENT SIZE var c = ''; if ( s.search(/^cols=(\d*)&/) == 0) { c = s.match(/^cols=(\d*)&(.*)/); s = c[2]; c = c[1]; } var r = ''; if ( s.search(/^rows=(\d*)&/) == 0) { r = s.match(/^rows=(\d*)&(.*)/); s = r[2]; r = r[1]; } for (var j = idx + 1; j < thingIds.length; j++) { if (thingIds[idx] == thingIds[j]) { s += '\n' + $(things[j]).text(); } else break; } var e = $(document.createElement('textarea')).addClass('wikidialog-textarea').attr('id',thingIds[idx]).attr('cols',c).attr('rows',r).val(s); if ($(this).is('.wikidialog-hidden')) e.css('display','none'); return e; }); // // [[Template:Dialog/checkbox|checkbox]] // $('span.wikidialog-checkbox').replaceWith(function () { var i = $(this).attr('id'); var s = $(this).text(); // .substring(0,32); // BOUND CHECKBOX CONTENT SIZE var result = $(document.createElement('input')).attr('type','checkbox').addClass('wikidialog-checkbox').attr('id',i); if (s.length > 8) result.attr('checked','yes'); return result; }); // // [[Template:Dialog/select|select]] // $('span.wikidialog-select').replaceWith(function () { var i = $(this).attr('id'); var s = $(this).text().split('&'); // .substring(0,8192).split('&'); // BOUND SELECT CONTENT SIZE var e = document.createElement('select'); for (var k=1; (k < s.length); k += 2) if (s[k-1]) { e.appendChild(new Option(s[k-1],s[k],false,false)); } return $(e).addClass('wikidialog-select').attr('id',i); }); // // [[Template:Dialog/button|button]] // $('span.wikidialog-button').replaceWith(function () { function getWikidialogID() { var s = location.search.match(/[\?&]wikidialogid=(\d+)/); return (s && s.length && (s.length > 1)) ? Number(s[1]) : 0; } function handleButton(event) { var target = $(event.target); var wikidialogButtonData = target.data('wikidialogButtonData'); var action = wikidialogButtonData.action; if (action.substring(0,5).toLowerCase() == 'user:') { var ug = mw.config.get('wgUserGroups'); if (!ug || ug.join(' ').indexOf("sysop") === -1) { alert('action requires admin privs: ' + action); return; } } else { action = mw.config.get('wgSiteName') + ':Dialog/' + action; } // action must be fully protected $('input.wikidialog-button').attr('disabled',true); $.getJSON( mw.util.wikiScript('api'), { format: 'json', action: 'query', prop: 'info', inprop: 'protection', titles: action } ).done( function(data) { var s = ''; if (data.query && data.query.pages) for (var p in data.query.pages) { if ("missing" in data.query.pages[p]) s = 'page not found'; else if ('invalid' in data.query.pages[p]) s = 'page name invalid'; else if ('protection' in data.query.pages[p]) { if (data.query.pages[p].protection[0] && data.query.pages[p].protection[1]) { if (('level' in data.query.pages[p].protection[0]) && ('level' in data.query.pages[p].protection[1])) { if ((data.query.pages[p].protection[0].level == 'sysop') && (data.query.pages[p].protection[1].level == 'sysop')) { } else s = 'page unsecured'; } else s = 'page query misfired'; } else s = 'page unsecured'; } else s = 'page query misfired'; } else s = 'page query failed'; if (s) { $('input.wikidialog-button').attr('disabled',false); alert(s + ': ' + action); return; } // action is now known to be fully protected // sessionStorage.wikidialogNextID was assured before setting up the button var id = sessionStorage.wikidialogNextID; s = mw.util.getUrl(action) + '?wikidialogid=' + id; sessionStorage.wikidialogNextID++; sessionStorage[id + ':incoming'] = s; sessionStorage[id + ':prevurl'] = location.href; // provided for rollback if ('unauth' in wikidialogButtonData) sessionStorage[id + ':unauth'] = wikidialogButtonData.unauth; else sessionStorage[id + ':unauth'] = mw.config.get('wgPageName'); if ('origin' in wikidialogButtonData) sessionStorage[id + ':origin'] = wikidialogButtonData.origin; if ('proxy' in wikidialogButtonData) sessionStorage[id + ':proxy'] = wikidialogButtonData.proxy; sessionStorage[id + ':params'] = ''; for (var j = 0; j < wikidialogButtonData.length; j++) { var d = wikidialogButtonData[j].match(/[\w-]+/g); d[1] = (d[1] ? d[1] : d[0]); d[1] = $('input#wikidialog-' + d[1] + ', textarea#wikidialog-' + d[1] + ', select#wikidialog-' + d[1]); if (d[1].length == 0) { } else { sessionStorage[id + ':params'] += d[0] + ','; var elt = d[1].first(); d[1] = d[1].add(target); for (var k = 0; k < d[1].length; k++) { if ($(d[1][k]).hasClass('wikidialog-button')) { k++; if (k < d[1].length) elt = $(d[1][k]); break; } } switch (elt.attr('type')) { case 'checkbox': d[1] = (elt[0].checked ? 'yes' : ''); break; default: d[1] = elt.val(); break; } sessionStorage[id + ':in:' + d[0]] = d[1]; } } if (target.hasClass('wikidialog-rescript')) { delete window.wikidialog; } location = s; } ).fail(function() { $('input.wikidialog-button').attr('disabled',false); alert('action target check failed: ' + action); }); } if (! (sessionStorage)) { // allows handler to assume sessionStorage return "<font color=red>&lt;button requires sessionStorage (not found; perhaps your browser is out of date?)&gt;</font>"; } if (sessionStorage.wikidialogNextID) {} else sessionStorage.wikidialogNextID = '1'; if (Number(sessionStorage.wikidialogNextID) <= getWikidialogID()) { alert('Warning: session data may be inaccessible\n(dialog ID should be less than stored count:\n dialog ID is ' + getWikidialogID() + '\n stored count is ' + sessionStorage.wikidialogNextID + ')'); sessionStorage.wikidialogNextID = getWikidialogID() + 1; } var s = $(this).text(); // .substring(0,1024); // BOUND BUTTON CONTENT SIZE var a = ''; if ( s.search(/^action=([\w\s-\/:]+)&/) == 0) { a = s.match(/^action=([\w\s-\/:]+)&(.*)/); s = a[2]; a = a[1]; } var b = ''; if ( s.search(/^label=([\w\s-\/\:\(\)\.\,\;']+)&/) == 0) { // STUFF ALLOWED IN BUTTON LABELS b = s.match(/^label=([\w\s-\/\:\(\)\.\,\;']+)&(.*)/); // STUFF ALLOWED IN BUTTON LABELS s = b[2]; b = b[1]; } var wikidialogButtonData = $(this).data(); if ('wikidialogButtonData' in wikidialogButtonData) wikidialogButtonData = wikidialogButtonData.wikidialogButtonData; else wikidialogButtondata = {}; wikidialogButtonData.action = a; wikidialogButtonData.length = 0; var s = s.match(/([\w-]+:?[\w-]*)&/g); if (s != null) { wikidialogButtonData.length = s.length; for (var j = 0; j < s.length; j++) { wikidialogButtonData[j] = s[j].substring(0,s[j].length - 1); } } return $(document.createElement('input')).attr('type','button').addClass(this.className).val(b).attr('title',a).data('wikidialogButtonData',wikidialogButtonData).click(handleButton); }); // // [[Template:Dialog/ifsupported|ifsupported]] // if (sessionStorage) { $('.wikidialog-alternative').css('display','none'); $('.wikidialog-dependent').css('display','inline'); } }; } window.wikidialog.show(); 3nav97ib6fy1dbcc93g6akcv1pygfng 14538 14537 2015-07-20T00:10:29Z Pi zero 2546 adjust 14538 javascript text/javascript /* This script provides a function to set up dialog fields and buttons based on markup generated by [[:Category:dialog formatting templates|dialog formatting templates]]. Any javascript page importing this page should also contain a commented link to it, for [[Special:WhatLinksHere/{{FULLPAGENAME}}]]. For instructions, see the [[{{TALKPAGENAME}}|talk page]]. [[Category:Dialog javascript pages]] */ if (! window.wikidialog) window.wikidialog = {}; if (! window.wikidialog.show) { // // version // window.wikidialog.gadgetVersion = function() { return '0.1 (2015-07-19)'; } // window.wikidialog.show = function () { // // [[Template:Dialog/text|text]] // var things = $('span.wikidialog-text'); var thingIds = things.map(function () { return $(this).attr('id'); }); things.replaceWith(function (idx) { if ((idx > 0) && (thingIds[idx] == thingIds[idx - 1])) { return ''; } var s = $(this).text(); // .substring(0,1024); // BOUND TEXT CONTENT SIZE var d = ''; if ( s.search(/^size=(\d*)&/) == 0) { d = s.match(/^size=(\d*)&(.*)/); s = d[2]; d = d[1]; } for (var j = idx + 1; j < thingIds.length; j++) { if (thingIds[idx] == thingIds[j]) { s += ' ' + $(things[j]).text(); } else break; } var e = $(document.createElement('input')).attr('type','text').addClass('wikidialog-text').attr('id',thingIds[idx]).val(s).attr('size',d); if ($(this).is('.wikidialog-hidden')) e.css('display','none'); return e; }); // // [[Template:Dialog/textarea|textarea]] // things = $('span.wikidialog-textarea'); thingIds = things.map(function () { return $(this).attr('id'); }); things.replaceWith(function (idx) { if ((idx > 0) && (thingIds[idx] == thingIds[idx - 1])) { return ' '; } var s = $(this).text(); // .substring(0,131072); // BOUND TEXTAREA CONTENT SIZE var c = ''; if ( s.search(/^cols=(\d*)&/) == 0) { c = s.match(/^cols=(\d*)&(.*)/); s = c[2]; c = c[1]; } var r = ''; if ( s.search(/^rows=(\d*)&/) == 0) { r = s.match(/^rows=(\d*)&(.*)/); s = r[2]; r = r[1]; } for (var j = idx + 1; j < thingIds.length; j++) { if (thingIds[idx] == thingIds[j]) { s += '\n' + $(things[j]).text(); } else break; } var e = $(document.createElement('textarea')).addClass('wikidialog-textarea').attr('id',thingIds[idx]).attr('cols',c).attr('rows',r).val(s); if ($(this).is('.wikidialog-hidden')) e.css('display','none'); return e; }); // // [[Template:Dialog/checkbox|checkbox]] // $('span.wikidialog-checkbox').replaceWith(function () { var i = $(this).attr('id'); var s = $(this).text(); // .substring(0,32); // BOUND CHECKBOX CONTENT SIZE var result = $(document.createElement('input')).attr('type','checkbox').addClass('wikidialog-checkbox').attr('id',i); if (s.length > 8) result.attr('checked','yes'); return result; }); // // [[Template:Dialog/select|select]] // $('span.wikidialog-select').replaceWith(function () { var i = $(this).attr('id'); var s = $(this).text().split('&'); // .substring(0,8192).split('&'); // BOUND SELECT CONTENT SIZE var e = document.createElement('select'); for (var k=1; (k < s.length); k += 2) if (s[k-1]) { e.appendChild(new Option(s[k-1],s[k],false,false)); } return $(e).addClass('wikidialog-select').attr('id',i); }); // // [[Template:Dialog/button|button]] // $('span.wikidialog-button').replaceWith(function () { function getWikidialogID() { var s = location.search.match(/[\?&]wikidialogid=(\d+)/); return (s && s.length && (s.length > 1)) ? Number(s[1]) : 0; } function handleButton(event) { var target = $(event.target); var wikidialogButtonData = target.data('wikidialogButtonData'); var action = wikidialogButtonData.action; if (action.substring(0,5).toLowerCase() == 'user:') { var ug = mw.config.get('wgUserGroups'); if (!ug || ug.join(' ').indexOf("sysop") === -1) { alert('action requires admin privs: ' + action); return; } } else { action = mw.config.get('wgSiteName') + ':Dialog/' + action; } // action must be fully protected $('input.wikidialog-button').attr('disabled',true); $.getJSON( mw.util.wikiScript('api'), { format: 'json', action: 'query', prop: 'info', inprop: 'protection', titles: action } ).done( function(data) { var s = ''; if (data.query && data.query.pages) for (var p in data.query.pages) { if ("missing" in data.query.pages[p]) s = 'page not found'; else if ('invalid' in data.query.pages[p]) s = 'page name invalid'; else if ('protection' in data.query.pages[p]) { if (data.query.pages[p].protection[0] && data.query.pages[p].protection[1]) { if (('level' in data.query.pages[p].protection[0]) && ('level' in data.query.pages[p].protection[1])) { if ((data.query.pages[p].protection[0].level == 'sysop') && (data.query.pages[p].protection[1].level == 'sysop')) { } else s = 'page unsecured'; } else s = 'page query misfired'; } else s = 'page unsecured'; } else s = 'page query misfired'; } else s = 'page query failed'; if (s) { $('input.wikidialog-button').attr('disabled',false); alert(s + ': ' + action); return; } // action is now known to be fully protected // sessionStorage.wikidialogNextID was assured before setting up the button var id = sessionStorage.wikidialogNextID; s = mw.util.getUrl(action) + '?wikidialogid=' + id; sessionStorage.wikidialogNextID++; sessionStorage[id + ':incoming'] = s; sessionStorage[id + ':prevurl'] = location.href; // provided for rollback if ('unauth' in wikidialogButtonData) sessionStorage[id + ':unauth'] = wikidialogButtonData.unauth; else sessionStorage[id + ':unauth'] = mw.config.get('wgPageName'); if ('origin' in wikidialogButtonData) sessionStorage[id + ':origin'] = wikidialogButtonData.origin; if ('proxy' in wikidialogButtonData) sessionStorage[id + ':proxy'] = wikidialogButtonData.proxy; sessionStorage[id + ':params'] = ''; for (var j = 0; j < wikidialogButtonData.length; j++) { var d = wikidialogButtonData[j].match(/[\w-]+/g); d[1] = (d[1] ? d[1] : d[0]); d[1] = $('input#wikidialog-' + d[1] + ', textarea#wikidialog-' + d[1] + ', select#wikidialog-' + d[1]); if (d[1].length == 0) { } else { sessionStorage[id + ':params'] += d[0] + ','; var elt = d[1].first(); d[1] = d[1].add(target); for (var k = 0; k < d[1].length; k++) { if ($(d[1][k]).hasClass('wikidialog-button')) { k++; if (k < d[1].length) elt = $(d[1][k]); break; } } switch (elt.attr('type')) { case 'checkbox': d[1] = (elt[0].checked ? 'yes' : ''); break; default: d[1] = elt.val(); break; } sessionStorage[id + ':in:' + d[0]] = d[1]; } } if (target.hasClass('wikidialog-rescript')) { delete window.wikidialog; } location = s; } ).fail(function() { $('input.wikidialog-button').attr('disabled',false); alert('action target check failed: ' + action); }); } if (! (sessionStorage)) { // allows handler to assume sessionStorage return "<font color=red>&lt;button requires sessionStorage (not found; perhaps your browser is out of date?)&gt;</font>"; } if (sessionStorage.wikidialogNextID) {} else sessionStorage.wikidialogNextID = '1'; if (Number(sessionStorage.wikidialogNextID) <= getWikidialogID()) { alert('Warning: session data may be inaccessible\n(dialog ID should be less than stored count:\n dialog ID is ' + getWikidialogID() + '\n stored count is ' + sessionStorage.wikidialogNextID + ')'); sessionStorage.wikidialogNextID = getWikidialogID() + 1; } var s = $(this).text(); // .substring(0,1024); // BOUND BUTTON CONTENT SIZE var a = ''; if ( s.search(/^action=([\w\s-\/:]+)&/) == 0) { a = s.match(/^action=([\w\s-\/:]+)&(.*)/); s = a[2]; a = a[1]; } var b = ''; if ( s.search(/^label=([\w\s-\/\:\(\)\.\,\;']+)&/) == 0) { // STUFF ALLOWED IN BUTTON LABELS b = s.match(/^label=([\w\s-\/\:\(\)\.\,\;']+)&(.*)/); // STUFF ALLOWED IN BUTTON LABELS s = b[2]; b = b[1]; } var wikidialogButtonData = $(this).data(); if ('wikidialogButtonData' in wikidialogButtonData) wikidialogButtonData = wikidialogButtonData.wikidialogButtonData; else wikidialogButtondata = {}; wikidialogButtonData.action = a; wikidialogButtonData.length = 0; var s = s.match(/([\w-]+:?[\w-]*)&/g); if (s != null) { wikidialogButtonData.length = s.length; for (var j = 0; j < s.length; j++) { wikidialogButtonData[j] = s[j].substring(0,s[j].length - 1); } } return $(document.createElement('input')).attr('type','button').addClass(this.className).val(b).attr('title',a).data('wikidialogButtonData',wikidialogButtonData).click(handleButton); }); // // [[Template:Dialog/ifsupported|ifsupported]] // if (sessionStorage) { $('.wikidialog-alternative').css('display','none'); $('.wikidialog-dependent').css('display','inline'); } }; } window.wikidialog.show(); 8pwwbq3xbcwe1198qil594hx1hkfk03 14539 14538 2015-07-29T20:11:25Z Pi zero 2546 0.2 action-sequences 14539 javascript text/javascript /* This script provides a function to set up dialog fields and buttons based on markup generated by [[:Category:dialog formatting templates|dialog formatting templates]]. Any javascript page importing this page should also contain a commented link to it, for [[Special:WhatLinksHere/{{FULLPAGENAME}}]]. For instructions, see the [[{{TALKPAGENAME}}|talk page]]. [[Category:Dialog javascript pages]] */ if (! window.wikidialog) window.wikidialog = {}; if (! window.wikidialog.show) { // // version // window.wikidialog.gadgetVersion = function() { return '0.2 (2015-07-29)'; } // window.wikidialog.show = function () { // // [[Template:Dialog/text|text]] // var things = $('span.wikidialog-text'); var thingIds = things.map(function () { return $(this).attr('id'); }); things.replaceWith(function (idx) { if ((idx > 0) && (thingIds[idx] == thingIds[idx - 1])) { return ''; } var s = $(this).text(); // .substring(0,1024); // BOUND TEXT CONTENT SIZE var d = ''; if ( s.search(/^size=(\d*)&/) == 0) { d = s.match(/^size=(\d*)&(.*)/); s = d[2]; d = d[1]; } for (var j = idx + 1; j < thingIds.length; j++) { if (thingIds[idx] == thingIds[j]) { s += ' ' + $(things[j]).text(); } else break; } var e = $(document.createElement('input')).attr('type','text').addClass('wikidialog-text').attr('id',thingIds[idx]).val(s).attr('size',d); if ($(this).is('.wikidialog-hidden')) e.css('display','none'); return e; }); // // [[Template:Dialog/textarea|textarea]] // things = $('span.wikidialog-textarea'); thingIds = things.map(function () { return $(this).attr('id'); }); things.replaceWith(function (idx) { if ((idx > 0) && (thingIds[idx] == thingIds[idx - 1])) { return ' '; } var s = $(this).text(); // .substring(0,131072); // BOUND TEXTAREA CONTENT SIZE var c = ''; if ( s.search(/^cols=(\d*)&/) == 0) { c = s.match(/^cols=(\d*)&(.*)/); s = c[2]; c = c[1]; } var r = ''; if ( s.search(/^rows=(\d*)&/) == 0) { r = s.match(/^rows=(\d*)&(.*)/); s = r[2]; r = r[1]; } for (var j = idx + 1; j < thingIds.length; j++) { if (thingIds[idx] == thingIds[j]) { s += '\n' + $(things[j]).text(); } else break; } var e = $(document.createElement('textarea')).addClass('wikidialog-textarea').attr('id',thingIds[idx]).attr('cols',c).attr('rows',r).val(s); if ($(this).is('.wikidialog-hidden')) e.css('display','none'); return e; }); // // [[Template:Dialog/checkbox|checkbox]] // $('span.wikidialog-checkbox').replaceWith(function () { var i = $(this).attr('id'); var s = $(this).text(); // .substring(0,32); // BOUND CHECKBOX CONTENT SIZE var result = $(document.createElement('input')).attr('type','checkbox').addClass('wikidialog-checkbox').attr('id',i); if (s.length > 8) result.attr('checked','yes'); return result; }); // // [[Template:Dialog/select|select]] // $('span.wikidialog-select').replaceWith(function () { var i = $(this).attr('id'); var s = $(this).text().split('&'); // .substring(0,8192).split('&'); // BOUND SELECT CONTENT SIZE var e = document.createElement('select'); for (var k=1; (k < s.length); k += 2) if (s[k-1]) { e.appendChild(new Option(s[k-1],s[k],false,false)); } return $(e).addClass('wikidialog-select').attr('id',i); }); // // [[Template:Dialog/button|button]] // $('span.wikidialog-button').replaceWith(function () { function getWikidialogID() { var s = location.search.match(/[\?&]wikidialogid=(\d+)/); return (s && s.length && (s.length > 1)) ? Number(s[1]) : 0; } function handleButton(event) { var target = $(event.target); var wikidialogButtonData = target.data('wikidialogButtonData'); var action = wikidialogButtonData.action; if (action.substring(0,5).toLowerCase() == 'user:') { var ug = mw.config.get('wgUserGroups'); if (!ug || ug.join(' ').indexOf("sysop") === -1) { alert('action requires admin privs: ' + action); return; } } else { action = mw.config.get('wgSiteName') + ':Dialog/' + action; } // action must be fully protected $('input.wikidialog-button').attr('disabled',true); $.getJSON( mw.util.wikiScript('api'), { format: 'json', action: 'query', prop: 'info', inprop: 'protection', titles: action } ).done( function(data) { var s = ''; if (data.query && data.query.pages) for (var p in data.query.pages) { if ("missing" in data.query.pages[p]) s = 'page not found'; else if ('invalid' in data.query.pages[p]) s = 'page name invalid'; else if ('protection' in data.query.pages[p]) { if (data.query.pages[p].protection[0] && data.query.pages[p].protection[1]) { if (('level' in data.query.pages[p].protection[0]) && ('level' in data.query.pages[p].protection[1])) { if ((data.query.pages[p].protection[0].level == 'sysop') && (data.query.pages[p].protection[1].level == 'sysop')) { } else s = 'page unsecured'; } else s = 'page query misfired'; } else s = 'page unsecured'; } else s = 'page query misfired'; } else s = 'page query failed'; if (s) { $('input.wikidialog-button').attr('disabled',false); alert(s + ': ' + action); return; } // action is now known to be fully protected // sessionStorage.wikidialogNextID was assured before setting up the button var id = sessionStorage.wikidialogNextID; s = mw.util.getUrl(action) + '?wikidialogid=' + id; sessionStorage.wikidialogNextID++; sessionStorage[id + ':incoming'] = s; sessionStorage[id + ':prevurl'] = location.href; // provided for rollback if ('unauth' in wikidialogButtonData) sessionStorage[id + ':unauth'] = wikidialogButtonData.unauth; else sessionStorage[id + ':unauth'] = mw.config.get('wgPageName'); if ('origin' in wikidialogButtonData) sessionStorage[id + ':origin'] = wikidialogButtonData.origin; if ('proxy' in wikidialogButtonData) sessionStorage[id + ':proxy'] = wikidialogButtonData.proxy; sessionStorage[id + ':params'] = ''; for (var j = 0; j < wikidialogButtonData.length; j++) { var d = wikidialogButtonData[j].match(/[\w-]+/g); d[1] = (d[1] ? d[1] : d[0]); d[1] = $('input#wikidialog-' + d[1] + ', textarea#wikidialog-' + d[1] + ', select#wikidialog-' + d[1]); if (d[1].length == 0) { } else { sessionStorage[id + ':params'] += d[0] + ','; var elt = d[1].first(); d[1] = d[1].add(target); for (var k = 0; k < d[1].length; k++) { if ($(d[1][k]).hasClass('wikidialog-button')) { k++; if (k < d[1].length) elt = $(d[1][k]); break; } } switch (elt.attr('type')) { case 'checkbox': d[1] = (elt[0].checked ? 'yes' : ''); break; default: d[1] = elt.val(); break; } sessionStorage[id + ':in:' + d[0]] = d[1]; } } if (target.hasClass('wikidialog-rescript')) { delete window.wikidialog; } sessionStorage.wikidialogSequenceBound = 4; // POINT TO ADJUST max action-sequence length // also occurs in receive location = s; } ).fail(function() { $('input.wikidialog-button').attr('disabled',false); alert('action target check failed: ' + action); }); } if (! (sessionStorage)) { // allows handler to assume sessionStorage return "<font color=red>&lt;button requires sessionStorage (not found; perhaps your browser is out of date?)&gt;</font>"; } if (sessionStorage.wikidialogNextID) {} else sessionStorage.wikidialogNextID = '1'; if (Number(sessionStorage.wikidialogNextID) <= getWikidialogID()) { alert('Warning: session data may be inaccessible\n(dialog ID should be less than stored count:\n dialog ID is ' + getWikidialogID() + '\n stored count is ' + sessionStorage.wikidialogNextID + ')'); sessionStorage.wikidialogNextID = getWikidialogID() + 1; } var s = $(this).text(); // .substring(0,1024); // BOUND BUTTON CONTENT SIZE var a = ''; if ( s.search(/^action=([\w\s-\/:]+)&/) == 0) { a = s.match(/^action=([\w\s-\/:]+)&(.*)/); s = a[2]; a = a[1]; } var b = ''; if ( s.search(/^label=([\w\s-\/\:\(\)\.\,\;']+)&/) == 0) { // STUFF ALLOWED IN BUTTON LABELS b = s.match(/^label=([\w\s-\/\:\(\)\.\,\;']+)&(.*)/); // STUFF ALLOWED IN BUTTON LABELS s = b[2]; b = b[1]; } var wikidialogButtonData = $(this).data(); if ('wikidialogButtonData' in wikidialogButtonData) wikidialogButtonData = wikidialogButtonData.wikidialogButtonData; else wikidialogButtondata = {}; wikidialogButtonData.action = a; wikidialogButtonData.length = 0; var s = s.match(/([\w-]+:?[\w-]*)&/g); if (s != null) { wikidialogButtonData.length = s.length; for (var j = 0; j < s.length; j++) { wikidialogButtonData[j] = s[j].substring(0,s[j].length - 1); } } return $(document.createElement('input')).attr('type','button').addClass(this.className).val(b).attr('title',a).data('wikidialogButtonData',wikidialogButtonData).click(handleButton); }); // // [[Template:Dialog/ifsupported|ifsupported]] // if (sessionStorage) { $('.wikidialog-alternative').css('display','none'); $('.wikidialog-dependent').css('display','inline'); } }; } window.wikidialog.show(); tue8xaou88byxjsz8zgjawwchi5k10t 14540 14539 2015-07-30T10:47:17Z Pi zero 2546 0.3 sequence bound 14540 javascript text/javascript /* This script provides a function to set up dialog fields and buttons based on markup generated by [[:Category:dialog formatting templates|dialog formatting templates]]. Any javascript page importing this page should also contain a commented link to it, for [[Special:WhatLinksHere/{{FULLPAGENAME}}]]. For instructions, see the [[{{TALKPAGENAME}}|talk page]]. [[Category:Dialog javascript pages]] */ if (! window.wikidialog) window.wikidialog = {}; if (! window.wikidialog.show) { // // version // window.wikidialog.gadgetVersion = function() { return '0.3 (2015-07-30)'; } // window.wikidialog.show = function () { // // [[Template:Dialog/text|text]] // var things = $('span.wikidialog-text'); var thingIds = things.map(function () { return $(this).attr('id'); }); things.replaceWith(function (idx) { if ((idx > 0) && (thingIds[idx] == thingIds[idx - 1])) { return ''; } var s = $(this).text(); // .substring(0,1024); // BOUND TEXT CONTENT SIZE var d = ''; if ( s.search(/^size=(\d*)&/) == 0) { d = s.match(/^size=(\d*)&(.*)/); s = d[2]; d = d[1]; } for (var j = idx + 1; j < thingIds.length; j++) { if (thingIds[idx] == thingIds[j]) { s += ' ' + $(things[j]).text(); } else break; } var e = $(document.createElement('input')).attr('type','text').addClass('wikidialog-text').attr('id',thingIds[idx]).val(s).attr('size',d); if ($(this).is('.wikidialog-hidden')) e.css('display','none'); return e; }); // // [[Template:Dialog/textarea|textarea]] // things = $('span.wikidialog-textarea'); thingIds = things.map(function () { return $(this).attr('id'); }); things.replaceWith(function (idx) { if ((idx > 0) && (thingIds[idx] == thingIds[idx - 1])) { return ' '; } var s = $(this).text(); // .substring(0,131072); // BOUND TEXTAREA CONTENT SIZE var c = ''; if ( s.search(/^cols=(\d*)&/) == 0) { c = s.match(/^cols=(\d*)&(.*)/); s = c[2]; c = c[1]; } var r = ''; if ( s.search(/^rows=(\d*)&/) == 0) { r = s.match(/^rows=(\d*)&(.*)/); s = r[2]; r = r[1]; } for (var j = idx + 1; j < thingIds.length; j++) { if (thingIds[idx] == thingIds[j]) { s += '\n' + $(things[j]).text(); } else break; } var e = $(document.createElement('textarea')).addClass('wikidialog-textarea').attr('id',thingIds[idx]).attr('cols',c).attr('rows',r).val(s); if ($(this).is('.wikidialog-hidden')) e.css('display','none'); return e; }); // // [[Template:Dialog/checkbox|checkbox]] // $('span.wikidialog-checkbox').replaceWith(function () { var i = $(this).attr('id'); var s = $(this).text(); // .substring(0,32); // BOUND CHECKBOX CONTENT SIZE var result = $(document.createElement('input')).attr('type','checkbox').addClass('wikidialog-checkbox').attr('id',i); if (s.length > 8) result.attr('checked','yes'); return result; }); // // [[Template:Dialog/select|select]] // $('span.wikidialog-select').replaceWith(function () { var i = $(this).attr('id'); var s = $(this).text().split('&'); // .substring(0,8192).split('&'); // BOUND SELECT CONTENT SIZE var e = document.createElement('select'); for (var k=1; (k < s.length); k += 2) if (s[k-1]) { e.appendChild(new Option(s[k-1],s[k],false,false)); } return $(e).addClass('wikidialog-select').attr('id',i); }); // // [[Template:Dialog/button|button]] // $('span.wikidialog-button').replaceWith(function () { function getWikidialogID() { var s = location.search.match(/[\?&]wikidialogid=(\d+)/); return (s && s.length && (s.length > 1)) ? Number(s[1]) : 0; } function handleButton(event) { var target = $(event.target); var wikidialogButtonData = target.data('wikidialogButtonData'); var action = wikidialogButtonData.action; if (action.substring(0,5).toLowerCase() == 'user:') { var ug = mw.config.get('wgUserGroups'); if (!ug || ug.join(' ').indexOf("sysop") === -1) { alert('action requires admin privs: ' + action); return; } } else { action = mw.config.get('wgSiteName') + ':Dialog/' + action; } // action must be fully protected $('input.wikidialog-button').attr('disabled',true); $.getJSON( mw.util.wikiScript('api'), { format: 'json', action: 'query', prop: 'info', inprop: 'protection', titles: action } ).done( function(data) { var s = ''; if (data.query && data.query.pages) for (var p in data.query.pages) { if ("missing" in data.query.pages[p]) s = 'page not found'; else if ('invalid' in data.query.pages[p]) s = 'page name invalid'; else if ('protection' in data.query.pages[p]) { if (data.query.pages[p].protection[0] && data.query.pages[p].protection[1]) { if (('level' in data.query.pages[p].protection[0]) && ('level' in data.query.pages[p].protection[1])) { if ((data.query.pages[p].protection[0].level == 'sysop') && (data.query.pages[p].protection[1].level == 'sysop')) { } else s = 'page unsecured'; } else s = 'page query misfired'; } else s = 'page unsecured'; } else s = 'page query misfired'; } else s = 'page query failed'; if (s) { $('input.wikidialog-button').attr('disabled',false); alert(s + ': ' + action); return; } // action is now known to be fully protected // sessionStorage.wikidialogNextID was assured before setting up the button var id = sessionStorage.wikidialogNextID; s = mw.util.getUrl(action) + '?wikidialogid=' + id; sessionStorage.wikidialogNextID++; sessionStorage[id + ':incoming'] = s; sessionStorage[id + ':prevurl'] = location.href; // provided for rollback if ('unauth' in wikidialogButtonData) sessionStorage[id + ':unauth'] = wikidialogButtonData.unauth; else sessionStorage[id + ':unauth'] = mw.config.get('wgPageName'); if ('origin' in wikidialogButtonData) sessionStorage[id + ':origin'] = wikidialogButtonData.origin; if ('proxy' in wikidialogButtonData) sessionStorage[id + ':proxy'] = wikidialogButtonData.proxy; sessionStorage[id + ':params'] = ''; for (var j = 0; j < wikidialogButtonData.length; j++) { var d = wikidialogButtonData[j].match(/[\w-]+/g); d[1] = (d[1] ? d[1] : d[0]); d[1] = $('input#wikidialog-' + d[1] + ', textarea#wikidialog-' + d[1] + ', select#wikidialog-' + d[1]); if (d[1].length == 0) { } else { sessionStorage[id + ':params'] += d[0] + ','; var elt = d[1].first(); d[1] = d[1].add(target); for (var k = 0; k < d[1].length; k++) { if ($(d[1][k]).hasClass('wikidialog-button')) { k++; if (k < d[1].length) elt = $(d[1][k]); break; } } switch (elt.attr('type')) { case 'checkbox': d[1] = (elt[0].checked ? 'yes' : ''); break; default: d[1] = elt.val(); break; } sessionStorage[id + ':in:' + d[0]] = d[1]; } } if (target.hasClass('wikidialog-rescript')) { delete window.wikidialog; } sessionStorage.wikidialogSequenceBound = 10; // POINT TO ADJUST max action-sequence length // also occurs in receive location = s; } ).fail(function() { $('input.wikidialog-button').attr('disabled',false); alert('action target check failed: ' + action); }); } if (! (sessionStorage)) { // allows handler to assume sessionStorage return "<font color=red>&lt;button requires sessionStorage (not found; perhaps your browser is out of date?)&gt;</font>"; } if (sessionStorage.wikidialogNextID) {} else sessionStorage.wikidialogNextID = '1'; if (Number(sessionStorage.wikidialogNextID) <= getWikidialogID()) { alert('Warning: session data may be inaccessible\n(dialog ID should be less than stored count:\n dialog ID is ' + getWikidialogID() + '\n stored count is ' + sessionStorage.wikidialogNextID + ')'); sessionStorage.wikidialogNextID = getWikidialogID() + 1; } var s = $(this).text(); // .substring(0,1024); // BOUND BUTTON CONTENT SIZE var a = ''; if ( s.search(/^action=([\w\s-\/:]+)&/) == 0) { a = s.match(/^action=([\w\s-\/:]+)&(.*)/); s = a[2]; a = a[1]; } var b = ''; if ( s.search(/^label=([\w\s-\/\:\(\)\.\,\;']+)&/) == 0) { // STUFF ALLOWED IN BUTTON LABELS b = s.match(/^label=([\w\s-\/\:\(\)\.\,\;']+)&(.*)/); // STUFF ALLOWED IN BUTTON LABELS s = b[2]; b = b[1]; } var wikidialogButtonData = $(this).data(); if ('wikidialogButtonData' in wikidialogButtonData) wikidialogButtonData = wikidialogButtonData.wikidialogButtonData; else wikidialogButtondata = {}; wikidialogButtonData.action = a; wikidialogButtonData.length = 0; var s = s.match(/([\w-]+:?[\w-]*)&/g); if (s != null) { wikidialogButtonData.length = s.length; for (var j = 0; j < s.length; j++) { wikidialogButtonData[j] = s[j].substring(0,s[j].length - 1); } } return $(document.createElement('input')).attr('type','button').addClass(this.className).val(b).attr('title',a).data('wikidialogButtonData',wikidialogButtonData).click(handleButton); }); // // [[Template:Dialog/ifsupported|ifsupported]] // if (sessionStorage) { $('.wikidialog-alternative').css('display','none'); $('.wikidialog-dependent').css('display','inline'); } }; } window.wikidialog.show(); sadotyvkcb76zciokubspvtxbzt2jvv 14541 14540 2015-08-07T23:46:03Z Pi zero 2546 0.4 first stage of internal rename (store under both old and new names) 14541 javascript text/javascript /* This script provides a function to set up dialog fields and buttons based on markup generated by [[:Category:dialog formatting templates|dialog formatting templates]]. Any javascript page importing this page should also contain a commented link to it, for [[Special:WhatLinksHere/{{FULLPAGENAME}}]]. For instructions, see the [[{{TALKPAGENAME}}|talk page]]. [[Category:Dialog javascript pages]] */ if (! window.wikidialog) window.wikidialog = {}; if (! window.wikidialog.show) { // // version // window.wikidialog.gadgetVersion = function() { return '0.4 (2015-08-07)'; } // window.wikidialog.show = function () { // // [[Template:Dialog/text|text]] // var things = $('span.wikidialog-text'); var thingIds = things.map(function () { return $(this).attr('id'); }); things.replaceWith(function (idx) { if ((idx > 0) && (thingIds[idx] == thingIds[idx - 1])) { return ''; } var s = $(this).text(); // .substring(0,1024); // BOUND TEXT CONTENT SIZE var d = ''; if ( s.search(/^size=(\d*)&/) == 0) { d = s.match(/^size=(\d*)&(.*)/); s = d[2]; d = d[1]; } for (var j = idx + 1; j < thingIds.length; j++) { if (thingIds[idx] == thingIds[j]) { s += ' ' + $(things[j]).text(); } else break; } var e = $(document.createElement('input')).attr('type','text').addClass('wikidialog-text').attr('id',thingIds[idx]).val(s).attr('size',d); if ($(this).is('.wikidialog-hidden')) e.css('display','none'); return e; }); // // [[Template:Dialog/textarea|textarea]] // things = $('span.wikidialog-textarea'); thingIds = things.map(function () { return $(this).attr('id'); }); things.replaceWith(function (idx) { if ((idx > 0) && (thingIds[idx] == thingIds[idx - 1])) { return ' '; } var s = $(this).text(); // .substring(0,131072); // BOUND TEXTAREA CONTENT SIZE var c = ''; if ( s.search(/^cols=(\d*)&/) == 0) { c = s.match(/^cols=(\d*)&(.*)/); s = c[2]; c = c[1]; } var r = ''; if ( s.search(/^rows=(\d*)&/) == 0) { r = s.match(/^rows=(\d*)&(.*)/); s = r[2]; r = r[1]; } for (var j = idx + 1; j < thingIds.length; j++) { if (thingIds[idx] == thingIds[j]) { s += '\n' + $(things[j]).text(); } else break; } var e = $(document.createElement('textarea')).addClass('wikidialog-textarea').attr('id',thingIds[idx]).attr('cols',c).attr('rows',r).val(s); if ($(this).is('.wikidialog-hidden')) e.css('display','none'); return e; }); // // [[Template:Dialog/checkbox|checkbox]] // $('span.wikidialog-checkbox').replaceWith(function () { var i = $(this).attr('id'); var s = $(this).text(); // .substring(0,32); // BOUND CHECKBOX CONTENT SIZE var result = $(document.createElement('input')).attr('type','checkbox').addClass('wikidialog-checkbox').attr('id',i); if (s.length > 8) result.attr('checked','yes'); return result; }); // // [[Template:Dialog/select|select]] // $('span.wikidialog-select').replaceWith(function () { var i = $(this).attr('id'); var s = $(this).text().split('&'); // .substring(0,8192).split('&'); // BOUND SELECT CONTENT SIZE var e = document.createElement('select'); for (var k=1; (k < s.length); k += 2) if (s[k-1]) { e.appendChild(new Option(s[k-1],s[k],false,false)); } return $(e).addClass('wikidialog-select').attr('id',i); }); // // [[Template:Dialog/button|button]] // $('span.wikidialog-button').replaceWith(function () { function getWikidialogID() { var s = location.search.match(/[\?&]wikidialogid=(\d+)/); return (s && s.length && (s.length > 1)) ? Number(s[1]) : 0; } function handleButton(event) { var target = $(event.target); var wikidialogButtonData = target.data('wikidialogButtonData'); var action = wikidialogButtonData.action; if (action.substring(0,5).toLowerCase() == 'user:') { var ug = mw.config.get('wgUserGroups'); if (!ug || ug.join(' ').indexOf("sysop") === -1) { alert('action requires admin privs: ' + action); return; } } else { action = mw.config.get('wgSiteName') + ':Dialog/' + action; } // action must be fully protected $('input.wikidialog-button').attr('disabled',true); $.getJSON( mw.util.wikiScript('api'), { format: 'json', action: 'query', prop: 'info', inprop: 'protection', titles: action } ).done( function(data) { var s = ''; if (data.query && data.query.pages) for (var p in data.query.pages) { if ("missing" in data.query.pages[p]) s = 'page not found'; else if ('invalid' in data.query.pages[p]) s = 'page name invalid'; else if ('protection' in data.query.pages[p]) { if (data.query.pages[p].protection[0] && data.query.pages[p].protection[1]) { if (('level' in data.query.pages[p].protection[0]) && ('level' in data.query.pages[p].protection[1])) { if ((data.query.pages[p].protection[0].level == 'sysop') && (data.query.pages[p].protection[1].level == 'sysop')) { } else s = 'page unsecured'; } else s = 'page query misfired'; } else s = 'page unsecured'; } else s = 'page query misfired'; } else s = 'page query failed'; if (s) { $('input.wikidialog-button').attr('disabled',false); alert(s + ': ' + action); return; } // action is now known to be fully protected // sessionStorage.wikidialogNextID was assured before setting up the button var id = sessionStorage.wikidialogNextID; s = mw.util.getUrl(action) + '?wikidialogid=' + id; sessionStorage.wikidialogNextID++; sessionStorage[id + ':incoming'] = s; sessionStorage['wikidialog:' + id + ':incoming'] = s; sessionStorage[id + ':prevurl'] = location.href; sessionStorage['wikidialog:' + id + ':prevurl'] = location.href; // provided for rollback if ('unauth' in wikidialogButtonData) { sessionStorage[id + ':unauth'] = wikidialogButtonData.unauth; sessionStorage['wikidialog:' + id + id + ':unauth'] = wikidialogButtonData.unauth; } else { sessionStorage[id + ':unauth'] = mw.config.get('wgPageName'); sessionStorage['wikidialog:' + id + ':unauth'] = mw.config.get('wgPageName'); } if ('origin' in wikidialogButtonData) { sessionStorage[id + ':origin'] = wikidialogButtonData.origin; sessionStorage['wikidialog:' + id + ':origin'] = wikidialogButtonData.origin; } if ('proxy' in wikidialogButtonData) { sessionStorage[id + ':proxy'] = wikidialogButtonData.proxy; sessionStorage['wikidialog:' + id + ':proxy'] = wikidialogButtonData.proxy; } sessionStorage[id + ':params'] = ''; sessionStorage['wikidialog:' + id + ':params'] = ''; for (var j = 0; j < wikidialogButtonData.length; j++) { var d = wikidialogButtonData[j].match(/[\w-]+/g); d[1] = (d[1] ? d[1] : d[0]); d[1] = $('input#wikidialog-' + d[1] + ', textarea#wikidialog-' + d[1] + ', select#wikidialog-' + d[1]); if (d[1].length == 0) { } else { sessionStorage[id + ':params'] += d[0] + ','; sessionStorage['wikidialog:' + id + ':params'] += d[0] + ','; var elt = d[1].first(); d[1] = d[1].add(target); for (var k = 0; k < d[1].length; k++) { if ($(d[1][k]).hasClass('wikidialog-button')) { k++; if (k < d[1].length) elt = $(d[1][k]); break; } } switch (elt.attr('type')) { case 'checkbox': d[1] = (elt[0].checked ? 'yes' : ''); break; default: d[1] = elt.val(); break; } sessionStorage[id + ':in:' + d[0]] = d[1]; sessionStorage['wikidialog:' + id + ':in:' + d[0]] = d[1]; } } if (target.hasClass('wikidialog-rescript')) { delete window.wikidialog; } sessionStorage.wikidialogSequenceBound = 10; // POINT TO ADJUST max action-sequence length // also occurs in receive location = s; } ).fail(function() { $('input.wikidialog-button').attr('disabled',false); alert('action target check failed: ' + action); }); } if (! (sessionStorage)) { // allows handler to assume sessionStorage return "<font color=red>&lt;button requires sessionStorage (not found; perhaps your browser is out of date?)&gt;</font>"; } if (sessionStorage.wikidialogNextID) {} else sessionStorage.wikidialogNextID = '1'; if (Number(sessionStorage.wikidialogNextID) <= getWikidialogID()) { alert('Warning: session data may be inaccessible\n(dialog ID should be less than stored count:\n dialog ID is ' + getWikidialogID() + '\n stored count is ' + sessionStorage.wikidialogNextID + ')'); sessionStorage.wikidialogNextID = getWikidialogID() + 1; } var s = $(this).text(); // .substring(0,1024); // BOUND BUTTON CONTENT SIZE var a = ''; if ( s.search(/^action=([\w\s-\/:]+)&/) == 0) { a = s.match(/^action=([\w\s-\/:]+)&(.*)/); s = a[2]; a = a[1]; } var b = ''; if ( s.search(/^label=([\w\s-\/\:\(\)\.\,\;']+)&/) == 0) { // STUFF ALLOWED IN BUTTON LABELS b = s.match(/^label=([\w\s-\/\:\(\)\.\,\;']+)&(.*)/); // STUFF ALLOWED IN BUTTON LABELS s = b[2]; b = b[1]; } var wikidialogButtonData = $(this).data(); if ('wikidialogButtonData' in wikidialogButtonData) wikidialogButtonData = wikidialogButtonData.wikidialogButtonData; else wikidialogButtondata = {}; wikidialogButtonData.action = a; wikidialogButtonData.length = 0; var s = s.match(/([\w-]+:?[\w-]*)&/g); if (s != null) { wikidialogButtonData.length = s.length; for (var j = 0; j < s.length; j++) { wikidialogButtonData[j] = s[j].substring(0,s[j].length - 1); } } return $(document.createElement('input')).attr('type','button').addClass(this.className).val(b).attr('title',a).data('wikidialogButtonData',wikidialogButtonData).click(handleButton); }); // // [[Template:Dialog/ifsupported|ifsupported]] // if (sessionStorage) { $('.wikidialog-alternative').css('display','none'); $('.wikidialog-dependent').css('display','inline'); } }; } window.wikidialog.show(); 9fiy4i5s66xt7d0ugxdlmfkwmz21qv3 14542 14541 2015-08-08T15:20:10Z Pi zero 2546 0.5 third-and-final stage of internal rename (don't store old names) 14542 javascript text/javascript /* This script provides a function to set up dialog fields and buttons based on markup generated by [[:Category:dialog formatting templates|dialog formatting templates]]. Any javascript page importing this page should also contain a commented link to it, for [[Special:WhatLinksHere/{{FULLPAGENAME}}]]. For instructions, see the [[{{TALKPAGENAME}}|talk page]]. [[Category:Dialog javascript pages]] */ if (! window.wikidialog) window.wikidialog = {}; if (! window.wikidialog.show) { // // version // window.wikidialog.gadgetVersion = function() { return '0.5 (2015-08-08)'; } // window.wikidialog.show = function () { // // [[Template:Dialog/text|text]] // var things = $('span.wikidialog-text'); var thingIds = things.map(function () { return $(this).attr('id'); }); things.replaceWith(function (idx) { if ((idx > 0) && (thingIds[idx] == thingIds[idx - 1])) { return ''; } var s = $(this).text(); // .substring(0,1024); // BOUND TEXT CONTENT SIZE var d = ''; if ( s.search(/^size=(\d*)&/) == 0) { d = s.match(/^size=(\d*)&(.*)/); s = d[2]; d = d[1]; } for (var j = idx + 1; j < thingIds.length; j++) { if (thingIds[idx] == thingIds[j]) { s += ' ' + $(things[j]).text(); } else break; } var e = $(document.createElement('input')).attr('type','text').addClass('wikidialog-text').attr('id',thingIds[idx]).val(s).attr('size',d); if ($(this).is('.wikidialog-hidden')) e.css('display','none'); return e; }); // // [[Template:Dialog/textarea|textarea]] // things = $('span.wikidialog-textarea'); thingIds = things.map(function () { return $(this).attr('id'); }); things.replaceWith(function (idx) { if ((idx > 0) && (thingIds[idx] == thingIds[idx - 1])) { return ' '; } var s = $(this).text(); // .substring(0,131072); // BOUND TEXTAREA CONTENT SIZE var c = ''; if ( s.search(/^cols=(\d*)&/) == 0) { c = s.match(/^cols=(\d*)&(.*)/); s = c[2]; c = c[1]; } var r = ''; if ( s.search(/^rows=(\d*)&/) == 0) { r = s.match(/^rows=(\d*)&(.*)/); s = r[2]; r = r[1]; } for (var j = idx + 1; j < thingIds.length; j++) { if (thingIds[idx] == thingIds[j]) { s += '\n' + $(things[j]).text(); } else break; } var e = $(document.createElement('textarea')).addClass('wikidialog-textarea').attr('id',thingIds[idx]).attr('cols',c).attr('rows',r).val(s); if ($(this).is('.wikidialog-hidden')) e.css('display','none'); return e; }); // // [[Template:Dialog/checkbox|checkbox]] // $('span.wikidialog-checkbox').replaceWith(function () { var i = $(this).attr('id'); var s = $(this).text(); // .substring(0,32); // BOUND CHECKBOX CONTENT SIZE var result = $(document.createElement('input')).attr('type','checkbox').addClass('wikidialog-checkbox').attr('id',i); if (s.length > 8) result.attr('checked','yes'); return result; }); // // [[Template:Dialog/select|select]] // $('span.wikidialog-select').replaceWith(function () { var i = $(this).attr('id'); var s = $(this).text().split('&'); // .substring(0,8192).split('&'); // BOUND SELECT CONTENT SIZE var e = document.createElement('select'); for (var k=1; (k < s.length); k += 2) if (s[k-1]) { e.appendChild(new Option(s[k-1],s[k],false,false)); } return $(e).addClass('wikidialog-select').attr('id',i); }); // // [[Template:Dialog/button|button]] // $('span.wikidialog-button').replaceWith(function () { function getWikidialogID() { var s = location.search.match(/[\?&]wikidialogid=(\d+)/); return (s && s.length && (s.length > 1)) ? Number(s[1]) : 0; } function handleButton(event) { var target = $(event.target); var wikidialogButtonData = target.data('wikidialogButtonData'); var action = wikidialogButtonData.action; if (action.substring(0,5).toLowerCase() == 'user:') { var ug = mw.config.get('wgUserGroups'); if (!ug || ug.join(' ').indexOf("sysop") === -1) { alert('action requires admin privs: ' + action); return; } } else { action = mw.config.get('wgSiteName') + ':Dialog/' + action; } // action must be fully protected $('input.wikidialog-button').attr('disabled',true); $.getJSON( mw.util.wikiScript('api'), { format: 'json', action: 'query', prop: 'info', inprop: 'protection', titles: action } ).done( function(data) { var s = ''; if (data.query && data.query.pages) for (var p in data.query.pages) { if ("missing" in data.query.pages[p]) s = 'page not found'; else if ('invalid' in data.query.pages[p]) s = 'page name invalid'; else if ('protection' in data.query.pages[p]) { if (data.query.pages[p].protection[0] && data.query.pages[p].protection[1]) { if (('level' in data.query.pages[p].protection[0]) && ('level' in data.query.pages[p].protection[1])) { if ((data.query.pages[p].protection[0].level == 'sysop') && (data.query.pages[p].protection[1].level == 'sysop')) { } else s = 'page unsecured'; } else s = 'page query misfired'; } else s = 'page unsecured'; } else s = 'page query misfired'; } else s = 'page query failed'; if (s) { $('input.wikidialog-button').attr('disabled',false); alert(s + ': ' + action); return; } // action is now known to be fully protected // sessionStorage.wikidialogNextID was assured before setting up the button var id = sessionStorage.wikidialogNextID; s = mw.util.getUrl(action) + '?wikidialogid=' + id; sessionStorage.wikidialogNextID++; sessionStorage['wikidialog:' + id + ':incoming'] = s; sessionStorage['wikidialog:' + id + ':prevurl'] = location.href; // provided for rollback if ('unauth' in wikidialogButtonData) sessionStorage['wikidialog:' + id + ':unauth'] = wikidialogButtonData.unauth; else sessionStorage['wikidialog:' + id + ':unauth'] = mw.config.get('wgPageName'); if ('origin' in wikidialogButtonData) sessionStorage['wikidialog:' + id + ':origin'] = wikidialogButtonData.origin; if ('proxy' in wikidialogButtonData) sessionStorage['wikidialog:' + id + ':proxy'] = wikidialogButtonData.proxy; sessionStorage['wikidialog:' + id + ':params'] = ''; for (var j = 0; j < wikidialogButtonData.length; j++) { var d = wikidialogButtonData[j].match(/[\w-]+/g); d[1] = (d[1] ? d[1] : d[0]); d[1] = $('input#wikidialog-' + d[1] + ', textarea#wikidialog-' + d[1] + ', select#wikidialog-' + d[1]); if (d[1].length == 0) { } else { sessionStorage['wikidialog:' + id + ':params'] += d[0] + ','; var elt = d[1].first(); d[1] = d[1].add(target); for (var k = 0; k < d[1].length; k++) { if ($(d[1][k]).hasClass('wikidialog-button')) { k++; if (k < d[1].length) elt = $(d[1][k]); break; } } switch (elt.attr('type')) { case 'checkbox': d[1] = (elt[0].checked ? 'yes' : ''); break; default: d[1] = elt.val(); break; } sessionStorage['wikidialog:' + id + ':in:' + d[0]] = d[1]; } } if (target.hasClass('wikidialog-rescript')) { delete window.wikidialog; } sessionStorage.wikidialogSequenceBound = 10; // POINT TO ADJUST max action-sequence length // also occurs in receive location = s; } ).fail(function() { $('input.wikidialog-button').attr('disabled',false); alert('action target check failed: ' + action); }); } if (! (sessionStorage)) { // allows handler to assume sessionStorage return "<font color=red>&lt;button requires sessionStorage (not found; perhaps your browser is out of date?)&gt;</font>"; } if (sessionStorage.wikidialogNextID) {} else sessionStorage.wikidialogNextID = '1'; if (Number(sessionStorage.wikidialogNextID) <= getWikidialogID()) { alert('Warning: session data may be inaccessible\n(dialog ID should be less than stored count:\n dialog ID is ' + getWikidialogID() + '\n stored count is ' + sessionStorage.wikidialogNextID + ')'); sessionStorage.wikidialogNextID = getWikidialogID() + 1; } var s = $(this).text(); // .substring(0,1024); // BOUND BUTTON CONTENT SIZE var a = ''; if ( s.search(/^action=([\w\s-\/:]+)&/) == 0) { a = s.match(/^action=([\w\s-\/:]+)&(.*)/); s = a[2]; a = a[1]; } var b = ''; if ( s.search(/^label=([\w\s-\/\:\(\)\.\,\;']+)&/) == 0) { // STUFF ALLOWED IN BUTTON LABELS b = s.match(/^label=([\w\s-\/\:\(\)\.\,\;']+)&(.*)/); // STUFF ALLOWED IN BUTTON LABELS s = b[2]; b = b[1]; } var wikidialogButtonData = $(this).data(); if ('wikidialogButtonData' in wikidialogButtonData) wikidialogButtonData = wikidialogButtonData.wikidialogButtonData; else wikidialogButtondata = {}; wikidialogButtonData.action = a; wikidialogButtonData.length = 0; var s = s.match(/([\w-]+:?[\w-]*)&/g); if (s != null) { wikidialogButtonData.length = s.length; for (var j = 0; j < s.length; j++) { wikidialogButtonData[j] = s[j].substring(0,s[j].length - 1); } } return $(document.createElement('input')).attr('type','button').addClass(this.className).val(b).attr('title',a).data('wikidialogButtonData',wikidialogButtonData).click(handleButton); }); // // [[Template:Dialog/ifsupported|ifsupported]] // if (sessionStorage) { $('.wikidialog-alternative').css('display','none'); $('.wikidialog-dependent').css('display','inline'); } }; } window.wikidialog.show(); qh5jaxen1ely47wgbwpvktx0ee8yqc7 14543 14542 2015-11-06T23:54:41Z Pi zero 2546 0.6 rollback 14543 javascript text/javascript /* This script provides a function to set up dialog fields and buttons based on markup generated by [[:Category:dialog formatting templates|dialog formatting templates]]. Any javascript page importing this page should also contain a commented link to it, for [[Special:WhatLinksHere/{{FULLPAGENAME}}]]. For instructions, see the [[{{TALKPAGENAME}}|talk page]]. [[Category:Dialog javascript pages]] */ if (! window.wikidialog) window.wikidialog = {}; if (! window.wikidialog.show) { // // version // window.wikidialog.gadgetVersion = function() { return '0.6 (2015-11-06)'; } // window.wikidialog.show = function () { // // [[Template:Dialog/text|text]] // var things = $('span.wikidialog-text'); var thingIds = things.map(function () { return $(this).attr('id'); }); things.replaceWith(function (idx) { if ((idx > 0) && (thingIds[idx] == thingIds[idx - 1])) { return ''; } var s = $(this).text(); // .substring(0,1024); // BOUND TEXT CONTENT SIZE var d = ''; if ( s.search(/^size=(\d*)&/) == 0) { d = s.match(/^size=(\d*)&(.*)/); s = d[2]; d = d[1]; } for (var j = idx + 1; j < thingIds.length; j++) { if (thingIds[idx] == thingIds[j]) { s += ' ' + $(things[j]).text(); } else break; } var e = $(document.createElement('input')).attr('type','text').addClass('wikidialog-text').attr('id',thingIds[idx]).val(s).attr('size',d); if ($(this).is('.wikidialog-hidden')) e.css('display','none'); return e; }); // // [[Template:Dialog/textarea|textarea]] // things = $('span.wikidialog-textarea'); thingIds = things.map(function () { return $(this).attr('id'); }); things.replaceWith(function (idx) { if ((idx > 0) && (thingIds[idx] == thingIds[idx - 1])) { return ' '; } var s = $(this).text(); // .substring(0,131072); // BOUND TEXTAREA CONTENT SIZE var c = ''; if ( s.search(/^cols=(\d*)&/) == 0) { c = s.match(/^cols=(\d*)&(.*)/); s = c[2]; c = c[1]; } var r = ''; if ( s.search(/^rows=(\d*)&/) == 0) { r = s.match(/^rows=(\d*)&(.*)/); s = r[2]; r = r[1]; } for (var j = idx + 1; j < thingIds.length; j++) { if (thingIds[idx] == thingIds[j]) { s += '\n' + $(things[j]).text(); } else break; } var e = $(document.createElement('textarea')).addClass('wikidialog-textarea').attr('id',thingIds[idx]).attr('cols',c).attr('rows',r).val(s); if ($(this).is('.wikidialog-hidden')) e.css('display','none'); return e; }); // // [[Template:Dialog/checkbox|checkbox]] // $('span.wikidialog-checkbox').replaceWith(function () { var i = $(this).attr('id'); var s = $(this).text(); // .substring(0,32); // BOUND CHECKBOX CONTENT SIZE var result = $(document.createElement('input')).attr('type','checkbox').addClass('wikidialog-checkbox').attr('id',i); if (s.length > 8) result.attr('checked','yes'); return result; }); // // [[Template:Dialog/select|select]] // $('span.wikidialog-select').replaceWith(function () { var i = $(this).attr('id'); var s = $(this).text().split('&'); // .substring(0,8192).split('&'); // BOUND SELECT CONTENT SIZE var e = document.createElement('select'); for (var k=1; (k < s.length); k += 2) if (s[k-1]) { e.appendChild(new Option(s[k-1],s[k],false,false)); } return $(e).addClass('wikidialog-select').attr('id',i); }); // // [[Template:Dialog/button|button]] // $('span.wikidialog-button').replaceWith(function () { function getWikidialogID() { var s = location.search.match(/[\?&]wikidialogid=(\d+)/); return (s && s.length && (s.length > 1)) ? Number(s[1]) : 0; } function getRollbackUrl(url, id) { var s = url.match(/[\?&]wikidialogid=(\d+)/); if (s && s.length && (s.length > 0)) { // url is stable return url; } s = sessionStorage.wikidialogUnstableUrl; if (s && (url == s)) { // url is unstable and known dialog-active // expect it to have had id one less than next-id s = ('wikidialogid=' + (id - 1)); } else { // url is unstable and might be dialog-active or not s = 'wikidialogrolledback=x'; } return (url + ((url.search(/\?/) > 0) ? '&' : '?') + s); } function handleButton(event) { var target = $(event.target); var wikidialogButtonData = target.data('wikidialogButtonData'); var action = wikidialogButtonData.action; if (action.substring(0,5).toLowerCase() == 'user:') { var ug = mw.config.get('wgUserGroups'); if (!ug || ug.join(' ').indexOf("sysop") === -1) { alert('action requires admin privs: ' + action); return; } } else { action = mw.config.get('wgSiteName') + ':Dialog/' + action; } // action must be fully protected $('input.wikidialog-button').attr('disabled',true); $.getJSON( mw.util.wikiScript('api'), { format: 'json', action: 'query', prop: 'info', inprop: 'protection', titles: action } ).done( function(data) { var s = ''; if (data.query && data.query.pages) for (var p in data.query.pages) { if ("missing" in data.query.pages[p]) s = 'page not found'; else if ('invalid' in data.query.pages[p]) s = 'page name invalid'; else if ('protection' in data.query.pages[p]) { if (data.query.pages[p].protection[0] && data.query.pages[p].protection[1]) { if (('level' in data.query.pages[p].protection[0]) && ('level' in data.query.pages[p].protection[1])) { if ((data.query.pages[p].protection[0].level == 'sysop') && (data.query.pages[p].protection[1].level == 'sysop')) { } else s = 'page unsecured'; } else s = 'page query misfired'; } else s = 'page unsecured'; } else s = 'page query misfired'; } else s = 'page query failed'; if (s) { $('input.wikidialog-button').attr('disabled',false); alert(s + ': ' + action); return; } // action is now known to be fully protected // sessionStorage.wikidialogNextID was assured before setting up the button var id = sessionStorage.wikidialogNextID; s = mw.util.getUrl(action) + '?wikidialogid=' + id; sessionStorage.wikidialogNextID++; sessionStorage['wikidialog:' + id + ':incoming'] = s; if (! target.hasClass('wikidialog-norollback')) { sessionStorage['wikidialog:' + id + ':prevurl'] = getRollbackUrl(location.href, Number(id)); } if ('unauth' in wikidialogButtonData) sessionStorage['wikidialog:' + id + ':unauth'] = wikidialogButtonData.unauth; else sessionStorage['wikidialog:' + id + ':unauth'] = mw.config.get('wgPageName'); if ('origin' in wikidialogButtonData) sessionStorage['wikidialog:' + id + ':origin'] = wikidialogButtonData.origin; if ('proxy' in wikidialogButtonData) sessionStorage['wikidialog:' + id + ':proxy'] = wikidialogButtonData.proxy; sessionStorage['wikidialog:' + id + ':params'] = ''; for (var j = 0; j < wikidialogButtonData.length; j++) { var d = wikidialogButtonData[j].match(/[\w-]+/g); d[1] = (d[1] ? d[1] : d[0]); d[1] = $('input#wikidialog-' + d[1] + ', textarea#wikidialog-' + d[1] + ', select#wikidialog-' + d[1]); if (d[1].length == 0) { } else { sessionStorage['wikidialog:' + id + ':params'] += d[0] + ','; var elt = d[1].first(); d[1] = d[1].add(target); for (var k = 0; k < d[1].length; k++) { if ($(d[1][k]).hasClass('wikidialog-button')) { k++; if (k < d[1].length) elt = $(d[1][k]); break; } } switch (elt.attr('type')) { case 'checkbox': d[1] = (elt[0].checked ? 'yes' : ''); break; default: d[1] = elt.val(); break; } sessionStorage['wikidialog:' + id + ':in:' + d[0]] = d[1]; } } if (target.hasClass('wikidialog-rescript')) { delete window.wikidialog; } sessionStorage.wikidialogSequenceBound = 10; // POINT TO ADJUST max action-sequence length // also occurs in receive location = s; } ).fail(function() { $('input.wikidialog-button').attr('disabled',false); alert('action target check failed: ' + action); }); } if (! (sessionStorage)) { // allows handler to assume sessionStorage return "<font color=red>&lt;button requires sessionStorage (not found; perhaps your browser is out of date?)&gt;</font>"; } if (sessionStorage.wikidialogNextID) {} else sessionStorage.wikidialogNextID = '1'; if (Number(sessionStorage.wikidialogNextID) <= getWikidialogID()) { alert('Warning: session data may be inaccessible\n(dialog ID should be less than stored count:\n dialog ID is ' + getWikidialogID() + '\n stored count is ' + sessionStorage.wikidialogNextID + ')'); sessionStorage.wikidialogNextID = getWikidialogID() + 1; } var s = $(this).text(); // .substring(0,1024); // BOUND BUTTON CONTENT SIZE var a = ''; if ( s.search(/^action=([\w\s-\/:]+)&/) == 0) { a = s.match(/^action=([\w\s-\/:]+)&(.*)/); s = a[2]; a = a[1]; } var b = ''; if ( s.search(/^label=([\w\s-\/\:\(\)\.\,\;']+)&/) == 0) { // STUFF ALLOWED IN BUTTON LABELS b = s.match(/^label=([\w\s-\/\:\(\)\.\,\;']+)&(.*)/); // STUFF ALLOWED IN BUTTON LABELS s = b[2]; b = b[1]; } var wikidialogButtonData = $(this).data(); if ('wikidialogButtonData' in wikidialogButtonData) wikidialogButtonData = wikidialogButtonData.wikidialogButtonData; else wikidialogButtondata = {}; wikidialogButtonData.action = a; wikidialogButtonData.length = 0; var s = s.match(/([\w-]+:?[\w-]*)&/g); if (s != null) { wikidialogButtonData.length = s.length; for (var j = 0; j < s.length; j++) { wikidialogButtonData[j] = s[j].substring(0,s[j].length - 1); } } return $(document.createElement('input')).attr('type','button').addClass(this.className).val(b).attr('title',a).data('wikidialogButtonData',wikidialogButtonData).click(handleButton); }); // // [[Template:Dialog/ifsupported|ifsupported]] // if (sessionStorage) { $('.wikidialog-alternative').css('display','none'); $('.wikidialog-dependent').css('display','inline'); } }; } window.wikidialog.show(); pni96m7q84hh6fp8j9knofezv4ow033 14544 14543 2015-11-21T00:58:43Z Pi zero 2546 0.7 hide local fields 14544 javascript text/javascript /* This script provides a function to set up dialog fields and buttons based on markup generated by [[:Category:dialog formatting templates|dialog formatting templates]]. Any javascript page importing this page should also contain a commented link to it, for [[Special:WhatLinksHere/{{FULLPAGENAME}}]]. For instructions, see the [[{{TALKPAGENAME}}|talk page]]. [[Category:Dialog javascript pages]] */ if (! window.wikidialog) window.wikidialog = {}; if (! window.wikidialog.show) { // // version // window.wikidialog.gadgetVersion = function() { return '0.7 (2015-11-21)'; } // window.wikidialog.show = function () { // // [[Template:Dialog/text|text]] // var things = $('span.wikidialog-text'); var thingIds = things.map(function () { return $(this).attr('id'); }); things.replaceWith(function (idx) { if ((idx > 0) && (thingIds[idx] == thingIds[idx - 1])) { return ''; } var s = $(this).text(); // .substring(0,1024); // BOUND TEXT CONTENT SIZE var d = ''; if ( s.search(/^size=(\d*)&/) == 0) { d = s.match(/^size=(\d*)&(.*)/); s = d[2]; d = d[1]; } for (var j = idx + 1; j < thingIds.length; j++) { if (thingIds[idx] == thingIds[j]) { s += ' ' + $(things[j]).text(); } else break; } var e = $(document.createElement('input')).attr('type','text').addClass('wikidialog-text').attr('id',thingIds[idx]).val(s).attr('size',d); if (($(this).is('.wikidialog-hidden')) || (thingIds[idx].search(/local/) == 11)) e.css('display','none'); return e; }); // // [[Template:Dialog/textarea|textarea]] // things = $('span.wikidialog-textarea'); thingIds = things.map(function () { return $(this).attr('id'); }); things.replaceWith(function (idx) { if ((idx > 0) && (thingIds[idx] == thingIds[idx - 1])) { return ' '; } var s = $(this).text(); // .substring(0,131072); // BOUND TEXTAREA CONTENT SIZE var c = ''; if ( s.search(/^cols=(\d*)&/) == 0) { c = s.match(/^cols=(\d*)&(.*)/); s = c[2]; c = c[1]; } var r = ''; if ( s.search(/^rows=(\d*)&/) == 0) { r = s.match(/^rows=(\d*)&(.*)/); s = r[2]; r = r[1]; } for (var j = idx + 1; j < thingIds.length; j++) { if (thingIds[idx] == thingIds[j]) { s += '\n' + $(things[j]).text(); } else break; } var e = $(document.createElement('textarea')).addClass('wikidialog-textarea').attr('id',thingIds[idx]).attr('cols',c).attr('rows',r).val(s); if (($(this).is('.wikidialog-hidden')) || (thingIds[idx].search(/local/) == 11)) e.css('display','none'); return e; }); // // [[Template:Dialog/checkbox|checkbox]] // $('span.wikidialog-checkbox').replaceWith(function () { var i = $(this).attr('id'); var s = $(this).text(); // .substring(0,32); // BOUND CHECKBOX CONTENT SIZE var result = $(document.createElement('input')).attr('type','checkbox').addClass('wikidialog-checkbox').attr('id',i); if (s.length > 8) result.attr('checked','yes'); if (i.search(/local/) == 11) result.css('display','none'); return result; }); // // [[Template:Dialog/select|select]] // $('span.wikidialog-select').replaceWith(function () { var i = $(this).attr('id'); var s = $(this).text().split('&'); // .substring(0,8192).split('&'); // BOUND SELECT CONTENT SIZE var e = document.createElement('select'); for (var k=1; (k < s.length); k += 2) if (s[k-1]) { e.appendChild(new Option(s[k-1],s[k],false,false)); } e = $(e).addClass('wikidialog-select').attr('id',i); if (i.search(/local/) == 11) e.css('display','none'); return e; }); // // [[Template:Dialog/button|button]] // $('span.wikidialog-button').replaceWith(function () { function getWikidialogID() { var s = location.search.match(/[\?&]wikidialogid=(\d+)/); return (s && s.length && (s.length > 1)) ? Number(s[1]) : 0; } function getRollbackUrl(url, id) { var s = url.match(/[\?&]wikidialogid=(\d+)/); if (s && s.length && (s.length > 0)) { // url is stable return url; } s = sessionStorage.wikidialogUnstableUrl; if (s && (url == s)) { // url is unstable and known dialog-active // expect it to have had id one less than next-id s = ('wikidialogid=' + (id - 1)); } else { // url is unstable and might be dialog-active or not s = 'wikidialogrolledback=x'; } return (url + ((url.search(/\?/) > 0) ? '&' : '?') + s); } function handleButton(event) { var target = $(event.target); var wikidialogButtonData = target.data('wikidialogButtonData'); var action = wikidialogButtonData.action; if (action.substring(0,5).toLowerCase() == 'user:') { var ug = mw.config.get('wgUserGroups'); if (!ug || ug.join(' ').indexOf("sysop") === -1) { alert('action requires admin privs: ' + action); return; } } else { action = mw.config.get('wgSiteName') + ':Dialog/' + action; } // action must be fully protected $('input.wikidialog-button').attr('disabled',true); $.getJSON( mw.util.wikiScript('api'), { format: 'json', action: 'query', prop: 'info', inprop: 'protection', titles: action } ).done( function(data) { var s = ''; if (data.query && data.query.pages) for (var p in data.query.pages) { if ("missing" in data.query.pages[p]) s = 'page not found'; else if ('invalid' in data.query.pages[p]) s = 'page name invalid'; else if ('protection' in data.query.pages[p]) { if (data.query.pages[p].protection[0] && data.query.pages[p].protection[1]) { if (('level' in data.query.pages[p].protection[0]) && ('level' in data.query.pages[p].protection[1])) { if ((data.query.pages[p].protection[0].level == 'sysop') && (data.query.pages[p].protection[1].level == 'sysop')) { } else s = 'page unsecured'; } else s = 'page query misfired'; } else s = 'page unsecured'; } else s = 'page query misfired'; } else s = 'page query failed'; if (s) { $('input.wikidialog-button').attr('disabled',false); alert(s + ': ' + action); return; } // action is now known to be fully protected // sessionStorage.wikidialogNextID was assured before setting up the button var id = sessionStorage.wikidialogNextID; s = mw.util.getUrl(action) + '?wikidialogid=' + id; sessionStorage.wikidialogNextID++; sessionStorage['wikidialog:' + id + ':incoming'] = s; if (! target.hasClass('wikidialog-norollback')) { sessionStorage['wikidialog:' + id + ':prevurl'] = getRollbackUrl(location.href, Number(id)); } if ('unauth' in wikidialogButtonData) sessionStorage['wikidialog:' + id + ':unauth'] = wikidialogButtonData.unauth; else sessionStorage['wikidialog:' + id + ':unauth'] = mw.config.get('wgPageName'); if ('origin' in wikidialogButtonData) sessionStorage['wikidialog:' + id + ':origin'] = wikidialogButtonData.origin; if ('proxy' in wikidialogButtonData) sessionStorage['wikidialog:' + id + ':proxy'] = wikidialogButtonData.proxy; sessionStorage['wikidialog:' + id + ':params'] = ''; for (var j = 0; j < wikidialogButtonData.length; j++) { var d = wikidialogButtonData[j].match(/[\w-]+/g); d[1] = (d[1] ? d[1] : d[0]); d[1] = $('input#wikidialog-' + d[1] + ', textarea#wikidialog-' + d[1] + ', select#wikidialog-' + d[1]); if (d[1].length == 0) { } else { sessionStorage['wikidialog:' + id + ':params'] += d[0] + ','; var elt = d[1].first(); d[1] = d[1].add(target); for (var k = 0; k < d[1].length; k++) { if ($(d[1][k]).hasClass('wikidialog-button')) { k++; if (k < d[1].length) elt = $(d[1][k]); break; } } switch (elt.attr('type')) { case 'checkbox': d[1] = (elt[0].checked ? 'yes' : ''); break; default: d[1] = elt.val(); break; } sessionStorage['wikidialog:' + id + ':in:' + d[0]] = d[1]; } } if (target.hasClass('wikidialog-rescript')) { delete window.wikidialog; } sessionStorage.wikidialogSequenceBound = 10; // POINT TO ADJUST max action-sequence length // also occurs in receive location = s; } ).fail(function() { $('input.wikidialog-button').attr('disabled',false); alert('action target check failed: ' + action); }); } if (! (sessionStorage)) { // allows handler to assume sessionStorage return "<font color=red>&lt;button requires sessionStorage (not found; perhaps your browser is out of date?)&gt;</font>"; } if (sessionStorage.wikidialogNextID) {} else sessionStorage.wikidialogNextID = '1'; if (Number(sessionStorage.wikidialogNextID) <= getWikidialogID()) { alert('Warning: session data may be inaccessible\n(dialog ID should be less than stored count:\n dialog ID is ' + getWikidialogID() + '\n stored count is ' + sessionStorage.wikidialogNextID + ')'); sessionStorage.wikidialogNextID = getWikidialogID() + 1; } var s = $(this).text(); // .substring(0,1024); // BOUND BUTTON CONTENT SIZE var a = ''; if ( s.search(/^action=([\w\s-\/:]+)&/) == 0) { a = s.match(/^action=([\w\s-\/:]+)&(.*)/); s = a[2]; a = a[1]; } var b = ''; if ( s.search(/^label=([\w\s-\/\:\(\)\.\,\;']+)&/) == 0) { // STUFF ALLOWED IN BUTTON LABELS b = s.match(/^label=([\w\s-\/\:\(\)\.\,\;']+)&(.*)/); // STUFF ALLOWED IN BUTTON LABELS s = b[2]; b = b[1]; } var wikidialogButtonData = $(this).data(); if ('wikidialogButtonData' in wikidialogButtonData) wikidialogButtonData = wikidialogButtonData.wikidialogButtonData; else wikidialogButtondata = {}; wikidialogButtonData.action = a; wikidialogButtonData.length = 0; var s = s.match(/([\w-]+:?[\w-]*)&/g); if (s != null) { wikidialogButtonData.length = s.length; for (var j = 0; j < s.length; j++) { wikidialogButtonData[j] = s[j].substring(0,s[j].length - 1); } } return $(document.createElement('input')).attr('type','button').addClass(this.className).val(b).attr('title',a).data('wikidialogButtonData',wikidialogButtonData).click(handleButton); }); // // [[Template:Dialog/ifsupported|ifsupported]] // if (sessionStorage) { $('.wikidialog-alternative').css('display','none'); $('.wikidialog-dependent').css('display','inline'); } }; } window.wikidialog.show(); olryzybs6fb8wrt0fy5swiyel1tvs0j 14545 14544 2015-11-22T22:10:23Z Pi zero 2546 revert to 0.6 14545 javascript text/javascript /* This script provides a function to set up dialog fields and buttons based on markup generated by [[:Category:dialog formatting templates|dialog formatting templates]]. Any javascript page importing this page should also contain a commented link to it, for [[Special:WhatLinksHere/{{FULLPAGENAME}}]]. For instructions, see the [[{{TALKPAGENAME}}|talk page]]. [[Category:Dialog javascript pages]] */ if (! window.wikidialog) window.wikidialog = {}; if (! window.wikidialog.show) { // // version // window.wikidialog.gadgetVersion = function() { return '0.6 (2015-11-06)'; } // window.wikidialog.show = function () { // // [[Template:Dialog/text|text]] // var things = $('span.wikidialog-text'); var thingIds = things.map(function () { return $(this).attr('id'); }); things.replaceWith(function (idx) { if ((idx > 0) && (thingIds[idx] == thingIds[idx - 1])) { return ''; } var s = $(this).text(); // .substring(0,1024); // BOUND TEXT CONTENT SIZE var d = ''; if ( s.search(/^size=(\d*)&/) == 0) { d = s.match(/^size=(\d*)&(.*)/); s = d[2]; d = d[1]; } for (var j = idx + 1; j < thingIds.length; j++) { if (thingIds[idx] == thingIds[j]) { s += ' ' + $(things[j]).text(); } else break; } var e = $(document.createElement('input')).attr('type','text').addClass('wikidialog-text').attr('id',thingIds[idx]).val(s).attr('size',d); if ($(this).is('.wikidialog-hidden')) e.css('display','none'); return e; }); // // [[Template:Dialog/textarea|textarea]] // things = $('span.wikidialog-textarea'); thingIds = things.map(function () { return $(this).attr('id'); }); things.replaceWith(function (idx) { if ((idx > 0) && (thingIds[idx] == thingIds[idx - 1])) { return ' '; } var s = $(this).text(); // .substring(0,131072); // BOUND TEXTAREA CONTENT SIZE var c = ''; if ( s.search(/^cols=(\d*)&/) == 0) { c = s.match(/^cols=(\d*)&(.*)/); s = c[2]; c = c[1]; } var r = ''; if ( s.search(/^rows=(\d*)&/) == 0) { r = s.match(/^rows=(\d*)&(.*)/); s = r[2]; r = r[1]; } for (var j = idx + 1; j < thingIds.length; j++) { if (thingIds[idx] == thingIds[j]) { s += '\n' + $(things[j]).text(); } else break; } var e = $(document.createElement('textarea')).addClass('wikidialog-textarea').attr('id',thingIds[idx]).attr('cols',c).attr('rows',r).val(s); if ($(this).is('.wikidialog-hidden')) e.css('display','none'); return e; }); // // [[Template:Dialog/checkbox|checkbox]] // $('span.wikidialog-checkbox').replaceWith(function () { var i = $(this).attr('id'); var s = $(this).text(); // .substring(0,32); // BOUND CHECKBOX CONTENT SIZE var result = $(document.createElement('input')).attr('type','checkbox').addClass('wikidialog-checkbox').attr('id',i); if (s.length > 8) result.attr('checked','yes'); return result; }); // // [[Template:Dialog/select|select]] // $('span.wikidialog-select').replaceWith(function () { var i = $(this).attr('id'); var s = $(this).text().split('&'); // .substring(0,8192).split('&'); // BOUND SELECT CONTENT SIZE var e = document.createElement('select'); for (var k=1; (k < s.length); k += 2) if (s[k-1]) { e.appendChild(new Option(s[k-1],s[k],false,false)); } return $(e).addClass('wikidialog-select').attr('id',i); }); // // [[Template:Dialog/button|button]] // $('span.wikidialog-button').replaceWith(function () { function getWikidialogID() { var s = location.search.match(/[\?&]wikidialogid=(\d+)/); return (s && s.length && (s.length > 1)) ? Number(s[1]) : 0; } function getRollbackUrl(url, id) { var s = url.match(/[\?&]wikidialogid=(\d+)/); if (s && s.length && (s.length > 0)) { // url is stable return url; } s = sessionStorage.wikidialogUnstableUrl; if (s && (url == s)) { // url is unstable and known dialog-active // expect it to have had id one less than next-id s = ('wikidialogid=' + (id - 1)); } else { // url is unstable and might be dialog-active or not s = 'wikidialogrolledback=x'; } return (url + ((url.search(/\?/) > 0) ? '&' : '?') + s); } function handleButton(event) { var target = $(event.target); var wikidialogButtonData = target.data('wikidialogButtonData'); var action = wikidialogButtonData.action; if (action.substring(0,5).toLowerCase() == 'user:') { var ug = mw.config.get('wgUserGroups'); if (!ug || ug.join(' ').indexOf("sysop") === -1) { alert('action requires admin privs: ' + action); return; } } else { action = mw.config.get('wgSiteName') + ':Dialog/' + action; } // action must be fully protected $('input.wikidialog-button').attr('disabled',true); $.getJSON( mw.util.wikiScript('api'), { format: 'json', action: 'query', prop: 'info', inprop: 'protection', titles: action } ).done( function(data) { var s = ''; if (data.query && data.query.pages) for (var p in data.query.pages) { if ("missing" in data.query.pages[p]) s = 'page not found'; else if ('invalid' in data.query.pages[p]) s = 'page name invalid'; else if ('protection' in data.query.pages[p]) { if (data.query.pages[p].protection[0] && data.query.pages[p].protection[1]) { if (('level' in data.query.pages[p].protection[0]) && ('level' in data.query.pages[p].protection[1])) { if ((data.query.pages[p].protection[0].level == 'sysop') && (data.query.pages[p].protection[1].level == 'sysop')) { } else s = 'page unsecured'; } else s = 'page query misfired'; } else s = 'page unsecured'; } else s = 'page query misfired'; } else s = 'page query failed'; if (s) { $('input.wikidialog-button').attr('disabled',false); alert(s + ': ' + action); return; } // action is now known to be fully protected // sessionStorage.wikidialogNextID was assured before setting up the button var id = sessionStorage.wikidialogNextID; s = mw.util.getUrl(action) + '?wikidialogid=' + id; sessionStorage.wikidialogNextID++; sessionStorage['wikidialog:' + id + ':incoming'] = s; if (! target.hasClass('wikidialog-norollback')) { sessionStorage['wikidialog:' + id + ':prevurl'] = getRollbackUrl(location.href, Number(id)); } if ('unauth' in wikidialogButtonData) sessionStorage['wikidialog:' + id + ':unauth'] = wikidialogButtonData.unauth; else sessionStorage['wikidialog:' + id + ':unauth'] = mw.config.get('wgPageName'); if ('origin' in wikidialogButtonData) sessionStorage['wikidialog:' + id + ':origin'] = wikidialogButtonData.origin; if ('proxy' in wikidialogButtonData) sessionStorage['wikidialog:' + id + ':proxy'] = wikidialogButtonData.proxy; sessionStorage['wikidialog:' + id + ':params'] = ''; for (var j = 0; j < wikidialogButtonData.length; j++) { var d = wikidialogButtonData[j].match(/[\w-]+/g); d[1] = (d[1] ? d[1] : d[0]); d[1] = $('input#wikidialog-' + d[1] + ', textarea#wikidialog-' + d[1] + ', select#wikidialog-' + d[1]); if (d[1].length == 0) { } else { sessionStorage['wikidialog:' + id + ':params'] += d[0] + ','; var elt = d[1].first(); d[1] = d[1].add(target); for (var k = 0; k < d[1].length; k++) { if ($(d[1][k]).hasClass('wikidialog-button')) { k++; if (k < d[1].length) elt = $(d[1][k]); break; } } switch (elt.attr('type')) { case 'checkbox': d[1] = (elt[0].checked ? 'yes' : ''); break; default: d[1] = elt.val(); break; } sessionStorage['wikidialog:' + id + ':in:' + d[0]] = d[1]; } } if (target.hasClass('wikidialog-rescript')) { delete window.wikidialog; } sessionStorage.wikidialogSequenceBound = 10; // POINT TO ADJUST max action-sequence length // also occurs in receive location = s; } ).fail(function() { $('input.wikidialog-button').attr('disabled',false); alert('action target check failed: ' + action); }); } if (! (sessionStorage)) { // allows handler to assume sessionStorage return "<font color=red>&lt;button requires sessionStorage (not found; perhaps your browser is out of date?)&gt;</font>"; } if (sessionStorage.wikidialogNextID) {} else sessionStorage.wikidialogNextID = '1'; if (Number(sessionStorage.wikidialogNextID) <= getWikidialogID()) { alert('Warning: session data may be inaccessible\n(dialog ID should be less than stored count:\n dialog ID is ' + getWikidialogID() + '\n stored count is ' + sessionStorage.wikidialogNextID + ')'); sessionStorage.wikidialogNextID = getWikidialogID() + 1; } var s = $(this).text(); // .substring(0,1024); // BOUND BUTTON CONTENT SIZE var a = ''; if ( s.search(/^action=([\w\s-\/:]+)&/) == 0) { a = s.match(/^action=([\w\s-\/:]+)&(.*)/); s = a[2]; a = a[1]; } var b = ''; if ( s.search(/^label=([\w\s-\/\:\(\)\.\,\;']+)&/) == 0) { // STUFF ALLOWED IN BUTTON LABELS b = s.match(/^label=([\w\s-\/\:\(\)\.\,\;']+)&(.*)/); // STUFF ALLOWED IN BUTTON LABELS s = b[2]; b = b[1]; } var wikidialogButtonData = $(this).data(); if ('wikidialogButtonData' in wikidialogButtonData) wikidialogButtonData = wikidialogButtonData.wikidialogButtonData; else wikidialogButtondata = {}; wikidialogButtonData.action = a; wikidialogButtonData.length = 0; var s = s.match(/([\w-]+:?[\w-]*)&/g); if (s != null) { wikidialogButtonData.length = s.length; for (var j = 0; j < s.length; j++) { wikidialogButtonData[j] = s[j].substring(0,s[j].length - 1); } } return $(document.createElement('input')).attr('type','button').addClass(this.className).val(b).attr('title',a).data('wikidialogButtonData',wikidialogButtonData).click(handleButton); }); // // [[Template:Dialog/ifsupported|ifsupported]] // if (sessionStorage) { $('.wikidialog-alternative').css('display','none'); $('.wikidialog-dependent').css('display','inline'); } }; } window.wikidialog.show(); pni96m7q84hh6fp8j9knofezv4ow033 14546 14545 2016-01-07T20:06:53Z Pi zero 2546 0.7 button italic/bold 14546 javascript text/javascript /* This script provides a function to set up dialog fields and buttons based on markup generated by [[:Category:dialog formatting templates|dialog formatting templates]]. Any javascript page importing this page should also contain a commented link to it, for [[Special:WhatLinksHere/{{FULLPAGENAME}}]]. For instructions, see the [[{{TALKPAGENAME}}|talk page]]. [[Category:Dialog javascript pages]] */ if (! window.wikidialog) window.wikidialog = {}; if (! window.wikidialog.show) { // // version // window.wikidialog.gadgetVersion = function() { return '0.7 (2016-01-07)'; } // window.wikidialog.show = function () { // // [[Template:Dialog/text|text]] // var things = $('span.wikidialog-text'); var thingIds = things.map(function () { return $(this).attr('id'); }); things.replaceWith(function (idx) { if ((idx > 0) && (thingIds[idx] == thingIds[idx - 1])) { return ''; } var s = $(this).text(); // .substring(0,1024); // BOUND TEXT CONTENT SIZE var d = ''; if ( s.search(/^size=(\d*)&/) == 0) { d = s.match(/^size=(\d*)&(.*)/); s = d[2]; d = d[1]; } for (var j = idx + 1; j < thingIds.length; j++) { if (thingIds[idx] == thingIds[j]) { s += ' ' + $(things[j]).text(); } else break; } var e = $(document.createElement('input')).attr('type','text').addClass('wikidialog-text').attr('id',thingIds[idx]).val(s).attr('size',d); if ($(this).is('.wikidialog-hidden')) e.css('display','none'); return e; }); // // [[Template:Dialog/textarea|textarea]] // things = $('span.wikidialog-textarea'); thingIds = things.map(function () { return $(this).attr('id'); }); things.replaceWith(function (idx) { if ((idx > 0) && (thingIds[idx] == thingIds[idx - 1])) { return ' '; } var s = $(this).text(); // .substring(0,131072); // BOUND TEXTAREA CONTENT SIZE var c = ''; if ( s.search(/^cols=(\d*)&/) == 0) { c = s.match(/^cols=(\d*)&(.*)/); s = c[2]; c = c[1]; } var r = ''; if ( s.search(/^rows=(\d*)&/) == 0) { r = s.match(/^rows=(\d*)&(.*)/); s = r[2]; r = r[1]; } for (var j = idx + 1; j < thingIds.length; j++) { if (thingIds[idx] == thingIds[j]) { s += '\n' + $(things[j]).text(); } else break; } var e = $(document.createElement('textarea')).addClass('wikidialog-textarea').attr('id',thingIds[idx]).attr('cols',c).attr('rows',r).val(s); if ($(this).is('.wikidialog-hidden')) e.css('display','none'); return e; }); // // [[Template:Dialog/checkbox|checkbox]] // $('span.wikidialog-checkbox').replaceWith(function () { var i = $(this).attr('id'); var s = $(this).text(); // .substring(0,32); // BOUND CHECKBOX CONTENT SIZE var result = $(document.createElement('input')).attr('type','checkbox').addClass('wikidialog-checkbox').attr('id',i); if (s.length > 8) result.attr('checked','yes'); return result; }); // // [[Template:Dialog/select|select]] // $('span.wikidialog-select').replaceWith(function () { var i = $(this).attr('id'); var s = $(this).text().split('&'); // .substring(0,8192).split('&'); // BOUND SELECT CONTENT SIZE var e = document.createElement('select'); for (var k=1; (k < s.length); k += 2) if (s[k-1]) { e.appendChild(new Option(s[k-1],s[k],false,false)); } return $(e).addClass('wikidialog-select').attr('id',i); }); // // [[Template:Dialog/button|button]] // $('span.wikidialog-button').replaceWith(function () { function getWikidialogID() { var s = location.search.match(/[\?&]wikidialogid=(\d+)/); return (s && s.length && (s.length > 1)) ? Number(s[1]) : 0; } function getRollbackUrl(url, id) { var s = url.match(/[\?&]wikidialogid=(\d+)/); if (s && s.length && (s.length > 0)) { // url is stable return url; } s = sessionStorage.wikidialogUnstableUrl; if (s && (url == s)) { // url is unstable and known dialog-active // expect it to have had id one less than next-id s = ('wikidialogid=' + (id - 1)); } else { // url is unstable and might be dialog-active or not s = 'wikidialogrolledback=x'; } return (url + ((url.search(/\?/) > 0) ? '&' : '?') + s); } function handleButton(event) { var target = $(event.target); var wikidialogButtonData = target.data('wikidialogButtonData'); var action = wikidialogButtonData.action; if (action.substring(0,5).toLowerCase() == 'user:') { var ug = mw.config.get('wgUserGroups'); if (!ug || ug.join(' ').indexOf("sysop") === -1) { alert('action requires admin privs: ' + action); return; } } else { action = mw.config.get('wgSiteName') + ':Dialog/' + action; } // action must be fully protected $('input.wikidialog-button, button.wikidialog-button').attr('disabled',true); $.getJSON( mw.util.wikiScript('api'), { format: 'json', action: 'query', prop: 'info', inprop: 'protection', titles: action } ).done( function(data) { var s = ''; if (data.query && data.query.pages) for (var p in data.query.pages) { if ("missing" in data.query.pages[p]) s = 'page not found'; else if ('invalid' in data.query.pages[p]) s = 'page name invalid'; else if ('protection' in data.query.pages[p]) { if (data.query.pages[p].protection[0] && data.query.pages[p].protection[1]) { if (('level' in data.query.pages[p].protection[0]) && ('level' in data.query.pages[p].protection[1])) { if ((data.query.pages[p].protection[0].level == 'sysop') && (data.query.pages[p].protection[1].level == 'sysop')) { } else s = 'page unsecured'; } else s = 'page query misfired'; } else s = 'page unsecured'; } else s = 'page query misfired'; } else s = 'page query failed'; if (s) { $('input.wikidialog-button, button.wikidialog-button').attr('disabled',false); alert(s + ': ' + action); return; } // action is now known to be fully protected // sessionStorage.wikidialogNextID was assured before setting up the button var id = sessionStorage.wikidialogNextID; s = mw.util.getUrl(action) + '?wikidialogid=' + id; sessionStorage.wikidialogNextID++; sessionStorage['wikidialog:' + id + ':incoming'] = s; if (! target.hasClass('wikidialog-norollback')) { sessionStorage['wikidialog:' + id + ':prevurl'] = getRollbackUrl(location.href, Number(id)); } if ('unauth' in wikidialogButtonData) sessionStorage['wikidialog:' + id + ':unauth'] = wikidialogButtonData.unauth; else sessionStorage['wikidialog:' + id + ':unauth'] = mw.config.get('wgPageName'); if ('origin' in wikidialogButtonData) sessionStorage['wikidialog:' + id + ':origin'] = wikidialogButtonData.origin; if ('proxy' in wikidialogButtonData) sessionStorage['wikidialog:' + id + ':proxy'] = wikidialogButtonData.proxy; sessionStorage['wikidialog:' + id + ':params'] = ''; for (var j = 0; j < wikidialogButtonData.length; j++) { var d = wikidialogButtonData[j].match(/[\w-]+/g); d[1] = (d[1] ? d[1] : d[0]); d[1] = $('input#wikidialog-' + d[1] + ', textarea#wikidialog-' + d[1] + ', select#wikidialog-' + d[1]); if (d[1].length == 0) { } else { sessionStorage['wikidialog:' + id + ':params'] += d[0] + ','; var elt = d[1].first(); d[1] = d[1].add(target); for (var k = 0; k < d[1].length; k++) { if ($(d[1][k]).hasClass('wikidialog-button')) { k++; if (k < d[1].length) elt = $(d[1][k]); break; } } switch (elt.attr('type')) { case 'checkbox': d[1] = (elt[0].checked ? 'yes' : ''); break; default: d[1] = elt.val(); break; } sessionStorage['wikidialog:' + id + ':in:' + d[0]] = d[1]; } } if (target.hasClass('wikidialog-rescript')) { delete window.wikidialog; } sessionStorage.wikidialogSequenceBound = 10; // POINT TO ADJUST max action-sequence length // also occurs in receive location = s; } ).fail(function() { $('input.wikidialog-button, button.wikidialog-button').attr('disabled',false); alert('action target check failed: ' + action); }); } if (! (sessionStorage)) { // allows handler to assume sessionStorage return "<font color=red>&lt;button requires sessionStorage (not found; perhaps your browser is out of date?)&gt;</font>"; } if (sessionStorage.wikidialogNextID) {} else sessionStorage.wikidialogNextID = '1'; if (Number(sessionStorage.wikidialogNextID) <= getWikidialogID()) { alert('Warning: session data may be inaccessible\n(dialog ID should be less than stored count:\n dialog ID is ' + getWikidialogID() + '\n stored count is ' + sessionStorage.wikidialogNextID + ')'); sessionStorage.wikidialogNextID = getWikidialogID() + 1; } var s = $(this).text(); // .substring(0,1024); // BOUND BUTTON CONTENT SIZE var a = ''; if ( s.search(/^action=([\w\s-\/:]+)&/) == 0) { a = s.match(/^action=([\w\s-\/:]+)&(.*)/); s = a[2]; a = a[1]; } var b = ''; if ( s.search(/^label=([\w\s-\/\:\(\)\.\,\;']+)&/) == 0) { // STUFF ALLOWED IN BUTTON LABELS b = s.match(/^label=([\w\s-\/\:\(\)\.\,\;']+)&(.*)/); // STUFF ALLOWED IN BUTTON LABELS s = b[2]; b = b[1]; if ($(this).is('.wikidialog-italic-label')) { b = '<i>' + b + '</i>'; } if ($(this).is('.wikidialog-bold-label' )) { b = '<b>' + b + '</b>'; } } var wikidialogButtonData = $(this).data(); if ('wikidialogButtonData' in wikidialogButtonData) wikidialogButtonData = wikidialogButtonData.wikidialogButtonData; else wikidialogButtondata = {}; wikidialogButtonData.action = a; wikidialogButtonData.length = 0; var s = s.match(/([\w-]+:?[\w-]*)&/g); if (s != null) { wikidialogButtonData.length = s.length; for (var j = 0; j < s.length; j++) { wikidialogButtonData[j] = s[j].substring(0,s[j].length - 1); } } return $(document.createElement('button')).attr('type','button').addClass(this.className).html(b).attr('title',a) .data('wikidialogButtonData',wikidialogButtonData).click(handleButton); }); // // [[Template:Dialog/ifsupported|ifsupported]] // if (sessionStorage) { $('.wikidialog-alternative').css('display','none'); $('.wikidialog-dependent').css('display','inline'); } }; } window.wikidialog.show(); j6lzsj8vnrtn3my3fuppy5tybquikzj 14547 14546 2016-02-12T18:36:35Z Pi zero 2546 0.8 bug fix, some browsers ; button mouseover upgrade 14547 javascript text/javascript /* This script provides a function to set up dialog fields and buttons based on markup generated by [[:Category:dialog formatting templates|dialog formatting templates]]. Any javascript page importing this page should also contain a commented link to it, for [[Special:WhatLinksHere/{{FULLPAGENAME}}]]. For instructions, see the [[{{TALKPAGENAME}}|talk page]]. [[Category:Dialog javascript pages]] */ if (! window.wikidialog) window.wikidialog = {}; if (! window.wikidialog.show) { // // version // window.wikidialog.gadgetVersion = function() { return '0.8 (2016-02-12)'; } // window.wikidialog.show = function () { // // [[Template:Dialog/text|text]] // var things = $('span.wikidialog-text'); var thingIds = things.map(function () { return $(this).attr('id'); }); things.replaceWith(function (idx) { if ((idx > 0) && (thingIds[idx] == thingIds[idx - 1])) { return ''; } var s = $(this).text(); // .substring(0,1024); // BOUND TEXT CONTENT SIZE var d = ''; if ( s.search(/^size=(\d*)&/) == 0) { d = s.match(/^size=(\d*)&(.*)/); s = d[2]; d = d[1]; } for (var j = idx + 1; j < thingIds.length; j++) { if (thingIds[idx] == thingIds[j]) { s += ' ' + $(things[j]).text(); } else break; } var e = $(document.createElement('input')).attr('type','text').addClass('wikidialog-text').attr('id',thingIds[idx]).val(s).attr('size',d); if ($(this).is('.wikidialog-hidden')) e.css('display','none'); return e; }); // // [[Template:Dialog/textarea|textarea]] // things = $('span.wikidialog-textarea'); thingIds = things.map(function () { return $(this).attr('id'); }); things.replaceWith(function (idx) { if ((idx > 0) && (thingIds[idx] == thingIds[idx - 1])) { return ' '; } var s = $(this).text(); // .substring(0,131072); // BOUND TEXTAREA CONTENT SIZE var c = ''; if ( s.search(/^cols=(\d*)&/) == 0) { c = s.match(/^cols=(\d*)&(.*)/); s = c[2]; c = c[1]; } var r = ''; if ( s.search(/^rows=(\d*)&/) == 0) { r = s.match(/^rows=(\d*)&(.*)/); s = r[2]; r = r[1]; } for (var j = idx + 1; j < thingIds.length; j++) { if (thingIds[idx] == thingIds[j]) { s += '\n' + $(things[j]).text(); } else break; } var e = $(document.createElement('textarea')).addClass('wikidialog-textarea').attr('id',thingIds[idx]).attr('cols',c).attr('rows',r).val(s); if ($(this).is('.wikidialog-hidden')) e.css('display','none'); return e; }); // // [[Template:Dialog/checkbox|checkbox]] // $('span.wikidialog-checkbox').replaceWith(function () { var i = $(this).attr('id'); var s = $(this).text(); // .substring(0,32); // BOUND CHECKBOX CONTENT SIZE var result = $(document.createElement('input')).attr('type','checkbox').addClass('wikidialog-checkbox').attr('id',i); if (s.length > 8) result.attr('checked','yes'); return result; }); // // [[Template:Dialog/select|select]] // $('span.wikidialog-select').replaceWith(function () { var i = $(this).attr('id'); var s = $(this).text().split('&'); // .substring(0,8192).split('&'); // BOUND SELECT CONTENT SIZE var e = document.createElement('select'); for (var k=1; (k < s.length); k += 2) if (s[k-1]) { e.appendChild(new Option(s[k-1],s[k],false,false)); } return $(e).addClass('wikidialog-select').attr('id',i); }); // // [[Template:Dialog/button|button]] // $('span.wikidialog-button').replaceWith(function () { function getWikidialogID() { var s = location.search.match(/[\?&]wikidialogid=(\d+)/); return (s && s.length && (s.length > 1)) ? Number(s[1]) : 0; } function getRollbackUrl(url, id) { var s = url.match(/[\?&]wikidialogid=(\d+)/); if (s && s.length && (s.length > 0)) { // url is stable return url; } s = sessionStorage.wikidialogUnstableUrl; if (s && (url == s)) { // url is unstable and known dialog-active // expect it to have had id one less than next-id s = ('wikidialogid=' + (id - 1)); } else { // url is unstable and might be dialog-active or not s = 'wikidialogrolledback=x'; } return (url + ((url.search(/\?/) > 0) ? '&' : '?') + s); } function makeButtonHandler(wikidialogButtonData) { // for some browsers, event target may be a copy lacking the data return function (event) { var target = $(event.target); var action = wikidialogButtonData.action; if (action.substring(0,5).toLowerCase() == 'user:') { var ug = mw.config.get('wgUserGroups'); if (!ug || ug.join(' ').indexOf("sysop") === -1) { alert('action requires admin privs: ' + action); return; } } else { action = mw.config.get('wgSiteName') + ':Dialog/' + action; } // action must be fully protected $('input.wikidialog-button, button.wikidialog-button').attr('disabled',true); $.getJSON( mw.util.wikiScript('api'), { format: 'json', action: 'query', prop: 'info', inprop: 'protection', titles: action } ).done( function(data) { var s = ''; if (data.query && data.query.pages) for (var p in data.query.pages) { if ("missing" in data.query.pages[p]) s = 'page not found'; else if ('invalid' in data.query.pages[p]) s = 'page name invalid'; else if ('protection' in data.query.pages[p]) { if (data.query.pages[p].protection[0] && data.query.pages[p].protection[1]) { if (('level' in data.query.pages[p].protection[0]) && ('level' in data.query.pages[p].protection[1])) { if ((data.query.pages[p].protection[0].level == 'sysop') && (data.query.pages[p].protection[1].level == 'sysop')) { } else s = 'page unsecured'; } else s = 'page query misfired'; } else s = 'page unsecured'; } else s = 'page query misfired'; } else s = 'page query failed'; if (s) { $('input.wikidialog-button, button.wikidialog-button').attr('disabled',false); alert(s + ': ' + action); return; } // action is now known to be fully protected // sessionStorage.wikidialogNextID was assured before setting up the button var id = sessionStorage.wikidialogNextID; s = mw.util.getUrl(action) + '?wikidialogid=' + id; sessionStorage.wikidialogNextID++; sessionStorage['wikidialog:' + id + ':incoming'] = s; if (! target.hasClass('wikidialog-norollback')) { sessionStorage['wikidialog:' + id + ':prevurl'] = getRollbackUrl(location.href, Number(id)); } if ('unauth' in wikidialogButtonData) sessionStorage['wikidialog:' + id + ':unauth'] = wikidialogButtonData.unauth; else sessionStorage['wikidialog:' + id + ':unauth'] = mw.config.get('wgPageName'); if ('origin' in wikidialogButtonData) sessionStorage['wikidialog:' + id + ':origin'] = wikidialogButtonData.origin; if ('proxy' in wikidialogButtonData) sessionStorage['wikidialog:' + id + ':proxy'] = wikidialogButtonData.proxy; sessionStorage['wikidialog:' + id + ':params'] = ''; for (var j = 0; j < wikidialogButtonData.length; j++) { var d = wikidialogButtonData[j].match(/[\w-]+/g); d[1] = (d[1] ? d[1] : d[0]); d[1] = $('input#wikidialog-' + d[1] + ', textarea#wikidialog-' + d[1] + ', select#wikidialog-' + d[1]); if (d[1].length == 0) { } else { sessionStorage['wikidialog:' + id + ':params'] += d[0] + ','; var elt = d[1].first(); d[1] = d[1].add(target); for (var k = 0; k < d[1].length; k++) { if ($(d[1][k]).hasClass('wikidialog-button')) { k++; if (k < d[1].length) elt = $(d[1][k]); break; } } switch (elt.attr('type')) { case 'checkbox': d[1] = (elt[0].checked ? 'yes' : ''); break; default: d[1] = elt.val(); break; } sessionStorage['wikidialog:' + id + ':in:' + d[0]] = d[1]; } } if (target.hasClass('wikidialog-rescript')) { delete window.wikidialog; } sessionStorage.wikidialogSequenceBound = 10; // POINT TO ADJUST max action-sequence length // also occurs in receive location = s; } ).fail(function() { $('input.wikidialog-button, button.wikidialog-button').attr('disabled',false); alert('action target check failed: ' + action); }); }; // end return function () ... } // end function makeButtonHandler if (! (sessionStorage)) { // allows handler to assume sessionStorage return "<font color=red>&lt;button requires sessionStorage (not found; perhaps your browser is out of date?)&gt;</font>"; } if (sessionStorage.wikidialogNextID) {} else sessionStorage.wikidialogNextID = '1'; if (Number(sessionStorage.wikidialogNextID) <= getWikidialogID()) { alert('Warning: session data may be inaccessible\n(dialog ID should be less than stored count:\n dialog ID is ' + getWikidialogID() + '\n stored count is ' + sessionStorage.wikidialogNextID + ')'); sessionStorage.wikidialogNextID = getWikidialogID() + 1; } var s = $(this).text(); // .substring(0,1024); // BOUND BUTTON CONTENT SIZE var a = ''; if ( s.search(/^action=([\w\s-\/:]+)&/) == 0) { a = s.match(/^action=([\w\s-\/:]+)&(.*)/); s = a[2]; a = a[1]; } var b = ''; if ( s.search(/^label=([\w\s-\/\:\(\)\.\,\;']+)&/) == 0) { // STUFF ALLOWED IN BUTTON LABELS b = s.match(/^label=([\w\s-\/\:\(\)\.\,\;']+)&(.*)/); // STUFF ALLOWED IN BUTTON LABELS s = b[2]; b = b[1]; if ($(this).is('.wikidialog-italic-label')) { b = '<i>' + b + '</i>'; } if ($(this).is('.wikidialog-bold-label' )) { b = '<b>' + b + '</b>'; } } var wikidialogButtonData = $(this).data(); if ('wikidialogButtonData' in wikidialogButtonData) wikidialogButtonData = wikidialogButtonData.wikidialogButtonData; else wikidialogButtondata = {}; wikidialogButtonData.action = a; wikidialogButtonData.length = 0; var s = s.match(/([\w-]+:?[\w-]*)&/g); if (s != null) { wikidialogButtonData.length = s.length; for (var j = 0; j < s.length; j++) { wikidialogButtonData[j] = s[j].substring(0,s[j].length - 1); a += ((j == 0) ? ' < ' : ' , ') + s[j].substring(0,s[j].search(/[\:&]/)); } } return $(document.createElement('button')).attr('type','button').addClass(this.className).html(b).attr('title',a) .data('wikidialogButtonData',wikidialogButtonData).click(makeButtonHandler(wikidialogButtonData)); }); // // [[Template:Dialog/ifsupported|ifsupported]] // if (sessionStorage) { $('.wikidialog-alternative').css('display','none'); $('.wikidialog-dependent').css('display','inline'); } }; } window.wikidialog.show(); o5oleulskj199ooikauokzi09j2ph3d 14548 14547 2016-02-12T20:58:57Z Pi zero 2546 tweak comment wording 14548 javascript text/javascript /* This script provides a function to set up dialog fields and buttons based on markup generated by [[:Category:dialog formatting templates|dialog formatting templates]]. Any javascript page importing this page should also contain a commented link to it, for [[Special:WhatLinksHere/{{FULLPAGENAME}}]]. For instructions, see the [[{{TALKPAGENAME}}|talk page]]. [[Category:Dialog javascript pages]] */ if (! window.wikidialog) window.wikidialog = {}; if (! window.wikidialog.show) { // // version // window.wikidialog.gadgetVersion = function() { return '0.8 (2016-02-12)'; } // window.wikidialog.show = function () { // // [[Template:Dialog/text|text]] // var things = $('span.wikidialog-text'); var thingIds = things.map(function () { return $(this).attr('id'); }); things.replaceWith(function (idx) { if ((idx > 0) && (thingIds[idx] == thingIds[idx - 1])) { return ''; } var s = $(this).text(); // .substring(0,1024); // BOUND TEXT CONTENT SIZE var d = ''; if ( s.search(/^size=(\d*)&/) == 0) { d = s.match(/^size=(\d*)&(.*)/); s = d[2]; d = d[1]; } for (var j = idx + 1; j < thingIds.length; j++) { if (thingIds[idx] == thingIds[j]) { s += ' ' + $(things[j]).text(); } else break; } var e = $(document.createElement('input')).attr('type','text').addClass('wikidialog-text').attr('id',thingIds[idx]).val(s).attr('size',d); if ($(this).is('.wikidialog-hidden')) e.css('display','none'); return e; }); // // [[Template:Dialog/textarea|textarea]] // things = $('span.wikidialog-textarea'); thingIds = things.map(function () { return $(this).attr('id'); }); things.replaceWith(function (idx) { if ((idx > 0) && (thingIds[idx] == thingIds[idx - 1])) { return ' '; } var s = $(this).text(); // .substring(0,131072); // BOUND TEXTAREA CONTENT SIZE var c = ''; if ( s.search(/^cols=(\d*)&/) == 0) { c = s.match(/^cols=(\d*)&(.*)/); s = c[2]; c = c[1]; } var r = ''; if ( s.search(/^rows=(\d*)&/) == 0) { r = s.match(/^rows=(\d*)&(.*)/); s = r[2]; r = r[1]; } for (var j = idx + 1; j < thingIds.length; j++) { if (thingIds[idx] == thingIds[j]) { s += '\n' + $(things[j]).text(); } else break; } var e = $(document.createElement('textarea')).addClass('wikidialog-textarea').attr('id',thingIds[idx]).attr('cols',c).attr('rows',r).val(s); if ($(this).is('.wikidialog-hidden')) e.css('display','none'); return e; }); // // [[Template:Dialog/checkbox|checkbox]] // $('span.wikidialog-checkbox').replaceWith(function () { var i = $(this).attr('id'); var s = $(this).text(); // .substring(0,32); // BOUND CHECKBOX CONTENT SIZE var result = $(document.createElement('input')).attr('type','checkbox').addClass('wikidialog-checkbox').attr('id',i); if (s.length > 8) result.attr('checked','yes'); return result; }); // // [[Template:Dialog/select|select]] // $('span.wikidialog-select').replaceWith(function () { var i = $(this).attr('id'); var s = $(this).text().split('&'); // .substring(0,8192).split('&'); // BOUND SELECT CONTENT SIZE var e = document.createElement('select'); for (var k=1; (k < s.length); k += 2) if (s[k-1]) { e.appendChild(new Option(s[k-1],s[k],false,false)); } return $(e).addClass('wikidialog-select').attr('id',i); }); // // [[Template:Dialog/button|button]] // $('span.wikidialog-button').replaceWith(function () { function getWikidialogID() { var s = location.search.match(/[\?&]wikidialogid=(\d+)/); return (s && s.length && (s.length > 1)) ? Number(s[1]) : 0; } function getRollbackUrl(url, id) { var s = url.match(/[\?&]wikidialogid=(\d+)/); if (s && s.length && (s.length > 0)) { // url is stable return url; } s = sessionStorage.wikidialogUnstableUrl; if (s && (url == s)) { // url is unstable and known dialog-active // expect it to have had id one less than next-id s = ('wikidialogid=' + (id - 1)); } else { // url is unstable and might be dialog-active or not s = 'wikidialogrolledback=x'; } return (url + ((url.search(/\?/) > 0) ? '&' : '?') + s); } function makeButtonHandler(wikidialogButtonData) { // in some browsers, event target may be a copy lacking the data return function (event) { var target = $(event.target); var action = wikidialogButtonData.action; if (action.substring(0,5).toLowerCase() == 'user:') { var ug = mw.config.get('wgUserGroups'); if (!ug || ug.join(' ').indexOf("sysop") === -1) { alert('action requires admin privs: ' + action); return; } } else { action = mw.config.get('wgSiteName') + ':Dialog/' + action; } // action must be fully protected $('input.wikidialog-button, button.wikidialog-button').attr('disabled',true); $.getJSON( mw.util.wikiScript('api'), { format: 'json', action: 'query', prop: 'info', inprop: 'protection', titles: action } ).done( function(data) { var s = ''; if (data.query && data.query.pages) for (var p in data.query.pages) { if ("missing" in data.query.pages[p]) s = 'page not found'; else if ('invalid' in data.query.pages[p]) s = 'page name invalid'; else if ('protection' in data.query.pages[p]) { if (data.query.pages[p].protection[0] && data.query.pages[p].protection[1]) { if (('level' in data.query.pages[p].protection[0]) && ('level' in data.query.pages[p].protection[1])) { if ((data.query.pages[p].protection[0].level == 'sysop') && (data.query.pages[p].protection[1].level == 'sysop')) { } else s = 'page unsecured'; } else s = 'page query misfired'; } else s = 'page unsecured'; } else s = 'page query misfired'; } else s = 'page query failed'; if (s) { $('input.wikidialog-button, button.wikidialog-button').attr('disabled',false); alert(s + ': ' + action); return; } // action is now known to be fully protected // sessionStorage.wikidialogNextID was assured before setting up the button var id = sessionStorage.wikidialogNextID; s = mw.util.getUrl(action) + '?wikidialogid=' + id; sessionStorage.wikidialogNextID++; sessionStorage['wikidialog:' + id + ':incoming'] = s; if (! target.hasClass('wikidialog-norollback')) { sessionStorage['wikidialog:' + id + ':prevurl'] = getRollbackUrl(location.href, Number(id)); } if ('unauth' in wikidialogButtonData) sessionStorage['wikidialog:' + id + ':unauth'] = wikidialogButtonData.unauth; else sessionStorage['wikidialog:' + id + ':unauth'] = mw.config.get('wgPageName'); if ('origin' in wikidialogButtonData) sessionStorage['wikidialog:' + id + ':origin'] = wikidialogButtonData.origin; if ('proxy' in wikidialogButtonData) sessionStorage['wikidialog:' + id + ':proxy'] = wikidialogButtonData.proxy; sessionStorage['wikidialog:' + id + ':params'] = ''; for (var j = 0; j < wikidialogButtonData.length; j++) { var d = wikidialogButtonData[j].match(/[\w-]+/g); d[1] = (d[1] ? d[1] : d[0]); d[1] = $('input#wikidialog-' + d[1] + ', textarea#wikidialog-' + d[1] + ', select#wikidialog-' + d[1]); if (d[1].length == 0) { } else { sessionStorage['wikidialog:' + id + ':params'] += d[0] + ','; var elt = d[1].first(); d[1] = d[1].add(target); for (var k = 0; k < d[1].length; k++) { if ($(d[1][k]).hasClass('wikidialog-button')) { k++; if (k < d[1].length) elt = $(d[1][k]); break; } } switch (elt.attr('type')) { case 'checkbox': d[1] = (elt[0].checked ? 'yes' : ''); break; default: d[1] = elt.val(); break; } sessionStorage['wikidialog:' + id + ':in:' + d[0]] = d[1]; } } if (target.hasClass('wikidialog-rescript')) { delete window.wikidialog; } sessionStorage.wikidialogSequenceBound = 10; // POINT TO ADJUST max action-sequence length // also occurs in receive location = s; } ).fail(function() { $('input.wikidialog-button, button.wikidialog-button').attr('disabled',false); alert('action target check failed: ' + action); }); }; // end return function () ... } // end function makeButtonHandler if (! (sessionStorage)) { // allows handler to assume sessionStorage return "<font color=red>&lt;button requires sessionStorage (not found; perhaps your browser is out of date?)&gt;</font>"; } if (sessionStorage.wikidialogNextID) {} else sessionStorage.wikidialogNextID = '1'; if (Number(sessionStorage.wikidialogNextID) <= getWikidialogID()) { alert('Warning: session data may be inaccessible\n(dialog ID should be less than stored count:\n dialog ID is ' + getWikidialogID() + '\n stored count is ' + sessionStorage.wikidialogNextID + ')'); sessionStorage.wikidialogNextID = getWikidialogID() + 1; } var s = $(this).text(); // .substring(0,1024); // BOUND BUTTON CONTENT SIZE var a = ''; if ( s.search(/^action=([\w\s-\/:]+)&/) == 0) { a = s.match(/^action=([\w\s-\/:]+)&(.*)/); s = a[2]; a = a[1]; } var b = ''; if ( s.search(/^label=([\w\s-\/\:\(\)\.\,\;']+)&/) == 0) { // STUFF ALLOWED IN BUTTON LABELS b = s.match(/^label=([\w\s-\/\:\(\)\.\,\;']+)&(.*)/); // STUFF ALLOWED IN BUTTON LABELS s = b[2]; b = b[1]; if ($(this).is('.wikidialog-italic-label')) { b = '<i>' + b + '</i>'; } if ($(this).is('.wikidialog-bold-label' )) { b = '<b>' + b + '</b>'; } } var wikidialogButtonData = $(this).data(); if ('wikidialogButtonData' in wikidialogButtonData) wikidialogButtonData = wikidialogButtonData.wikidialogButtonData; else wikidialogButtondata = {}; wikidialogButtonData.action = a; wikidialogButtonData.length = 0; var s = s.match(/([\w-]+:?[\w-]*)&/g); if (s != null) { wikidialogButtonData.length = s.length; for (var j = 0; j < s.length; j++) { wikidialogButtonData[j] = s[j].substring(0,s[j].length - 1); a += ((j == 0) ? ' < ' : ' , ') + s[j].substring(0,s[j].search(/[\:&]/)); } } return $(document.createElement('button')).attr('type','button').addClass(this.className).html(b).attr('title',a) .data('wikidialogButtonData',wikidialogButtonData).click(makeButtonHandler(wikidialogButtonData)); }); // // [[Template:Dialog/ifsupported|ifsupported]] // if (sessionStorage) { $('.wikidialog-alternative').css('display','none'); $('.wikidialog-dependent').css('display','inline'); } }; } window.wikidialog.show(); 08qwue8wsvg19q6a1ef6rryi5lptltr 14549 14548 2016-11-19T01:46:40Z Pi zero 2546 17 revisions imported from [[:n:MediaWiki:Gadget-wikidialog.js]]: dialog required support 14548 javascript text/javascript /* This script provides a function to set up dialog fields and buttons based on markup generated by [[:Category:dialog formatting templates|dialog formatting templates]]. Any javascript page importing this page should also contain a commented link to it, for [[Special:WhatLinksHere/{{FULLPAGENAME}}]]. For instructions, see the [[{{TALKPAGENAME}}|talk page]]. [[Category:Dialog javascript pages]] */ if (! window.wikidialog) window.wikidialog = {}; if (! window.wikidialog.show) { // // version // window.wikidialog.gadgetVersion = function() { return '0.8 (2016-02-12)'; } // window.wikidialog.show = function () { // // [[Template:Dialog/text|text]] // var things = $('span.wikidialog-text'); var thingIds = things.map(function () { return $(this).attr('id'); }); things.replaceWith(function (idx) { if ((idx > 0) && (thingIds[idx] == thingIds[idx - 1])) { return ''; } var s = $(this).text(); // .substring(0,1024); // BOUND TEXT CONTENT SIZE var d = ''; if ( s.search(/^size=(\d*)&/) == 0) { d = s.match(/^size=(\d*)&(.*)/); s = d[2]; d = d[1]; } for (var j = idx + 1; j < thingIds.length; j++) { if (thingIds[idx] == thingIds[j]) { s += ' ' + $(things[j]).text(); } else break; } var e = $(document.createElement('input')).attr('type','text').addClass('wikidialog-text').attr('id',thingIds[idx]).val(s).attr('size',d); if ($(this).is('.wikidialog-hidden')) e.css('display','none'); return e; }); // // [[Template:Dialog/textarea|textarea]] // things = $('span.wikidialog-textarea'); thingIds = things.map(function () { return $(this).attr('id'); }); things.replaceWith(function (idx) { if ((idx > 0) && (thingIds[idx] == thingIds[idx - 1])) { return ' '; } var s = $(this).text(); // .substring(0,131072); // BOUND TEXTAREA CONTENT SIZE var c = ''; if ( s.search(/^cols=(\d*)&/) == 0) { c = s.match(/^cols=(\d*)&(.*)/); s = c[2]; c = c[1]; } var r = ''; if ( s.search(/^rows=(\d*)&/) == 0) { r = s.match(/^rows=(\d*)&(.*)/); s = r[2]; r = r[1]; } for (var j = idx + 1; j < thingIds.length; j++) { if (thingIds[idx] == thingIds[j]) { s += '\n' + $(things[j]).text(); } else break; } var e = $(document.createElement('textarea')).addClass('wikidialog-textarea').attr('id',thingIds[idx]).attr('cols',c).attr('rows',r).val(s); if ($(this).is('.wikidialog-hidden')) e.css('display','none'); return e; }); // // [[Template:Dialog/checkbox|checkbox]] // $('span.wikidialog-checkbox').replaceWith(function () { var i = $(this).attr('id'); var s = $(this).text(); // .substring(0,32); // BOUND CHECKBOX CONTENT SIZE var result = $(document.createElement('input')).attr('type','checkbox').addClass('wikidialog-checkbox').attr('id',i); if (s.length > 8) result.attr('checked','yes'); return result; }); // // [[Template:Dialog/select|select]] // $('span.wikidialog-select').replaceWith(function () { var i = $(this).attr('id'); var s = $(this).text().split('&'); // .substring(0,8192).split('&'); // BOUND SELECT CONTENT SIZE var e = document.createElement('select'); for (var k=1; (k < s.length); k += 2) if (s[k-1]) { e.appendChild(new Option(s[k-1],s[k],false,false)); } return $(e).addClass('wikidialog-select').attr('id',i); }); // // [[Template:Dialog/button|button]] // $('span.wikidialog-button').replaceWith(function () { function getWikidialogID() { var s = location.search.match(/[\?&]wikidialogid=(\d+)/); return (s && s.length && (s.length > 1)) ? Number(s[1]) : 0; } function getRollbackUrl(url, id) { var s = url.match(/[\?&]wikidialogid=(\d+)/); if (s && s.length && (s.length > 0)) { // url is stable return url; } s = sessionStorage.wikidialogUnstableUrl; if (s && (url == s)) { // url is unstable and known dialog-active // expect it to have had id one less than next-id s = ('wikidialogid=' + (id - 1)); } else { // url is unstable and might be dialog-active or not s = 'wikidialogrolledback=x'; } return (url + ((url.search(/\?/) > 0) ? '&' : '?') + s); } function makeButtonHandler(wikidialogButtonData) { // in some browsers, event target may be a copy lacking the data return function (event) { var target = $(event.target); var action = wikidialogButtonData.action; if (action.substring(0,5).toLowerCase() == 'user:') { var ug = mw.config.get('wgUserGroups'); if (!ug || ug.join(' ').indexOf("sysop") === -1) { alert('action requires admin privs: ' + action); return; } } else { action = mw.config.get('wgSiteName') + ':Dialog/' + action; } // action must be fully protected $('input.wikidialog-button, button.wikidialog-button').attr('disabled',true); $.getJSON( mw.util.wikiScript('api'), { format: 'json', action: 'query', prop: 'info', inprop: 'protection', titles: action } ).done( function(data) { var s = ''; if (data.query && data.query.pages) for (var p in data.query.pages) { if ("missing" in data.query.pages[p]) s = 'page not found'; else if ('invalid' in data.query.pages[p]) s = 'page name invalid'; else if ('protection' in data.query.pages[p]) { if (data.query.pages[p].protection[0] && data.query.pages[p].protection[1]) { if (('level' in data.query.pages[p].protection[0]) && ('level' in data.query.pages[p].protection[1])) { if ((data.query.pages[p].protection[0].level == 'sysop') && (data.query.pages[p].protection[1].level == 'sysop')) { } else s = 'page unsecured'; } else s = 'page query misfired'; } else s = 'page unsecured'; } else s = 'page query misfired'; } else s = 'page query failed'; if (s) { $('input.wikidialog-button, button.wikidialog-button').attr('disabled',false); alert(s + ': ' + action); return; } // action is now known to be fully protected // sessionStorage.wikidialogNextID was assured before setting up the button var id = sessionStorage.wikidialogNextID; s = mw.util.getUrl(action) + '?wikidialogid=' + id; sessionStorage.wikidialogNextID++; sessionStorage['wikidialog:' + id + ':incoming'] = s; if (! target.hasClass('wikidialog-norollback')) { sessionStorage['wikidialog:' + id + ':prevurl'] = getRollbackUrl(location.href, Number(id)); } if ('unauth' in wikidialogButtonData) sessionStorage['wikidialog:' + id + ':unauth'] = wikidialogButtonData.unauth; else sessionStorage['wikidialog:' + id + ':unauth'] = mw.config.get('wgPageName'); if ('origin' in wikidialogButtonData) sessionStorage['wikidialog:' + id + ':origin'] = wikidialogButtonData.origin; if ('proxy' in wikidialogButtonData) sessionStorage['wikidialog:' + id + ':proxy'] = wikidialogButtonData.proxy; sessionStorage['wikidialog:' + id + ':params'] = ''; for (var j = 0; j < wikidialogButtonData.length; j++) { var d = wikidialogButtonData[j].match(/[\w-]+/g); d[1] = (d[1] ? d[1] : d[0]); d[1] = $('input#wikidialog-' + d[1] + ', textarea#wikidialog-' + d[1] + ', select#wikidialog-' + d[1]); if (d[1].length == 0) { } else { sessionStorage['wikidialog:' + id + ':params'] += d[0] + ','; var elt = d[1].first(); d[1] = d[1].add(target); for (var k = 0; k < d[1].length; k++) { if ($(d[1][k]).hasClass('wikidialog-button')) { k++; if (k < d[1].length) elt = $(d[1][k]); break; } } switch (elt.attr('type')) { case 'checkbox': d[1] = (elt[0].checked ? 'yes' : ''); break; default: d[1] = elt.val(); break; } sessionStorage['wikidialog:' + id + ':in:' + d[0]] = d[1]; } } if (target.hasClass('wikidialog-rescript')) { delete window.wikidialog; } sessionStorage.wikidialogSequenceBound = 10; // POINT TO ADJUST max action-sequence length // also occurs in receive location = s; } ).fail(function() { $('input.wikidialog-button, button.wikidialog-button').attr('disabled',false); alert('action target check failed: ' + action); }); }; // end return function () ... } // end function makeButtonHandler if (! (sessionStorage)) { // allows handler to assume sessionStorage return "<font color=red>&lt;button requires sessionStorage (not found; perhaps your browser is out of date?)&gt;</font>"; } if (sessionStorage.wikidialogNextID) {} else sessionStorage.wikidialogNextID = '1'; if (Number(sessionStorage.wikidialogNextID) <= getWikidialogID()) { alert('Warning: session data may be inaccessible\n(dialog ID should be less than stored count:\n dialog ID is ' + getWikidialogID() + '\n stored count is ' + sessionStorage.wikidialogNextID + ')'); sessionStorage.wikidialogNextID = getWikidialogID() + 1; } var s = $(this).text(); // .substring(0,1024); // BOUND BUTTON CONTENT SIZE var a = ''; if ( s.search(/^action=([\w\s-\/:]+)&/) == 0) { a = s.match(/^action=([\w\s-\/:]+)&(.*)/); s = a[2]; a = a[1]; } var b = ''; if ( s.search(/^label=([\w\s-\/\:\(\)\.\,\;']+)&/) == 0) { // STUFF ALLOWED IN BUTTON LABELS b = s.match(/^label=([\w\s-\/\:\(\)\.\,\;']+)&(.*)/); // STUFF ALLOWED IN BUTTON LABELS s = b[2]; b = b[1]; if ($(this).is('.wikidialog-italic-label')) { b = '<i>' + b + '</i>'; } if ($(this).is('.wikidialog-bold-label' )) { b = '<b>' + b + '</b>'; } } var wikidialogButtonData = $(this).data(); if ('wikidialogButtonData' in wikidialogButtonData) wikidialogButtonData = wikidialogButtonData.wikidialogButtonData; else wikidialogButtondata = {}; wikidialogButtonData.action = a; wikidialogButtonData.length = 0; var s = s.match(/([\w-]+:?[\w-]*)&/g); if (s != null) { wikidialogButtonData.length = s.length; for (var j = 0; j < s.length; j++) { wikidialogButtonData[j] = s[j].substring(0,s[j].length - 1); a += ((j == 0) ? ' < ' : ' , ') + s[j].substring(0,s[j].search(/[\:&]/)); } } return $(document.createElement('button')).attr('type','button').addClass(this.className).html(b).attr('title',a) .data('wikidialogButtonData',wikidialogButtonData).click(makeButtonHandler(wikidialogButtonData)); }); // // [[Template:Dialog/ifsupported|ifsupported]] // if (sessionStorage) { $('.wikidialog-alternative').css('display','none'); $('.wikidialog-dependent').css('display','inline'); } }; } window.wikidialog.show(); 08qwue8wsvg19q6a1ef6rryi5lptltr 14550 14549 2016-12-13T15:36:56Z Pi zero 2546 0.9 make sure page is loaded first 14550 javascript text/javascript /* This script provides a function to set up dialog fields and buttons based on markup generated by [[:Category:dialog formatting templates|dialog formatting templates]]. Any javascript page importing this page should also contain a commented link to it, for [[Special:WhatLinksHere/{{FULLPAGENAME}}]]. For instructions, see the [[{{TALKPAGENAME}}|talk page]]. [[Category:Dialog javascript pages]] */ $(function () { if (! window.wikidialog) window.wikidialog = {}; if (! window.wikidialog.show) { // // version // window.wikidialog.gadgetVersion = function() { return '0.9 (2016-12-13)'; } // window.wikidialog.show = function () { // // [[Template:Dialog/text|text]] // var things = $('span.wikidialog-text'); var thingIds = things.map(function () { return $(this).attr('id'); }); things.replaceWith(function (idx) { if ((idx > 0) && (thingIds[idx] == thingIds[idx - 1])) { return ''; } var s = $(this).text(); // .substring(0,1024); // BOUND TEXT CONTENT SIZE var d = ''; if ( s.search(/^size=(\d*)&/) == 0) { d = s.match(/^size=(\d*)&(.*)/); s = d[2]; d = d[1]; } for (var j = idx + 1; j < thingIds.length; j++) { if (thingIds[idx] == thingIds[j]) { s += ' ' + $(things[j]).text(); } else break; } var e = $(document.createElement('input')).attr('type','text').addClass('wikidialog-text').attr('id',thingIds[idx]).val(s).attr('size',d); if ($(this).is('.wikidialog-hidden')) e.css('display','none'); return e; }); // // [[Template:Dialog/textarea|textarea]] // things = $('span.wikidialog-textarea'); thingIds = things.map(function () { return $(this).attr('id'); }); things.replaceWith(function (idx) { if ((idx > 0) && (thingIds[idx] == thingIds[idx - 1])) { return ' '; } var s = $(this).text(); // .substring(0,131072); // BOUND TEXTAREA CONTENT SIZE var c = ''; if ( s.search(/^cols=(\d*)&/) == 0) { c = s.match(/^cols=(\d*)&(.*)/); s = c[2]; c = c[1]; } var r = ''; if ( s.search(/^rows=(\d*)&/) == 0) { r = s.match(/^rows=(\d*)&(.*)/); s = r[2]; r = r[1]; } for (var j = idx + 1; j < thingIds.length; j++) { if (thingIds[idx] == thingIds[j]) { s += '\n' + $(things[j]).text(); } else break; } var e = $(document.createElement('textarea')).addClass('wikidialog-textarea').attr('id',thingIds[idx]).attr('cols',c).attr('rows',r).val(s); if ($(this).is('.wikidialog-hidden')) e.css('display','none'); return e; }); // // [[Template:Dialog/checkbox|checkbox]] // $('span.wikidialog-checkbox').replaceWith(function () { var i = $(this).attr('id'); var s = $(this).text(); // .substring(0,32); // BOUND CHECKBOX CONTENT SIZE var result = $(document.createElement('input')).attr('type','checkbox').addClass('wikidialog-checkbox').attr('id',i); if (s.length > 8) result.attr('checked','yes'); return result; }); // // [[Template:Dialog/select|select]] // $('span.wikidialog-select').replaceWith(function () { var i = $(this).attr('id'); var s = $(this).text().split('&'); // .substring(0,8192).split('&'); // BOUND SELECT CONTENT SIZE var e = document.createElement('select'); for (var k=1; (k < s.length); k += 2) if (s[k-1]) { e.appendChild(new Option(s[k-1],s[k],false,false)); } return $(e).addClass('wikidialog-select').attr('id',i); }); // // [[Template:Dialog/button|button]] // $('span.wikidialog-button').replaceWith(function () { function getWikidialogID() { var s = location.search.match(/[\?&]wikidialogid=(\d+)/); return (s && s.length && (s.length > 1)) ? Number(s[1]) : 0; } function getRollbackUrl(url, id) { var s = url.match(/[\?&]wikidialogid=(\d+)/); if (s && s.length && (s.length > 0)) { // url is stable return url; } s = sessionStorage.wikidialogUnstableUrl; if (s && (url == s)) { // url is unstable and known dialog-active // expect it to have had id one less than next-id s = ('wikidialogid=' + (id - 1)); } else { // url is unstable and might be dialog-active or not s = 'wikidialogrolledback=x'; } return (url + ((url.search(/\?/) > 0) ? '&' : '?') + s); } function makeButtonHandler(wikidialogButtonData) { // in some browsers, event target may be a copy lacking the data return function (event) { var target = $(event.target); var action = wikidialogButtonData.action; if (action.substring(0,5).toLowerCase() == 'user:') { var ug = mw.config.get('wgUserGroups'); if (!ug || ug.join(' ').indexOf("sysop") === -1) { alert('action requires admin privs: ' + action); return; } } else { action = mw.config.get('wgSiteName') + ':Dialog/' + action; } // action must be fully protected $('input.wikidialog-button, button.wikidialog-button').attr('disabled',true); $.getJSON( mw.util.wikiScript('api'), { format: 'json', action: 'query', prop: 'info', inprop: 'protection', titles: action } ).done( function(data) { var s = ''; if (data.query && data.query.pages) for (var p in data.query.pages) { if ("missing" in data.query.pages[p]) s = 'page not found'; else if ('invalid' in data.query.pages[p]) s = 'page name invalid'; else if ('protection' in data.query.pages[p]) { if (data.query.pages[p].protection[0] && data.query.pages[p].protection[1]) { if (('level' in data.query.pages[p].protection[0]) && ('level' in data.query.pages[p].protection[1])) { if ((data.query.pages[p].protection[0].level == 'sysop') && (data.query.pages[p].protection[1].level == 'sysop')) { } else s = 'page unsecured'; } else s = 'page query misfired'; } else s = 'page unsecured'; } else s = 'page query misfired'; } else s = 'page query failed'; if (s) { $('input.wikidialog-button, button.wikidialog-button').attr('disabled',false); alert(s + ': ' + action); return; } // action is now known to be fully protected // sessionStorage.wikidialogNextID was assured before setting up the button var id = sessionStorage.wikidialogNextID; s = mw.util.getUrl(action) + '?wikidialogid=' + id; sessionStorage.wikidialogNextID++; sessionStorage['wikidialog:' + id + ':incoming'] = s; if (! target.hasClass('wikidialog-norollback')) { sessionStorage['wikidialog:' + id + ':prevurl'] = getRollbackUrl(location.href, Number(id)); } if ('unauth' in wikidialogButtonData) sessionStorage['wikidialog:' + id + ':unauth'] = wikidialogButtonData.unauth; else sessionStorage['wikidialog:' + id + ':unauth'] = mw.config.get('wgPageName'); if ('origin' in wikidialogButtonData) sessionStorage['wikidialog:' + id + ':origin'] = wikidialogButtonData.origin; if ('proxy' in wikidialogButtonData) sessionStorage['wikidialog:' + id + ':proxy'] = wikidialogButtonData.proxy; sessionStorage['wikidialog:' + id + ':params'] = ''; for (var j = 0; j < wikidialogButtonData.length; j++) { var d = wikidialogButtonData[j].match(/[\w-]+/g); d[1] = (d[1] ? d[1] : d[0]); d[1] = $('input#wikidialog-' + d[1] + ', textarea#wikidialog-' + d[1] + ', select#wikidialog-' + d[1]); if (d[1].length == 0) { } else { sessionStorage['wikidialog:' + id + ':params'] += d[0] + ','; var elt = d[1].first(); d[1] = d[1].add(target); for (var k = 0; k < d[1].length; k++) { if ($(d[1][k]).hasClass('wikidialog-button')) { k++; if (k < d[1].length) elt = $(d[1][k]); break; } } switch (elt.attr('type')) { case 'checkbox': d[1] = (elt[0].checked ? 'yes' : ''); break; default: d[1] = elt.val(); break; } sessionStorage['wikidialog:' + id + ':in:' + d[0]] = d[1]; } } if (target.hasClass('wikidialog-rescript')) { delete window.wikidialog; } sessionStorage.wikidialogSequenceBound = 10; // POINT TO ADJUST max action-sequence length // also occurs in receive location = s; } ).fail(function() { $('input.wikidialog-button, button.wikidialog-button').attr('disabled',false); alert('action target check failed: ' + action); }); }; // end return function () ... } // end function makeButtonHandler if (! (sessionStorage)) { // allows handler to assume sessionStorage return "<font color=red>&lt;button requires sessionStorage (not found; perhaps your browser is out of date?)&gt;</font>"; } if (sessionStorage.wikidialogNextID) {} else sessionStorage.wikidialogNextID = '1'; if (Number(sessionStorage.wikidialogNextID) <= getWikidialogID()) { alert('Warning: session data may be inaccessible\n(dialog ID should be less than stored count:\n dialog ID is ' + getWikidialogID() + '\n stored count is ' + sessionStorage.wikidialogNextID + ')'); sessionStorage.wikidialogNextID = getWikidialogID() + 1; } var s = $(this).text(); // .substring(0,1024); // BOUND BUTTON CONTENT SIZE var a = ''; if ( s.search(/^action=([\w\s-\/:]+)&/) == 0) { a = s.match(/^action=([\w\s-\/:]+)&(.*)/); s = a[2]; a = a[1]; } var b = ''; if ( s.search(/^label=([\w\s-\/\:\(\)\.\,\;']+)&/) == 0) { // STUFF ALLOWED IN BUTTON LABELS b = s.match(/^label=([\w\s-\/\:\(\)\.\,\;']+)&(.*)/); // STUFF ALLOWED IN BUTTON LABELS s = b[2]; b = b[1]; if ($(this).is('.wikidialog-italic-label')) { b = '<i>' + b + '</i>'; } if ($(this).is('.wikidialog-bold-label' )) { b = '<b>' + b + '</b>'; } } var wikidialogButtonData = $(this).data(); if ('wikidialogButtonData' in wikidialogButtonData) wikidialogButtonData = wikidialogButtonData.wikidialogButtonData; else wikidialogButtondata = {}; wikidialogButtonData.action = a; wikidialogButtonData.length = 0; var s = s.match(/([\w-]+:?[\w-]*)&/g); if (s != null) { wikidialogButtonData.length = s.length; for (var j = 0; j < s.length; j++) { wikidialogButtonData[j] = s[j].substring(0,s[j].length - 1); a += ((j == 0) ? ' < ' : ' , ') + s[j].substring(0,s[j].search(/[\:&]/)); } } return $(document.createElement('button')).attr('type','button').addClass(this.className).html(b).attr('title',a) .data('wikidialogButtonData',wikidialogButtonData).click(makeButtonHandler(wikidialogButtonData)); }); // // [[Template:Dialog/ifsupported|ifsupported]] // if (sessionStorage) { $('.wikidialog-alternative').css('display','none'); $('.wikidialog-dependent').css('display','inline'); } }; } window.wikidialog.show(); }); kf5ar2w4iv1b1d2gw7349hg8jos51ty 14551 14550 2016-12-13T15:46:23Z Pi zero 2546 1 revision imported from [[:n:MediaWiki:Gadget-wikidialog.js]]: update 14550 javascript text/javascript /* This script provides a function to set up dialog fields and buttons based on markup generated by [[:Category:dialog formatting templates|dialog formatting templates]]. Any javascript page importing this page should also contain a commented link to it, for [[Special:WhatLinksHere/{{FULLPAGENAME}}]]. For instructions, see the [[{{TALKPAGENAME}}|talk page]]. [[Category:Dialog javascript pages]] */ $(function () { if (! window.wikidialog) window.wikidialog = {}; if (! window.wikidialog.show) { // // version // window.wikidialog.gadgetVersion = function() { return '0.9 (2016-12-13)'; } // window.wikidialog.show = function () { // // [[Template:Dialog/text|text]] // var things = $('span.wikidialog-text'); var thingIds = things.map(function () { return $(this).attr('id'); }); things.replaceWith(function (idx) { if ((idx > 0) && (thingIds[idx] == thingIds[idx - 1])) { return ''; } var s = $(this).text(); // .substring(0,1024); // BOUND TEXT CONTENT SIZE var d = ''; if ( s.search(/^size=(\d*)&/) == 0) { d = s.match(/^size=(\d*)&(.*)/); s = d[2]; d = d[1]; } for (var j = idx + 1; j < thingIds.length; j++) { if (thingIds[idx] == thingIds[j]) { s += ' ' + $(things[j]).text(); } else break; } var e = $(document.createElement('input')).attr('type','text').addClass('wikidialog-text').attr('id',thingIds[idx]).val(s).attr('size',d); if ($(this).is('.wikidialog-hidden')) e.css('display','none'); return e; }); // // [[Template:Dialog/textarea|textarea]] // things = $('span.wikidialog-textarea'); thingIds = things.map(function () { return $(this).attr('id'); }); things.replaceWith(function (idx) { if ((idx > 0) && (thingIds[idx] == thingIds[idx - 1])) { return ' '; } var s = $(this).text(); // .substring(0,131072); // BOUND TEXTAREA CONTENT SIZE var c = ''; if ( s.search(/^cols=(\d*)&/) == 0) { c = s.match(/^cols=(\d*)&(.*)/); s = c[2]; c = c[1]; } var r = ''; if ( s.search(/^rows=(\d*)&/) == 0) { r = s.match(/^rows=(\d*)&(.*)/); s = r[2]; r = r[1]; } for (var j = idx + 1; j < thingIds.length; j++) { if (thingIds[idx] == thingIds[j]) { s += '\n' + $(things[j]).text(); } else break; } var e = $(document.createElement('textarea')).addClass('wikidialog-textarea').attr('id',thingIds[idx]).attr('cols',c).attr('rows',r).val(s); if ($(this).is('.wikidialog-hidden')) e.css('display','none'); return e; }); // // [[Template:Dialog/checkbox|checkbox]] // $('span.wikidialog-checkbox').replaceWith(function () { var i = $(this).attr('id'); var s = $(this).text(); // .substring(0,32); // BOUND CHECKBOX CONTENT SIZE var result = $(document.createElement('input')).attr('type','checkbox').addClass('wikidialog-checkbox').attr('id',i); if (s.length > 8) result.attr('checked','yes'); return result; }); // // [[Template:Dialog/select|select]] // $('span.wikidialog-select').replaceWith(function () { var i = $(this).attr('id'); var s = $(this).text().split('&'); // .substring(0,8192).split('&'); // BOUND SELECT CONTENT SIZE var e = document.createElement('select'); for (var k=1; (k < s.length); k += 2) if (s[k-1]) { e.appendChild(new Option(s[k-1],s[k],false,false)); } return $(e).addClass('wikidialog-select').attr('id',i); }); // // [[Template:Dialog/button|button]] // $('span.wikidialog-button').replaceWith(function () { function getWikidialogID() { var s = location.search.match(/[\?&]wikidialogid=(\d+)/); return (s && s.length && (s.length > 1)) ? Number(s[1]) : 0; } function getRollbackUrl(url, id) { var s = url.match(/[\?&]wikidialogid=(\d+)/); if (s && s.length && (s.length > 0)) { // url is stable return url; } s = sessionStorage.wikidialogUnstableUrl; if (s && (url == s)) { // url is unstable and known dialog-active // expect it to have had id one less than next-id s = ('wikidialogid=' + (id - 1)); } else { // url is unstable and might be dialog-active or not s = 'wikidialogrolledback=x'; } return (url + ((url.search(/\?/) > 0) ? '&' : '?') + s); } function makeButtonHandler(wikidialogButtonData) { // in some browsers, event target may be a copy lacking the data return function (event) { var target = $(event.target); var action = wikidialogButtonData.action; if (action.substring(0,5).toLowerCase() == 'user:') { var ug = mw.config.get('wgUserGroups'); if (!ug || ug.join(' ').indexOf("sysop") === -1) { alert('action requires admin privs: ' + action); return; } } else { action = mw.config.get('wgSiteName') + ':Dialog/' + action; } // action must be fully protected $('input.wikidialog-button, button.wikidialog-button').attr('disabled',true); $.getJSON( mw.util.wikiScript('api'), { format: 'json', action: 'query', prop: 'info', inprop: 'protection', titles: action } ).done( function(data) { var s = ''; if (data.query && data.query.pages) for (var p in data.query.pages) { if ("missing" in data.query.pages[p]) s = 'page not found'; else if ('invalid' in data.query.pages[p]) s = 'page name invalid'; else if ('protection' in data.query.pages[p]) { if (data.query.pages[p].protection[0] && data.query.pages[p].protection[1]) { if (('level' in data.query.pages[p].protection[0]) && ('level' in data.query.pages[p].protection[1])) { if ((data.query.pages[p].protection[0].level == 'sysop') && (data.query.pages[p].protection[1].level == 'sysop')) { } else s = 'page unsecured'; } else s = 'page query misfired'; } else s = 'page unsecured'; } else s = 'page query misfired'; } else s = 'page query failed'; if (s) { $('input.wikidialog-button, button.wikidialog-button').attr('disabled',false); alert(s + ': ' + action); return; } // action is now known to be fully protected // sessionStorage.wikidialogNextID was assured before setting up the button var id = sessionStorage.wikidialogNextID; s = mw.util.getUrl(action) + '?wikidialogid=' + id; sessionStorage.wikidialogNextID++; sessionStorage['wikidialog:' + id + ':incoming'] = s; if (! target.hasClass('wikidialog-norollback')) { sessionStorage['wikidialog:' + id + ':prevurl'] = getRollbackUrl(location.href, Number(id)); } if ('unauth' in wikidialogButtonData) sessionStorage['wikidialog:' + id + ':unauth'] = wikidialogButtonData.unauth; else sessionStorage['wikidialog:' + id + ':unauth'] = mw.config.get('wgPageName'); if ('origin' in wikidialogButtonData) sessionStorage['wikidialog:' + id + ':origin'] = wikidialogButtonData.origin; if ('proxy' in wikidialogButtonData) sessionStorage['wikidialog:' + id + ':proxy'] = wikidialogButtonData.proxy; sessionStorage['wikidialog:' + id + ':params'] = ''; for (var j = 0; j < wikidialogButtonData.length; j++) { var d = wikidialogButtonData[j].match(/[\w-]+/g); d[1] = (d[1] ? d[1] : d[0]); d[1] = $('input#wikidialog-' + d[1] + ', textarea#wikidialog-' + d[1] + ', select#wikidialog-' + d[1]); if (d[1].length == 0) { } else { sessionStorage['wikidialog:' + id + ':params'] += d[0] + ','; var elt = d[1].first(); d[1] = d[1].add(target); for (var k = 0; k < d[1].length; k++) { if ($(d[1][k]).hasClass('wikidialog-button')) { k++; if (k < d[1].length) elt = $(d[1][k]); break; } } switch (elt.attr('type')) { case 'checkbox': d[1] = (elt[0].checked ? 'yes' : ''); break; default: d[1] = elt.val(); break; } sessionStorage['wikidialog:' + id + ':in:' + d[0]] = d[1]; } } if (target.hasClass('wikidialog-rescript')) { delete window.wikidialog; } sessionStorage.wikidialogSequenceBound = 10; // POINT TO ADJUST max action-sequence length // also occurs in receive location = s; } ).fail(function() { $('input.wikidialog-button, button.wikidialog-button').attr('disabled',false); alert('action target check failed: ' + action); }); }; // end return function () ... } // end function makeButtonHandler if (! (sessionStorage)) { // allows handler to assume sessionStorage return "<font color=red>&lt;button requires sessionStorage (not found; perhaps your browser is out of date?)&gt;</font>"; } if (sessionStorage.wikidialogNextID) {} else sessionStorage.wikidialogNextID = '1'; if (Number(sessionStorage.wikidialogNextID) <= getWikidialogID()) { alert('Warning: session data may be inaccessible\n(dialog ID should be less than stored count:\n dialog ID is ' + getWikidialogID() + '\n stored count is ' + sessionStorage.wikidialogNextID + ')'); sessionStorage.wikidialogNextID = getWikidialogID() + 1; } var s = $(this).text(); // .substring(0,1024); // BOUND BUTTON CONTENT SIZE var a = ''; if ( s.search(/^action=([\w\s-\/:]+)&/) == 0) { a = s.match(/^action=([\w\s-\/:]+)&(.*)/); s = a[2]; a = a[1]; } var b = ''; if ( s.search(/^label=([\w\s-\/\:\(\)\.\,\;']+)&/) == 0) { // STUFF ALLOWED IN BUTTON LABELS b = s.match(/^label=([\w\s-\/\:\(\)\.\,\;']+)&(.*)/); // STUFF ALLOWED IN BUTTON LABELS s = b[2]; b = b[1]; if ($(this).is('.wikidialog-italic-label')) { b = '<i>' + b + '</i>'; } if ($(this).is('.wikidialog-bold-label' )) { b = '<b>' + b + '</b>'; } } var wikidialogButtonData = $(this).data(); if ('wikidialogButtonData' in wikidialogButtonData) wikidialogButtonData = wikidialogButtonData.wikidialogButtonData; else wikidialogButtondata = {}; wikidialogButtonData.action = a; wikidialogButtonData.length = 0; var s = s.match(/([\w-]+:?[\w-]*)&/g); if (s != null) { wikidialogButtonData.length = s.length; for (var j = 0; j < s.length; j++) { wikidialogButtonData[j] = s[j].substring(0,s[j].length - 1); a += ((j == 0) ? ' < ' : ' , ') + s[j].substring(0,s[j].search(/[\:&]/)); } } return $(document.createElement('button')).attr('type','button').addClass(this.className).html(b).attr('title',a) .data('wikidialogButtonData',wikidialogButtonData).click(makeButtonHandler(wikidialogButtonData)); }); // // [[Template:Dialog/ifsupported|ifsupported]] // if (sessionStorage) { $('.wikidialog-alternative').css('display','none'); $('.wikidialog-dependent').css('display','inline'); } }; } window.wikidialog.show(); }); kf5ar2w4iv1b1d2gw7349hg8jos51ty 14552 14551 2026-08-01T17:23:35Z QueerEcofeminist 1879 [[:en:MediaWiki:Gadget-wikidialog.js]] पासून २० आवर्तने आयात केलीत 14550 javascript text/javascript /* This script provides a function to set up dialog fields and buttons based on markup generated by [[:Category:dialog formatting templates|dialog formatting templates]]. Any javascript page importing this page should also contain a commented link to it, for [[Special:WhatLinksHere/{{FULLPAGENAME}}]]. For instructions, see the [[{{TALKPAGENAME}}|talk page]]. [[Category:Dialog javascript pages]] */ $(function () { if (! window.wikidialog) window.wikidialog = {}; if (! window.wikidialog.show) { // // version // window.wikidialog.gadgetVersion = function() { return '0.9 (2016-12-13)'; } // window.wikidialog.show = function () { // // [[Template:Dialog/text|text]] // var things = $('span.wikidialog-text'); var thingIds = things.map(function () { return $(this).attr('id'); }); things.replaceWith(function (idx) { if ((idx > 0) && (thingIds[idx] == thingIds[idx - 1])) { return ''; } var s = $(this).text(); // .substring(0,1024); // BOUND TEXT CONTENT SIZE var d = ''; if ( s.search(/^size=(\d*)&/) == 0) { d = s.match(/^size=(\d*)&(.*)/); s = d[2]; d = d[1]; } for (var j = idx + 1; j < thingIds.length; j++) { if (thingIds[idx] == thingIds[j]) { s += ' ' + $(things[j]).text(); } else break; } var e = $(document.createElement('input')).attr('type','text').addClass('wikidialog-text').attr('id',thingIds[idx]).val(s).attr('size',d); if ($(this).is('.wikidialog-hidden')) e.css('display','none'); return e; }); // // [[Template:Dialog/textarea|textarea]] // things = $('span.wikidialog-textarea'); thingIds = things.map(function () { return $(this).attr('id'); }); things.replaceWith(function (idx) { if ((idx > 0) && (thingIds[idx] == thingIds[idx - 1])) { return ' '; } var s = $(this).text(); // .substring(0,131072); // BOUND TEXTAREA CONTENT SIZE var c = ''; if ( s.search(/^cols=(\d*)&/) == 0) { c = s.match(/^cols=(\d*)&(.*)/); s = c[2]; c = c[1]; } var r = ''; if ( s.search(/^rows=(\d*)&/) == 0) { r = s.match(/^rows=(\d*)&(.*)/); s = r[2]; r = r[1]; } for (var j = idx + 1; j < thingIds.length; j++) { if (thingIds[idx] == thingIds[j]) { s += '\n' + $(things[j]).text(); } else break; } var e = $(document.createElement('textarea')).addClass('wikidialog-textarea').attr('id',thingIds[idx]).attr('cols',c).attr('rows',r).val(s); if ($(this).is('.wikidialog-hidden')) e.css('display','none'); return e; }); // // [[Template:Dialog/checkbox|checkbox]] // $('span.wikidialog-checkbox').replaceWith(function () { var i = $(this).attr('id'); var s = $(this).text(); // .substring(0,32); // BOUND CHECKBOX CONTENT SIZE var result = $(document.createElement('input')).attr('type','checkbox').addClass('wikidialog-checkbox').attr('id',i); if (s.length > 8) result.attr('checked','yes'); return result; }); // // [[Template:Dialog/select|select]] // $('span.wikidialog-select').replaceWith(function () { var i = $(this).attr('id'); var s = $(this).text().split('&'); // .substring(0,8192).split('&'); // BOUND SELECT CONTENT SIZE var e = document.createElement('select'); for (var k=1; (k < s.length); k += 2) if (s[k-1]) { e.appendChild(new Option(s[k-1],s[k],false,false)); } return $(e).addClass('wikidialog-select').attr('id',i); }); // // [[Template:Dialog/button|button]] // $('span.wikidialog-button').replaceWith(function () { function getWikidialogID() { var s = location.search.match(/[\?&]wikidialogid=(\d+)/); return (s && s.length && (s.length > 1)) ? Number(s[1]) : 0; } function getRollbackUrl(url, id) { var s = url.match(/[\?&]wikidialogid=(\d+)/); if (s && s.length && (s.length > 0)) { // url is stable return url; } s = sessionStorage.wikidialogUnstableUrl; if (s && (url == s)) { // url is unstable and known dialog-active // expect it to have had id one less than next-id s = ('wikidialogid=' + (id - 1)); } else { // url is unstable and might be dialog-active or not s = 'wikidialogrolledback=x'; } return (url + ((url.search(/\?/) > 0) ? '&' : '?') + s); } function makeButtonHandler(wikidialogButtonData) { // in some browsers, event target may be a copy lacking the data return function (event) { var target = $(event.target); var action = wikidialogButtonData.action; if (action.substring(0,5).toLowerCase() == 'user:') { var ug = mw.config.get('wgUserGroups'); if (!ug || ug.join(' ').indexOf("sysop") === -1) { alert('action requires admin privs: ' + action); return; } } else { action = mw.config.get('wgSiteName') + ':Dialog/' + action; } // action must be fully protected $('input.wikidialog-button, button.wikidialog-button').attr('disabled',true); $.getJSON( mw.util.wikiScript('api'), { format: 'json', action: 'query', prop: 'info', inprop: 'protection', titles: action } ).done( function(data) { var s = ''; if (data.query && data.query.pages) for (var p in data.query.pages) { if ("missing" in data.query.pages[p]) s = 'page not found'; else if ('invalid' in data.query.pages[p]) s = 'page name invalid'; else if ('protection' in data.query.pages[p]) { if (data.query.pages[p].protection[0] && data.query.pages[p].protection[1]) { if (('level' in data.query.pages[p].protection[0]) && ('level' in data.query.pages[p].protection[1])) { if ((data.query.pages[p].protection[0].level == 'sysop') && (data.query.pages[p].protection[1].level == 'sysop')) { } else s = 'page unsecured'; } else s = 'page query misfired'; } else s = 'page unsecured'; } else s = 'page query misfired'; } else s = 'page query failed'; if (s) { $('input.wikidialog-button, button.wikidialog-button').attr('disabled',false); alert(s + ': ' + action); return; } // action is now known to be fully protected // sessionStorage.wikidialogNextID was assured before setting up the button var id = sessionStorage.wikidialogNextID; s = mw.util.getUrl(action) + '?wikidialogid=' + id; sessionStorage.wikidialogNextID++; sessionStorage['wikidialog:' + id + ':incoming'] = s; if (! target.hasClass('wikidialog-norollback')) { sessionStorage['wikidialog:' + id + ':prevurl'] = getRollbackUrl(location.href, Number(id)); } if ('unauth' in wikidialogButtonData) sessionStorage['wikidialog:' + id + ':unauth'] = wikidialogButtonData.unauth; else sessionStorage['wikidialog:' + id + ':unauth'] = mw.config.get('wgPageName'); if ('origin' in wikidialogButtonData) sessionStorage['wikidialog:' + id + ':origin'] = wikidialogButtonData.origin; if ('proxy' in wikidialogButtonData) sessionStorage['wikidialog:' + id + ':proxy'] = wikidialogButtonData.proxy; sessionStorage['wikidialog:' + id + ':params'] = ''; for (var j = 0; j < wikidialogButtonData.length; j++) { var d = wikidialogButtonData[j].match(/[\w-]+/g); d[1] = (d[1] ? d[1] : d[0]); d[1] = $('input#wikidialog-' + d[1] + ', textarea#wikidialog-' + d[1] + ', select#wikidialog-' + d[1]); if (d[1].length == 0) { } else { sessionStorage['wikidialog:' + id + ':params'] += d[0] + ','; var elt = d[1].first(); d[1] = d[1].add(target); for (var k = 0; k < d[1].length; k++) { if ($(d[1][k]).hasClass('wikidialog-button')) { k++; if (k < d[1].length) elt = $(d[1][k]); break; } } switch (elt.attr('type')) { case 'checkbox': d[1] = (elt[0].checked ? 'yes' : ''); break; default: d[1] = elt.val(); break; } sessionStorage['wikidialog:' + id + ':in:' + d[0]] = d[1]; } } if (target.hasClass('wikidialog-rescript')) { delete window.wikidialog; } sessionStorage.wikidialogSequenceBound = 10; // POINT TO ADJUST max action-sequence length // also occurs in receive location = s; } ).fail(function() { $('input.wikidialog-button, button.wikidialog-button').attr('disabled',false); alert('action target check failed: ' + action); }); }; // end return function () ... } // end function makeButtonHandler if (! (sessionStorage)) { // allows handler to assume sessionStorage return "<font color=red>&lt;button requires sessionStorage (not found; perhaps your browser is out of date?)&gt;</font>"; } if (sessionStorage.wikidialogNextID) {} else sessionStorage.wikidialogNextID = '1'; if (Number(sessionStorage.wikidialogNextID) <= getWikidialogID()) { alert('Warning: session data may be inaccessible\n(dialog ID should be less than stored count:\n dialog ID is ' + getWikidialogID() + '\n stored count is ' + sessionStorage.wikidialogNextID + ')'); sessionStorage.wikidialogNextID = getWikidialogID() + 1; } var s = $(this).text(); // .substring(0,1024); // BOUND BUTTON CONTENT SIZE var a = ''; if ( s.search(/^action=([\w\s-\/:]+)&/) == 0) { a = s.match(/^action=([\w\s-\/:]+)&(.*)/); s = a[2]; a = a[1]; } var b = ''; if ( s.search(/^label=([\w\s-\/\:\(\)\.\,\;']+)&/) == 0) { // STUFF ALLOWED IN BUTTON LABELS b = s.match(/^label=([\w\s-\/\:\(\)\.\,\;']+)&(.*)/); // STUFF ALLOWED IN BUTTON LABELS s = b[2]; b = b[1]; if ($(this).is('.wikidialog-italic-label')) { b = '<i>' + b + '</i>'; } if ($(this).is('.wikidialog-bold-label' )) { b = '<b>' + b + '</b>'; } } var wikidialogButtonData = $(this).data(); if ('wikidialogButtonData' in wikidialogButtonData) wikidialogButtonData = wikidialogButtonData.wikidialogButtonData; else wikidialogButtondata = {}; wikidialogButtonData.action = a; wikidialogButtonData.length = 0; var s = s.match(/([\w-]+:?[\w-]*)&/g); if (s != null) { wikidialogButtonData.length = s.length; for (var j = 0; j < s.length; j++) { wikidialogButtonData[j] = s[j].substring(0,s[j].length - 1); a += ((j == 0) ? ' < ' : ' , ') + s[j].substring(0,s[j].search(/[\:&]/)); } } return $(document.createElement('button')).attr('type','button').addClass(this.className).html(b).attr('title',a) .data('wikidialogButtonData',wikidialogButtonData).click(makeButtonHandler(wikidialogButtonData)); }); // // [[Template:Dialog/ifsupported|ifsupported]] // if (sessionStorage) { $('.wikidialog-alternative').css('display','none'); $('.wikidialog-dependent').css('display','inline'); } }; } window.wikidialog.show(); }); kf5ar2w4iv1b1d2gw7349hg8jos51ty मिडियाविकी:Gadget-CommentsInLocalTime.js 8 4159 14553 2009-01-22T04:28:43Z Oren0 3638 Create "Comments in Local Time" gadget from "Localize Comments" script per discussion at [[WP:GP]] 14553 javascript text/javascript // _________________________________________________________________________________________ // | | // | === WARNING: GLOBAL GADGET FILE === | // | Changes to this page affect many users. | // | Please discuss changes on the talk page or on [[Wikipedia_talk:Gadget]] before editing. | // |_________________________________________________________________________________________| // // Imported from version 265100813 as of January 19, 2009 from [[User:Gary King/localize comments.js]] // This script changes timestamps such as those in comments to be relative to the local time. See [[Wikipedia:Comments in Local Time]] if (typeof(LocalizeConfig) == 'undefined') LocalizeConfig = {}; if (typeof(LocalizeConfig.dateFormat) == 'undefined') LocalizeConfig.dateFormat = 'ymd'; addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = "0" + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = add_leading_zero(parseInt(time.getHours())), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalizeConfig.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm, return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function convert_month_to_number(month) { var output = new Date(month + " 1, 2001"); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 0m9omj4a6nku8c1qgt3az39pxf0r8r4 14554 14553 2009-01-25T20:59:57Z Oren0 3638 replace with import per editprotected request 14554 javascript text/javascript // _________________________________________________________________________________________ // | | // | === WARNING: GLOBAL GADGET FILE === | // | Changes to this page affect many users. | // | Please discuss changes on the talk page or on [[Wikipedia_talk:Gadget]] before editing. | // |_________________________________________________________________________________________| // // Imported from [[User:Gary King/localize comments.js]] // This script changes timestamps such as those in comments to be relative to the local time. See [[Wikipedia:Comments in Local Time]] importScript('User:Gary King/localize comments.js'); s2yn4skygc8rp5rqb68j8t2v6m77vjf 14555 14554 2009-01-27T00:22:59Z Nihiltres 3639 Update pointer to script per editprotected on talk by [[User:Gary King|Gary King]]; also add note in header about move 14555 javascript text/javascript // _________________________________________________________________________________________ // | | // | === WARNING: GLOBAL GADGET FILE === | // | Changes to this page affect many users. | // | Please discuss changes on the talk page or on [[Wikipedia_talk:Gadget]] before editing. | // |_________________________________________________________________________________________| // // Imported from [[User:Gary King/localize comments.js]] (since moved to [[User:Gary King/comments in local time.js]]) // This script changes timestamps such as those in comments to be relative to the local time. See [[Wikipedia:Comments in Local Time]] importScript('User:Gary King/comments in local time.js'); 2n8v3gadf9e3mqy0y157zeerel38lkq 14556 14555 2010-01-26T15:36:02Z Adrignola 502 3 revisions from [[:w:MediaWiki:Gadget-CommentsInLocalTime.js]]: new gadget 14555 javascript text/javascript // _________________________________________________________________________________________ // | | // | === WARNING: GLOBAL GADGET FILE === | // | Changes to this page affect many users. | // | Please discuss changes on the talk page or on [[Wikipedia_talk:Gadget]] before editing. | // |_________________________________________________________________________________________| // // Imported from [[User:Gary King/localize comments.js]] (since moved to [[User:Gary King/comments in local time.js]]) // This script changes timestamps such as those in comments to be relative to the local time. See [[Wikipedia:Comments in Local Time]] importScript('User:Gary King/comments in local time.js'); 2n8v3gadf9e3mqy0y157zeerel38lkq 14557 2008-02-27T15:33:45Z Gary King 3640 fixing 14557 javascript text/javascript //Localized time/date script function numToMonth(num) { if (num==0) {return "Janurary";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var timeStr = ""; if (time.getHours()<10) {timeStr += "0";} timeStr += parseInt(time.getHours()) + ":"; if (time.getMinutes()<10) {timeStr += "0";} timeStr += parseInt(time.getMinutes()); timeStr += ", "; timeStr += time.getDate(); timeStr += " "; timeStr += numToMonth(time.getMonth()); timeStr += " "; timeStr += time.getFullYear(); timeStr += " (UTC"; var offset = -1*time.getTimezoneOffset()/60; if (offset >= 0) {timeStr += "+";} timeStr += offset + ")"; return timeStr; } function adjustTime2(str, hour, minute, month, day, year, offset, s) { return adjustTime(str, hour, minute, day, month, year, offset, s); } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) { return; } if (document.location.href.indexOf("action=history") != -1) { return; } if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } /* if (document.location.href.indexOf("&action=history") != -1) { var newDoc = document.getElementById("bodyContent").innerHTML.replace(/(\d\d):(\d\d), ([A-Z][a-z]+) (\d{1,2}), (\d{4})/g, adjustTime2); document.getElementById("bodyContent").innerHTML = newDoc; }*/ }); a8nsu1sn9acx4k963eic7c1jnryhx9t 14558 14557 2008-02-28T22:15:26Z Gary King 3640 fixing 14558 javascript text/javascript //Localized time/date script function numToMonth(num) { if (num==0) {return "Janurary";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var timeStr = ""; if (time.getHours()<10) {timeStr += "0";} timeStr += parseInt(time.getHours()) + ":"; if (time.getMinutes()<10) {timeStr += "0";} timeStr += parseInt(time.getMinutes()); timeStr += ", "; timeStr += time.getDate(); timeStr += " "; timeStr += numToMonth(time.getMonth()); timeStr += " "; timeStr += time.getFullYear(); timeStr += " (UTC"; var offset = -1*time.getTimezoneOffset()/60; if (offset >= 0) {timeStr += "+";} timeStr += offset + ")"; return timeStr; } function adjustTime2(str, hour, minute, month, day, year, offset, s) { return adjustTime(str, hour, minute, day, month, year, offset, s); } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); ibl4acacdvnkm8oj4efalat6zi454a6 14559 14558 2008-02-28T22:20:00Z Gary King 3640 fixing 14559 javascript text/javascript //Localized time/date script function numToMonth(num) { if (num==0) {return "Janurary";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var timeStr = ""; if (time.getHours()<10) timeStr += "0"; timeStr += parseInt(time.getHours()) + ":"; if (time.getMinutes()<10) timeStr += "0"; timeStr += parseInt(time.getMinutes()); timeStr += ", "; timeStr += time.getDate(); timeStr += " "; timeStr += numToMonth(time.getMonth()); timeStr += " "; timeStr += time.getFullYear(); timeStr += " (UTC"; var offset = -1*time.getTimezoneOffset()/60; if (offset >= 0) timeStr += "+"; timeStr += offset + ")"; return timeStr; } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); evdustshiy264lppuybppwjwnap8lx7 14560 14559 2008-02-28T22:28:29Z Gary King 3640 fixing 14560 javascript text/javascript //Localized time/date script function numToMonth(num) { if (num==0) {return "Janurary";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var timeStr = ""; // Hours var hours = time.getHours(); var ampm = 'am'; if (hours == 0) hours = 12; if (hours > 11) ampm = 'pm'; if (hours > 12) hours -= 12; timeStr += leadng_zero(parseInt(hours)) + ":"; // Minutes if (time.getMinutes()<10) timeStr += "0"; timeStr += parseInt(time.getMinutes()); timeStr += ", "; // Day timeStr += time.getDate(); timeStr += " "; // Month timeStr += numToMonth(time.getMonth()); timeStr += " "; // Year timeStr += time.getFullYear(); // Timezone timeStr += " (UTC"; var offset = -1*time.getTimezoneOffset()/60; if (offset >= 0) timeStr += "+"; timeStr += offset + ")"; return timeStr; } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); iiab77vctut3ukrsbf2g99sm3hff3dw 14561 14560 2008-02-28T22:29:28Z Gary King 3640 fixing 14561 javascript text/javascript //Localized time/date script function numToMonth(num) { if (num==0) {return "Janurary";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var timeStr = ""; // Hours var hours = time.getHours(); var ampm = 'am'; if (hours == 0) hours = 12; if (hours > 11) ampm = 'pm'; if (hours > 12) hours -= 12; timeStr += leading_zero(parseInt(hours)) + ":"; // Minutes if (time.getMinutes()<10) timeStr += "0"; timeStr += parseInt(time.getMinutes()); timeStr += ", "; // Day timeStr += time.getDate(); timeStr += " "; // Month timeStr += numToMonth(time.getMonth()); timeStr += " "; // Year timeStr += time.getFullYear(); // Timezone timeStr += " (UTC"; var offset = -1*time.getTimezoneOffset()/60; if (offset >= 0) timeStr += "+"; timeStr += offset + ")"; return timeStr; } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); eptp1tvg2edoyl4pkli380hqp9m1smh 14562 14561 2008-02-28T22:34:00Z Gary King 3640 fixing 14562 javascript text/javascript //Localized time/date script function numToMonth(num) { if (num==0) {return "Janurary";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var timeStr = ""; // Hours var hours = time.getHours(); var ampm = 'am'; if (hours == 0) hours = 12; if (hours > 11) ampm = 'pm'; if (hours > 12) hours -= 12; timeStr += parseInt(hours) + ":"; // Minutes if (time.getMinutes()<10) timeStr += "0"; timeStr += parseInt(time.getMinutes()) + ' ' + ampm + ', '; // Day timeStr += time.getDate() + ' '; // Month timeStr += numToMonth(time.getMonth()) + ' '; // Year timeStr += time.getFullYear(); // Timezone timeStr += " (UTC"; var offset = -1*time.getTimezoneOffset()/60; if (offset >= 0) timeStr += "+"; timeStr += offset + ")"; return timeStr; } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); gpg7876smbx0v6t9bpmt6lqmzh6vf0v 14563 14562 2008-02-28T22:41:17Z Gary King 3640 fixing 14563 javascript text/javascript //Localized time/date script function numToMonth(num) { if (num==0) {return "Janurary";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = numToMonth(time.getMonth()); var day = time.getDate(); var hour = leading_zero(parseInt(hours)); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // 2001-01-01, 12:00 am (UTC-5) return year + '-' + month + '-' + day + ', ' + hour + ':' + minute + ' ' + ampm + ' (UTC-' + utc_offset + ')'; } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); 12xsckivtd6cu2pdkgfkjaf3wtzodr6 14564 14563 2008-02-28T22:42:09Z Gary King 3640 fixing 14564 javascript text/javascript //Localized time/date script function numToMonth(num) { if (num==0) {return "Janurary";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = time.getMonth(); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours()); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // 2001-01-01, 12:00 am (UTC-5) return year + '-' + month + '-' + day + ', ' + hour + ':' + minute + ' ' + ampm + ' (UTC-' + utc_offset + ')'; } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); 835moh2kkrsj46rvy4w4tg49w1yq473 14565 14564 2008-02-28T22:42:38Z Gary King 3640 fixing 14565 javascript text/javascript //Localized time/date script function numToMonth(num) { if (num==0) {return "Janurary";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = time.getMonth(); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // 2001-01-01, 12:00 am (UTC-5) return year + '-' + month + '-' + day + ', ' + hour + ':' + minute + ' ' + ampm + ' (UTC-' + utc_offset + ')'; } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); 822j6hgffeyuweauiyyjxr2vmduw1c8 14566 14565 2008-02-28T22:43:46Z Gary King 3640 fixing 14566 javascript text/javascript //Localized time/date script function numToMonth(num) { if (num==0) {return "Janurary";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = time.getMonth(); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // 2001-01-01, 12:00 am (UTC-5) return year + '-' + month + '-' + day + ', ' + hour + ':' + minute + ' ' + ampm + ' (UTC' + utc_offset + ')'; } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); 9h1arbwysp6ttri4laa4lzueihreccr 14567 14566 2008-02-28T22:44:11Z Gary King 3640 fixing 14567 javascript text/javascript //Localized time/date script function numToMonth(num) { if (num==0) {return "Janurary";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth()); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // 2001-01-01, 12:00 am (UTC-5) return year + '-' + month + '-' + day + ', ' + hour + ':' + minute + ' ' + ampm + ' (UTC' + utc_offset + ')'; } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); ttn9ea0ym0ed7vjkcwi55p34kyjnwqb 14568 14567 2008-02-28T22:46:30Z Gary King 3640 fixing 14568 javascript text/javascript //Localized time/date script function numToMonth(num) { if (num==0) {return "Janurary";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = numToMonth(time.getMonth()); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // 2001-01-01, 12:00 am (UTC-5) return year + '-' + month + '-' + day + ', ' + hour + ':' + minute + ' ' + ampm + ' (UTC' + utc_offset + ')'; } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); 1shg6aebdlx1xxe7a4fve8545slvzrz 14569 14568 2008-02-28T22:48:33Z Gary King 3640 fixing 14569 javascript text/javascript //Localized time/date script function numToMonth(num) { if (num==0) {return "Janurary";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = time.getMonth() + 1; var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // 2001-01-01, 12:00 am (UTC-5) return year + '-' + month + '-' + day + ', ' + hour + ':' + minute + ' ' + ampm + ' (UTC' + utc_offset + ')'; } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); g87zqmshxl5d1ykqts8pd34ugre4tna 14570 14569 2008-02-28T22:49:03Z Gary King 3640 fixing 14570 javascript text/javascript //Localized time/date script function numToMonth(num) { if (num==0) {return "Janurary";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // 2001-01-01, 12:00 am (UTC-5) return year + '-' + month + '-' + day + ', ' + hour + ':' + minute + ' ' + ampm + ' (UTC' + utc_offset + ')'; } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); jxnvqhvp8rcdzhkxxfjo9wy4pqz0tvk 14571 14570 2008-02-29T03:13:31Z Gary King 3640 fixing 14571 javascript text/javascript //Localized time/date script function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // 2001-01-01, 12:00 am (UTC-5) return year + '-' + month + '-' + day + ', ' + hour + ':' + minute + ' ' + ampm + ' (UTC' + utc_offset + ')'; } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); jbmg14qynhsgt7y01iqgmo3paqjms1j 14572 14571 2008-02-29T06:46:18Z Gary King 3640 fixing 14572 javascript text/javascript function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); var yesterday_day = yesterday.getDate(); yesterday.setDate(yesterday_day - 1); if (year == today.getYear() && month == today.getMonth() && day == today.getDate()) var date = 'today'; else if (year == yesterday.getYear() && month == yesterday.getMonth() && day == today.getDate()) var date = 'yesterday'; else var date = year + '-' + month + '-' + day; // 2001-01-01, 12:00 am (UTC-5) return date + ', ' + hour + ':' + minute + ' ' + ampm + ' (UTC' + utc_offset + ')'; } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); rpygwud8i52g7qor9d45clbcvkuyrb4 14573 14572 2008-02-29T06:47:41Z Gary King 3640 fixing 14573 javascript text/javascript function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); var yesterday_day = yesterday.getDate(); yesterday.setDate(yesterday_day - 1); if (year == today.getYear() && month == leading_zero(today.getMonth()) && day == today.getDate()) var date = 'today'; else if (year == yesterday.getYear() && month == leading_zero(yesterday.getMonth()) && day == today.getDate()) var date = 'yesterday'; else var date = year + '-' + month + '-' + day; // 2001-01-01, 12:00 am (UTC-5) return date + ', ' + hour + ':' + minute + ' ' + ampm + ' (UTC' + utc_offset + ')'; } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); 14lsaxiykplgawxlmowqfg31dp65ax2 14574 14573 2008-02-29T06:50:00Z Gary King 3640 fixing 14574 javascript text/javascript function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); var yesterday_day = yesterday.getDate(); yesterday.setDate(yesterday_day - 1); if (year == today.getYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'today'; else if (year == yesterday.getYear() && month == leading_zero(yesterday.getMonth() + 1) && day == today.getDate()) var date = 'yesterday'; else var date = year + '-' + month + '-' + day; // 2001-01-01, 12:00 am (UTC-5) return date + ', ' + hour + ':' + minute + ' ' + ampm + ' (UTC' + utc_offset + ')'; } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); spxwjg4wogwi82986xjw7br3tgu604d 14575 14574 2008-02-29T06:50:38Z Gary King 3640 fixing 14575 javascript text/javascript function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); var yesterday_day = yesterday.getDate(); yesterday.setDate(yesterday_day - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == today.getDate()) var date = 'yesterday'; else var date = year + '-' + month + '-' + day; // 2001-01-01, 12:00 am (UTC-5) return date + ', ' + hour + ':' + minute + ' ' + ampm + ' (UTC' + utc_offset + ')'; } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); 45ycx727k48s227iicsvuhaukdg9qy9 14576 14575 2008-02-29T06:53:01Z Gary King 3640 fixing 14576 javascript text/javascript function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); var yesterday_day = yesterday.getDate(); yesterday.setDate(yesterday_day - 1); alert('Today is ' + today.getFullYear() + '-' + leading_zero(today.getMonth() + 1) + '-' + today.getDate()); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == today.getDate()) var date = 'yesterday'; else var date = year + '-' + month + '-' + day; // 2001-01-01, 12:00 am (UTC-5) return date + ', ' + hour + ':' + minute + ' ' + ampm + ' (UTC' + utc_offset + ')'; } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); kzpxmk2ai9e80hx7u08ym3ztcn0893n 14577 14576 2008-02-29T06:54:59Z Gary King 3640 fixing 14577 javascript text/javascript function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); var yesterday_day = yesterday.getDate(); yesterday.setDate(yesterday_day - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == today.getDate()) var date = 'yesterday'; else var date = year + '-' + month + '-' + day; // 2001-01-01, 12:00 am (UTC-5) return date + ', ' + hour + ':' + minute + ' ' + ampm + ' (UTC' + utc_offset + ')' + ' (Yesterday was ' + yesterday.getFullYear() + '-' + leading_zero(yesterday.getMonth() + 1) + '-' + yesterday.getDate() + ')'; } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); 0a7w37z5gaotuscnw6kvuhd124g798x 14578 14577 2008-02-29T07:00:11Z Gary King 3640 fixing 14578 javascript text/javascript function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); var yesterday_day = yesterday.getDate(); yesterday.setDate(yesterday_day - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == today.getDate()) var date = 'yesterday'; else var date = year + '-' + month + '-' + day; // 2001-01-01, 12:00 am (UTC-5) return date + ', ' + hour + ':' + minute + ' ' + ampm + ' (UTC' + utc_offset + ')' + ' (' + year == today.getFullYear() + ')'; } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); 96kw5ksch1qvq5j7spkltjtyvli0msn 14579 14578 2008-02-29T07:08:51Z Gary King 3640 fixing 14579 javascript text/javascript function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); var yesterday_day = yesterday.getDate(); yesterday.setDate(yesterday_day - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == today.getDate()) var date = 'yesterday'; else var date = year + '-' + month + '-' + day; // 2001-01-01, 12:00 am (UTC-5) return date + ', ' + hour + ':' + minute + ' ' + ampm + ' (UTC' + utc_offset + ')' + ' (' + parseInt(year) == parseInt(today.getFullYear()) + ')'; } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); ksw9h283zotlxypdihav9c7u67dsod1 14580 14579 2008-02-29T07:10:13Z Gary King 3640 fixing 14580 javascript text/javascript function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); var yesterday_day = yesterday.getDate(); yesterday.setDate(yesterday_day - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == today.getDate()) var date = 'yesterday'; else var date = year + '-' + month + '-' + day; // 2001-01-01, 12:00 am (UTC-5) return date + ', ' + hour + ':' + minute + ' ' + ampm + ' (UTC' + utc_offset + ')' + ' (' + parseInt(year) + ')'; } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); l3gke43iazvndlgik9614vh2kogxq7p 14581 14580 2008-02-29T07:10:39Z Gary King 3640 fixing 14581 javascript text/javascript function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); var yesterday_day = yesterday.getDate(); yesterday.setDate(yesterday_day - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == today.getDate()) var date = 'yesterday'; else var date = year + '-' + month + '-' + day; // 2001-01-01, 12:00 am (UTC-5) return date + ', ' + hour + ':' + minute + ' ' + ampm + ' (UTC' + utc_offset + ')' } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); 7isejvu3alt2awiy6rv9f1ocqllplcz 14582 14581 2008-02-29T07:11:11Z Gary King 3640 fixing 14582 javascript text/javascript function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); var yesterday_day = yesterday.getDate(); yesterday.setDate(yesterday_day - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == today.getDate()) var date = 'Yesterday'; else var date = year + '-' + month + '-' + day; // 2001-01-01, 12:00 am (UTC-5) return date + ', ' + hour + ':' + minute + ' ' + ampm + ' (UTC' + utc_offset + ')' } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); 5llknxvqgyobrphr79th6kf76iddg7i 14583 14582 2008-02-29T07:11:36Z Gary King 3640 fixing 14583 javascript text/javascript function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); var yesterday_day = yesterday.getDate(); yesterday.setDate(yesterday_day - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else var date = year + '-' + month + '-' + day; // 2001-01-01, 12:00 am (UTC-5) return date + ', ' + hour + ':' + minute + ' ' + ampm + ' (UTC' + utc_offset + ')' } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); 2iz1rh2hlcg16lv1crm0onsrmool69n 14584 14583 2008-02-29T07:17:20Z Gary King 3640 fixing 14584 javascript text/javascript function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); var yesterday_day = yesterday.getDate(); yesterday.setDate(yesterday_day - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; var date = year + '-' + month + '-' + day + ', ' + day_of_the_week + ', '; } // 2001-01-01, 12:00 am (UTC-5) return date + ', ' + hour + ':' + minute + ' ' + ampm + ' (UTC' + utc_offset + ')' } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); 0oscmqw3qhmkqkzhamzhfv367ubdott 14585 14584 2008-02-29T07:18:21Z Gary King 3640 fixing 14585 javascript text/javascript function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); var yesterday_day = yesterday.getDate(); yesterday.setDate(yesterday_day - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; var date = year + '-' + month + '-' + day + ', ' + day_of_the_week; } // 2001-01-01, 12:00 am (UTC-5) return date + ', ' + hour + ':' + minute + ' ' + ampm + ' (UTC' + utc_offset + ')' } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); k4eixjd4ql8gpr5q2v28lr9jzeuxspr 14586 14585 2008-02-29T07:19:28Z Gary King 3640 fixing 14586 javascript text/javascript function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); var yesterday_day = yesterday.getDate(); yesterday.setDate(yesterday_day - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; var date = year + '-' + month + '-' + day + ', ' + day_of_the_week; } // 2001-01-01, 12:00 am (UTC-5) return date + ',&nbsp;' + hour + ':' + minute + '&nbsp;' + ampm + '&nbsp;(UTC' + utc_offset + ')' } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); ocg4esr79alts54rio13lozxlari4g1 14587 14586 2008-02-29T07:20:02Z Gary King 3640 fixing 14587 javascript text/javascript function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); var yesterday_day = yesterday.getDate(); yesterday.setDate(yesterday_day - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; var date = year + '-' + month + '-' + day + ',&nbsp;' + day_of_the_week; } // 2001-01-01, 12:00 am (UTC-5) return date + ',&nbsp;' + hour + ':' + minute + '&nbsp;' + ampm + '&nbsp;(UTC' + utc_offset + ')' } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); l1jveu475eujk8bz23fvmtqajseq7jo 14588 14587 2008-02-29T07:22:15Z Gary King 3640 fixing 14588 javascript text/javascript function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); var yesterday_day = yesterday.getDate(); yesterday.setDate(yesterday_day - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; var date = year + '-' + month + '-' + day + ',&nbsp;' + day_of_the_week; } // 2001-01-01, 12:00 am (UTC-5) return '<span style="font-size: 90%;">' + date + ',&nbsp;' + hour + ':' + minute + '&nbsp;' + ampm + '&nbsp;(UTC' + utc_offset + ')</span>' } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); eg7frtlhgirbrpeq9knfr9ue159bgxy 14589 14588 2008-02-29T07:33:27Z Gary King 3640 fixing 14589 javascript text/javascript function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); var yesterday_day = yesterday.getDate(); yesterday.setDate(yesterday_day - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? var difference_in_seconds = today.getTime() - time.getTime(); var difference_in_days = difference_in_seconds / 1000 / 60 / 60 / 24; if (difference_in_days <= 7) var days_ago = '&nbsp;(' + difference_in_days + '&nbsp;days&nbsp;ago)'; else var days_ago = ''; var date = year + '-' + month + '-' + day + ',&nbsp;' + day_of_the_week + days_ago; } // 2001-01-01, 12:00 am (UTC-5) return '<span style="font-size: 90%;">' + date + ',&nbsp;' + hour + ':' + minute + '&nbsp;' + ampm + '&nbsp;(UTC' + utc_offset + ')</span>' } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); odtmfzp586gxrbrz45emxp5ec9tp4mf 14590 14589 2008-02-29T07:36:45Z Gary King 3640 fixing 14590 javascript text/javascript function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); var yesterday_day = yesterday.getDate(); yesterday.setDate(yesterday_day - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? var difference_in_seconds = today.getTime() - time.getTime(); var Math.ceil(difference_in_days) = difference_in_seconds / 1000 / 60 / 60 / 24; if (difference_in_days <= 7) var days_ago = '&nbsp;(' + difference_in_days + '&nbsp;days&nbsp;ago)'; else var days_ago = ''; var date = year + '-' + month + '-' + day + ',&nbsp;' + day_of_the_week + days_ago; } // 2001-01-01, 12:00 am (UTC-5) return '<span style="font-size: 90%;">' + date + ',&nbsp;' + hour + ':' + minute + '&nbsp;' + ampm + '&nbsp;(UTC' + utc_offset + ')</span>' } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); 71mn3xk1rtn7n6hxg8xkh9u8k1ti883 14591 14590 2008-02-29T07:37:32Z Gary King 3640 fixing 14591 javascript text/javascript function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); var yesterday_day = yesterday.getDate(); yesterday.setDate(yesterday_day - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? var difference_in_seconds = today.getTime() - time.getTime(); var difference_in_days = difference_in_seconds / 1000 / 60 / 60 / 24; difference_in_days = Math.ceil(difference_in_days); if (difference_in_days <= 7) var days_ago = '&nbsp;(' + difference_in_days + '&nbsp;days&nbsp;ago)'; else var days_ago = ''; var date = year + '-' + month + '-' + day + ',&nbsp;' + day_of_the_week + days_ago; } // 2001-01-01, 12:00 am (UTC-5) return '<span style="font-size: 90%;">' + date + ',&nbsp;' + hour + ':' + minute + '&nbsp;' + ampm + '&nbsp;(UTC' + utc_offset + ')</span>' } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); axb1gw1mp32rqiofmdjm5rsd0w3q7b3 14592 14591 2008-02-29T07:46:21Z Gary King 3640 fixing 14592 javascript text/javascript function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); var yesterday_day = yesterday.getDate(); yesterday.setDate(yesterday_day - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today.setHour(0); today.setMinute(0); today.setSecond(0); time.setHour(0); time.setMinute(0); time.setSecond(0); var difference_in_seconds = today.getTime() - time.getTime(); var difference_in_days = difference_in_seconds / 1000 / 60 / 60 / 24; difference_in_days = Math.ceil(difference_in_days); if (difference_in_days <= 7) var days_ago = '&nbsp;(' + difference_in_days + '&nbsp;days&nbsp;ago)'; else var days_ago = ''; var date = year + '-' + month + '-' + day + ',&nbsp;' + day_of_the_week + days_ago; } // 2001-01-01, 12:00 am (UTC-5) return '<span style="font-size: 90%;">' + date + ',&nbsp;' + hour + ':' + minute + '&nbsp;' + ampm + '&nbsp;(UTC' + utc_offset + ')</span>' } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); kmeq2uq85wvjztiespeystzjufmcr74 14593 14592 2008-02-29T07:47:32Z Gary King 3640 fixing 14593 javascript text/javascript function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); var yesterday_day = yesterday.getDate(); yesterday.setDate(yesterday_day - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today.setHours(0); today.setMinutes(0); today.setSeconds(0); time.setHours(0); time.setMinutes(0); time.setSeconds(0); var difference_in_seconds = today.getTime() - time.getTime(); var difference_in_days = difference_in_seconds / 1000 / 60 / 60 / 24; difference_in_days = Math.ceil(difference_in_days); if (difference_in_days <= 7) var days_ago = '&nbsp;(' + difference_in_days + '&nbsp;days&nbsp;ago)'; else var days_ago = ''; var date = year + '-' + month + '-' + day + ',&nbsp;' + day_of_the_week + days_ago; } // 2001-01-01, 12:00 am (UTC-5) return '<span style="font-size: 90%;">' + date + ',&nbsp;' + hour + ':' + minute + '&nbsp;' + ampm + '&nbsp;(UTC' + utc_offset + ')</span>' } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); omu5ue5p6ldguky8elrw3iqkvr4espp 14594 14593 2008-02-29T08:02:03Z Gary King 3640 fixing 14594 javascript text/javascript function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); var yesterday_day = yesterday.getDate(); yesterday.setDate(yesterday_day - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today.setHours(0); today.setMinutes(0); today.setSeconds(0); time.setHours(0); time.setMinutes(0); time.setSeconds(0); var difference_in_seconds = today.getTime() - time.getTime(); var difference_in_days = difference_in_seconds / 1000 / 60 / 60 / 24; difference_in_days = Math.ceil(difference_in_days); if (difference_in_days <= 7) var days_ago = '&nbsp;(' + difference_in_days + '&nbsp;days&nbsp;ago)'; else var days_ago = ''; var date = year + '-' + month + '-' + day + ',&nbsp;' + day_of_the_week + days_ago + ' (' + today.getHours() + ':' + today.getMinutes() + ':' + today.getSeconds() + ')'; } // 2001-01-01, 12:00 am (UTC-5) return '<span style="font-size: 90%;">' + date + ',&nbsp;' + hour + ':' + minute + '&nbsp;' + ampm + '&nbsp;(UTC' + utc_offset + ')</span>' } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); jaund01d733awtwj52i8mcx1tsrdbga 14595 14594 2008-02-29T08:04:22Z Gary King 3640 fixing 14595 javascript text/javascript function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); var yesterday_day = yesterday.getDate(); yesterday.setDate(yesterday_day - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today.setHours(0); today.setMinutes(0); today.setSeconds(0); time.setHours(0); time.setMinutes(0); time.setSeconds(0); var difference_in_seconds = today.getTime() - time.getTime(); var difference_in_days = difference_in_seconds / 1000 / 60 / 60 / 24; difference_in_days = Math.ceil(difference_in_days); if (difference_in_days <= 7) var days_ago = '&nbsp;(' + difference_in_days + '&nbsp;days&nbsp;ago)'; else var days_ago = ''; var date = year + '-' + month + '-' + day + ',&nbsp;' + day_of_the_week + days_ago + ' (' + today.getFullYear() + '-' + time.getMonth() + '-' + today.getDate() + ')'; } // 2001-01-01, 12:00 am (UTC-5) return '<span style="font-size: 90%;">' + date + ',&nbsp;' + hour + ':' + minute + '&nbsp;' + ampm + '&nbsp;(UTC' + utc_offset + ')</span>' } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); 9av648p11v1ip30r3yi0nbxq3bf46uv 14596 14595 2008-02-29T08:05:03Z Gary King 3640 fixing 14596 javascript text/javascript function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); var yesterday_day = yesterday.getDate(); yesterday.setDate(yesterday_day - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today.setHours(0); today.setMinutes(0); today.setSeconds(0); time.setHours(0); time.setMinutes(0); time.setSeconds(0); var difference_in_seconds = today.getTime() - time.getTime(); var difference_in_days = difference_in_seconds / 1000 / 60 / 60 / 24; difference_in_days = Math.ceil(difference_in_days); if (difference_in_days <= 7) var days_ago = '&nbsp;(' + difference_in_days + '&nbsp;days&nbsp;ago)'; else var days_ago = ''; var date = year + '-' + month + '-' + day + ',&nbsp;' + day_of_the_week + days_ago + ' (' + time.getFullYear() + '-' + time.getMonth() + '-' + time.getDate() + ')'; } // 2001-01-01, 12:00 am (UTC-5) return '<span style="font-size: 90%;">' + date + ',&nbsp;' + hour + ':' + minute + '&nbsp;' + ampm + '&nbsp;(UTC' + utc_offset + ')</span>' } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); ktopdh594qn3ft1fpcbrbjym4j88msx 14597 14596 2008-02-29T08:05:46Z Gary King 3640 fixing 14597 javascript text/javascript function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); var yesterday_day = yesterday.getDate(); yesterday.setDate(yesterday_day - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today.setHours(0); today.setMinutes(0); today.setSeconds(0); time.setHours(0); time.setMinutes(0); time.setSeconds(0); var difference_in_seconds = today.getTime() - time.getTime(); var difference_in_days = difference_in_seconds / 1000 / 60 / 60 / 24; difference_in_days = Math.ceil(difference_in_days); if (difference_in_days <= 7) var days_ago = '&nbsp;(' + difference_in_days + '&nbsp;days&nbsp;ago)'; else var days_ago = ''; var date = year + '-' + month + '-' + day + ',&nbsp;' + day_of_the_week + days_ago + ' (' + time.getTime() + ': ' + time.getFullYear() + '-' + time.getMonth() + '-' + time.getDate() + ')'; } // 2001-01-01, 12:00 am (UTC-5) return '<span style="font-size: 90%;">' + date + ',&nbsp;' + hour + ':' + minute + '&nbsp;' + ampm + '&nbsp;(UTC' + utc_offset + ')</span>' } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); 966iv3cqw1iz9azv7kq2xszk264w96k 14598 14597 2008-02-29T08:07:26Z Gary King 3640 fixing 14598 javascript text/javascript function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); var yesterday_day = yesterday.getDate(); yesterday.setDate(yesterday_day - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today.setHours(0); today.setMinutes(0); today.setSeconds(0); time.setHours(0); time.setMinutes(0); time.setSeconds(0); var difference_in_milliseconds = today.getTime() - time.getTime(); var difference_in_days = difference_in_milliseconds / 1000 / 60 / 60 / 24; difference_in_days = Math.ceil(difference_in_days); if (difference_in_days <= 7) var days_ago = '&nbsp;(' + difference_in_days + '&nbsp;days&nbsp;ago)'; else var days_ago = ''; var date = year + '-' + month + '-' + day + ',&nbsp;' + day_of_the_week + days_ago + ' (' + today.getTime() - time.getTime() + ': ' + time.getFullYear() + '-' + time.getMonth() + '-' + time.getDate() + ')'; } // 2001-01-01, 12:00 am (UTC-5) return '<span style="font-size: 90%;">' + date + ',&nbsp;' + hour + ':' + minute + '&nbsp;' + ampm + '&nbsp;(UTC' + utc_offset + ')</span>' } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); 1o6ngv6e8mo153xoau1hc2av6ytx79e 14599 14598 2008-02-29T08:12:31Z Gary King 3640 fixing 14599 javascript text/javascript function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today.setHours(0); today.setMinutes(0); today.setSeconds(0); time.setHours(0); time.setMinutes(0); time.setSeconds(0); var difference_in_milliseconds = today.getTime() - time.getTime(); var difference_in_days = difference_in_milliseconds / 1000 / 60 / 60 / 24; difference_in_days = Math.ceil(difference_in_days); if (difference_in_days <= 7) var days_ago = '&nbsp;(' + difference_in_days + '&nbsp;days&nbsp;ago)'; else var days_ago = ''; var date = year + '-' + month + '-' + day + ',&nbsp;' + day_of_the_week + days_ago + ' (' + today.getTime() - time.getTime() + ': ' + time.getFullYear() + '-' + time.getMonth() + '-' + time.getDate() + ')'; } // 2001-01-01, 12:00 am (UTC-5) return '<span style="font-size: 90%;">' + date + ',&nbsp;' + hour + ':' + minute + '&nbsp;' + ampm + '&nbsp;(UTC' + utc_offset + ')</span>' } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); rlhwplhbg8iseq7xouwnubamrb1pdos 14600 14599 2008-02-29T08:14:46Z Gary King 3640 fixing 14600 javascript text/javascript function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today.setHours(0); today.setMinutes(0); today.setSeconds(0); time.setHours(0); time.setMinutes(0); time.setSeconds(0); var difference_in_milliseconds = today.getTime() - time.getTime(); var difference_in_days = difference_in_milliseconds / 1000 / 60 / 60 / 24; difference_in_days = Math.ceil(difference_in_days); if (difference_in_days <= 7) var days_ago = '&nbsp;(' + difference_in_days + '&nbsp;days&nbsp;ago)'; else var days_ago = ''; var date = year + '-' + month + '-' + day + ',&nbsp;' + day_of_the_week + days_ago + ' (' + today.getTime() + ':' + time.getTime() + ': ' + time.getFullYear() + '-' + time.getMonth() + '-' + time.getDate() + ')'; } // 2001-01-01, 12:00 am (UTC-5) return '<span style="font-size: 90%;">' + date + ',&nbsp;' + hour + ':' + minute + '&nbsp;' + ampm + '&nbsp;(UTC' + utc_offset + ')</span>' } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); cscy8zgk0z2irbfxgsfc60v4uzfa8q2 14601 14600 2008-02-29T08:16:46Z Gary King 3640 fixing 14601 javascript text/javascript function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today.setHours(0); today.setMinutes(0); today.setSeconds(0); time.setHours(0); time.setMinutes(0); time.setSeconds(0); var difference_in_milliseconds = today.getTime() - time.getTime(); var difference_in_days = difference_in_milliseconds / 1000 / 60 / 60 / 24; difference_in_days = Math.round(difference_in_days); if (difference_in_days <= 7) var days_ago = '&nbsp;(' + difference_in_days + '&nbsp;days&nbsp;ago)'; else var days_ago = ''; var date = year + '-' + month + '-' + day + ',&nbsp;' + day_of_the_week + days_ago; } // 2001-01-01, 12:00 am (UTC-5) return '<span style="font-size: 90%;">' + date + ',&nbsp;' + hour + ':' + minute + '&nbsp;' + ampm + '&nbsp;(UTC' + utc_offset + ')</span>' } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); 7lwtlvboqlekhxtx8p6ajwjtkmp6yqe 14602 14601 2008-02-29T16:12:31Z Gary King 3640 fixing 14602 javascript text/javascript function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today.setHours(0); today.setMinutes(0); today.setSeconds(0); time.setHours(0); time.setMinutes(0); time.setSeconds(0); var difference_in_milliseconds = today.getTime() - time.getTime(); var difference_in_days = difference_in_milliseconds / 1000 / 60 / 60 / 24; difference_in_days = Math.round(difference_in_days); var days_ago = ' (' + difference_in_days + ' days ago)'; if (difference_in_days <= 7) var last = 'last '; else var last = ''; var date = year + '-' + month + '-' + day + ', ' + last + day_of_the_week + days_ago; } // 2001-01-01, 12:00 am (UTC-5) var return_date = '<span style="font-size: 90%;">' + date + ', ' + hour + ':' + minute + ' ' + ampm + ' (UTC' + utc_offset + ')</span>' return return_date.replace(' ', '&nbsp;'); } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); jbmngokclfzccr74ic0aa5fdq6jfk52 14603 14602 2008-02-29T16:13:31Z Gary King 3640 fixing 14603 javascript text/javascript function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today.setHours(0); today.setMinutes(0); today.setSeconds(0); time.setHours(0); time.setMinutes(0); time.setSeconds(0); var difference_in_milliseconds = today.getTime() - time.getTime(); var difference_in_days = difference_in_milliseconds / 1000 / 60 / 60 / 24; difference_in_days = Math.round(difference_in_days); var days_ago = ' (' + difference_in_days + ' days ago)'; if (difference_in_days <= 7) var last = 'last '; else var last = ''; var date = year + '-' + month + '-' + day + ', ' + last + day_of_the_week + days_ago; } // 2001-01-01, 12:00 am (UTC-5) var return_date = date + ', ' + hour + ':' + minute + ' ' + ampm + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;">' + return_date.replace(' ', '&nbsp;') + '</span>'; } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); 1hbbpi7638yn1fqing4sf04puc94ow5 14604 14603 2008-02-29T16:21:12Z Gary King 3640 fixing 14604 javascript text/javascript function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var difference_in_milliseconds = today.getTime() - time.getTime(); var difference_in_days = difference_in_milliseconds / 1000 / 60 / 60 / 24; difference_in_days = Math.round(difference_in_days); if (difference_in_days <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var days_ago = ' (' + difference_in_days + ' days ago)'; var date = year + '-' + month + '-' + day + ', ' + last + day_of_the_week + days_ago; } // 2001-01-01, 12:00 am (UTC-5) var return_date = date + ', ' + hour + ':' + minute + ' ' + ampm + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;">' + return_date.replace(' ', '&nbsp;') + '</span>'; } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); j3aw7dd1pvi6h0mtbmh04flx3ejnhit 14605 14604 2008-02-29T16:39:47Z Gary King 3640 fixing 14605 javascript text/javascript function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); if (difference.getYear() - 70 > 0) var years_ago = (difference.getYear() - 70) + ' years ago'; else var years_ago = ''; if (difference.getMonth() > 0) var months_ago = difference.getMonth() + ' months ago'; else var months_ago = ''; if (difference.getDate() > 0) var days_ago = difference.getDate() + ' days ago'; else var days_ago = ''; var days_ago = ' (' + years_ago + months_ago + days_ago + ' days ago)'; var date = year + '-' + month + '-' + day + ', ' + last + day_of_the_week + days_ago; } // 2001-01-01, 12:00 am (UTC-5) var return_date = date + ', ' + hour + ':' + minute + ' ' + ampm + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;">' + return_date.replace(' ', '&nbsp;') + '</span>'; } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); kh6osrs2cusnku2s89kb6ri0e6atdk7 14606 14605 2008-02-29T16:46:11Z Gary King 3640 fixing 14606 javascript text/javascript function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); if (difference.getYear() - 70 > 0) var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; else var years_ago = ''; if (difference.getMonth() > 0) var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; else var months_ago = ''; if (difference.getDate() > 0) var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; else var days_ago = ''; var days_ago = ' (' + years_ago + months_ago + days_ago + ' days ago)'; var date = year + '-' + month + '-' + day + ', ' + last + day_of_the_week + days_ago; } // 2001-01-01, 12:00 am (UTC-5) var return_date = date + ', ' + hour + ':' + minute + ' ' + ampm + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;">' + return_date.replace(' ', '&nbsp;') + '</span>'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); edvqqj85weyo3ro5q351j3dgq6jvl6m 14607 14606 2008-02-29T16:49:17Z Gary King 3640 fixing 14607 javascript text/javascript function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference[] = years_ago; } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference[] = months_ago; } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference[] = days_ago; } var days_ago = ' (' + descriptive_difference.join(', ') + ')'; var date = year + '-' + month + '-' + day + ', ' + last + day_of_the_week + days_ago; } // 2001-01-01, 12:00 am (UTC-5) var return_date = date + ', ' + hour + ':' + minute + ' ' + ampm + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;">' + return_date.replace(' ', '&nbsp;') + '</span>'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); 3wxp7mgazdsd55cri4kgksg9fw0s11h 14608 14607 2008-02-29T16:51:37Z Gary King 3640 fixing 14608 javascript text/javascript function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); if (difference.getYear() - 70 > 0) var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; if (difference.getMonth() > 0) var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; if (difference.getDate() > 0) var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; var descriptive_difference = [years_ago, months_ago, days_ago] var days_ago = ' (' + descriptive_difference.join(', ') + ')'; var date = year + '-' + month + '-' + day + ', ' + last + day_of_the_week + days_ago; } // 2001-01-01, 12:00 am (UTC-5) var return_date = date + ', ' + hour + ':' + minute + ' ' + ampm + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;">' + return_date.replace(' ', '&nbsp;') + '</span>'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); gh0bx6yjv0o4yczxktrfose1x9nip72 14609 14608 2008-02-29T16:55:40Z Gary King 3640 fixing 14609 javascript text/javascript function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? new_today = new Date(today.getYear(), today.getMonth(), today.getDate()); new_time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = new_today.getTime() - new_time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(new_today.valueOf() - new_time.valueOf()); if (difference.getYear() - 70 > 0) var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; if (difference.getMonth() > 0) var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; if (difference.getDate() > 0) var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; var descriptive_difference = [years_ago, months_ago, days_ago] var days_ago = ' (' + descriptive_difference.join(', ') + ')'; var date = year + '-' + month + '-' + day + ', ' + last + day_of_the_week + days_ago; } // 2001-01-01, 12:00 am (UTC-5) var return_date = date + ', ' + hour + ':' + minute + ' ' + ampm + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;">' + return_date.replace(' ', '&nbsp;') + '</span>'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); eayzqyg1d433q7vri18ucqiil6y5m3h 14610 14609 2008-02-29T16:56:03Z Gary King 3640 fixing 14610 javascript text/javascript function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); if (difference.getYear() - 70 > 0) var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; if (difference.getMonth() > 0) var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; if (difference.getDate() > 0) var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; var descriptive_difference = [years_ago, months_ago, days_ago] var days_ago = ' (' + descriptive_difference.join(', ') + ')'; var date = year + '-' + month + '-' + day + ', ' + last + day_of_the_week + days_ago; } // 2001-01-01, 12:00 am (UTC-5) var return_date = date + ', ' + hour + ':' + minute + ' ' + ampm + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;">' + return_date.replace(' ', '&nbsp;') + '</span>'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); gh0bx6yjv0o4yczxktrfose1x9nip72 14611 14610 2008-02-29T16:56:54Z Gary King 3640 fixing 14611 javascript text/javascript function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); if (difference.getYear() - 70 > 0) var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; if (difference.getMonth() > 0) var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; if (difference.getDate() > 0) var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; var descriptive_difference = [years_ago, months_ago, days_ago] var date = year + '-' + month + '-' + day + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } // 2001-01-01, 12:00 am (UTC-5) var return_date = date + ', ' + hour + ':' + minute + ' ' + ampm + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;">' + return_date.replace(' ', '&nbsp;') + '</span>'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); rhh3apydqunbtb2ahbwu449l0gdyruv 14612 14611 2008-02-29T16:58:44Z Gary King 3640 fixing 14612 javascript text/javascript function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); if (difference.getYear() - 70 > 0) var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; if (difference.getMonth() > 0) var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; if (difference.getDate() > 0) var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; var descriptive_difference = [years_ago, months_ago, days_ago] var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } // 2001-01-01, 12:00 am (UTC-5) var return_date = date + ', ' + hour + ':' + minute + ' ' + ampm + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;">' + return_date.replace(' ', '&nbsp;') + '</span>'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); atf9clh2rw8c1r2kxqoakypy3lotqwr 14613 14612 2008-02-29T17:01:03Z Gary King 3640 fixing 14613 javascript text/javascript addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); if (difference.getYear() - 70 > 0) var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; if (difference.getMonth() > 0) var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; if (difference.getDate() > 0) var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; var descriptive_difference = [years_ago, months_ago, days_ago] var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } // 2001-01-01, 12:00 am (UTC-5) var return_date = date + ', ' + hour + ':' + minute + ' ' + ampm + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;">' + return_date.replace(' ', '&nbsp;') + '</span>'; } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } rkypr2k25k1wm46sh9vay5iezue5cwg 14614 14613 2008-02-29T17:05:16Z Gary King 3640 fixing 14614 javascript text/javascript addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); if (difference.getYear() - 70 > 0) var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; if (difference.getMonth() > 0) var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; if (difference.getDate() > 0) var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; var descriptive_difference = [years_ago, months_ago, days_ago] var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } // 2001-01-01, 12:00 am (UTC-5) var return_date = date + ', ' + hour + ':' + minute + ' ' + ampm + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;">' + return_date.replaceAll(' ', '&nbsp;') + '</span>'; } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } kor7qe3wjleskbonr5kiidywzlz2i08 14615 14614 2008-02-29T17:06:19Z Gary King 3640 fixing 14615 javascript text/javascript addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); if (difference.getYear() - 70 > 0) var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; if (difference.getMonth() > 0) var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; if (difference.getDate() > 0) var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; var descriptive_difference = [years_ago, months_ago, days_ago] var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } // 2001-01-01, 12:00 am (UTC-5) var return_date = date + ', ' + hour + ':' + minute + ' ' + ampm + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } k42wzcp98ktv7ku2f7w9ryglpwn7ivo 14616 14615 2008-02-29T17:07:31Z Gary King 3640 fixing 14616 javascript text/javascript addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); if (difference.getYear() - 70 > 0) var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; if (difference.getMonth() > 0) var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; if (difference.getDate() > 0) var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; var descriptive_difference = [years_ago, months_ago, days_ago] var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } // 2001-01-01, 12:00 am (UTC-5) var return_date = date + ', ' + hour + ':' + minute + ' ' + ampm + ' (UTC' + utc_offset + ')'; // return_date = return_date.replace(/ /g, '&nbsp;'); return '<span style="font-size: 90%;">' + return_date + '</span>'; } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } azdfmuncvb6iyj472t7zrgnn908vm91 14617 14616 2008-02-29T17:08:39Z Gary King 3640 fixing 14617 javascript text/javascript addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); if (difference.getYear() - 70 > 0) var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; if (difference.getMonth() > 0) var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; if (difference.getDate() > 0) var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; var descriptive_difference = [years_ago, months_ago, days_ago] var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } // 2001-01-01, 12:00 am (UTC-5) var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time.replace(/ /g, '&nbsp;') + ' (UTC' + utc_offset + ')'; // return_date = return_date.replace(/ /g, '&nbsp;'); return '<span style="font-size: 90%;">' + return_date + '</span>'; } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } famdpm0cxfu45l90k2stoudco61ahpa 14618 14617 2008-02-29T17:12:06Z Gary King 3640 fixing 14618 javascript text/javascript addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } // 2001-01-01, 12:00 am (UTC-5) var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time.replace(/ /g, '&nbsp;') + ' (UTC' + utc_offset + ')'; // return_date = return_date.replace(/ /g, '&nbsp;'); return '<span style="font-size: 90%;">' + return_date + '</span>'; } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 0ldeblyk225dlow2f809nkt40bbhmoi 14619 14618 2008-03-04T05:30:14Z Gary King 3640 fixing 14619 javascript text/javascript addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == 00) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } // 2001-01-01, 12:00 am (UTC-5) var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time.replace(/ /g, '&nbsp;') + ' (UTC' + utc_offset + ')'; // return_date = return_date.replace(/ /g, '&nbsp;'); return '<span style="font-size: 90%;">' + return_date + '</span>'; } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 47d3oq67035xfv0d03u6j1wqf0xmwd3 14620 14619 2008-03-04T05:30:57Z Gary King 3640 fixing 14620 javascript text/javascript addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour < 1) alert(hour); if (hour == 0) hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } // 2001-01-01, 12:00 am (UTC-5) var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time.replace(/ /g, '&nbsp;') + ' (UTC' + utc_offset + ')'; // return_date = return_date.replace(/ /g, '&nbsp;'); return '<span style="font-size: 90%;">' + return_date + '</span>'; } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } q6uqvf37rqo1evu9ahlrvu5uae8awvc 14621 14620 2008-03-04T05:31:16Z Gary King 3640 fixing 14621 javascript text/javascript addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == '00') hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } // 2001-01-01, 12:00 am (UTC-5) var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time.replace(/ /g, '&nbsp;') + ' (UTC' + utc_offset + ')'; // return_date = return_date.replace(/ /g, '&nbsp;'); return '<span style="font-size: 90%;">' + return_date + '</span>'; } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } dr5a3lk5masttlmxseh5xpkxmsiemlx 14622 14621 2008-04-02T16:26:03Z Gary King 3640 fixing 14622 javascript text/javascript addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == '00') hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } // 2001-01-01, 12:00 am (UTC-5) var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time.replace(/ /g, '&nbsp;') + ' (UTC' + utc_offset + ')'; // return_date = return_date.replace(/ /g, '&nbsp;'); return '<span style="font-size: 90%;">' + return_date + '</span>'; } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } iettweg9k1guvm8zvjdnnt9y49mr4o9 14623 14622 2008-04-02T17:14:23Z Gary King 3640 fixing 14623 javascript text/javascript addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == '00') hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } // 2001-01-01, 12:00 am (UTC-5) var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time.replace(/ /g, '&nbsp;') + ' (UTC' + utc_offset + ')'; // return_date = return_date.replace(/ /g, '&nbsp;'); return '<span style="font-size: 90%;" title="' + str + '">' + return_date + '</span>'; } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } g0qkwkkuwvx9z3tj6vk5sid7ojn7pks 14624 14623 2008-04-02T17:29:59Z Gary King 3640 fixing 14624 javascript text/javascript addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == '00') hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } // 2001-01-01, 12:00 am (UTC-5) var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time.replace(/ /g, '&nbsp;') + ' (UTC' + utc_offset + ')'; // return_date = return_date.replace(/ /g, '&nbsp;'); return '<span style="font-size: 90%;" title="' + str + '">' + return_date + '</span>'; } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } e9lmx9wl2fti217mejnyfle45pjnstk 14625 14624 2008-04-02T17:30:32Z Gary King 3640 fixing 14625 javascript text/javascript addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == '00') hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } // 2001-01-01, 12:00 am (UTC-5) var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time.replace(/ /g, '&nbsp;') + ' (UTC' + utc_offset + ')'; // return_date = return_date.replace(/ /g, '&nbsp;'); return '<span style="font-size: 90%;" title="' + str + '">' + return_date + '</span>'; } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 07pe405o1b5wmvpwa543sxrrp519hpk 14626 14625 2008-04-02T17:31:24Z Gary King 3640 fixing 14626 javascript text/javascript addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == '00') hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } // 2001-01-01, 12:00 am (UTC-5) var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time.replace(/ /g, '&nbsp;') + ' (UTC' + utc_offset + ')'; // return_date = return_date.replace(/ /g, '&nbsp;'); return '<span style="font-size: 90%;" title="' + str + '">' + return_date + '</span>'; } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } ffvb22q9vewgndxh7yzvns92ojjnoaa 14627 14626 2008-04-02T17:34:00Z Gary King 3640 fixing 14627 javascript text/javascript addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == '00') hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } // 2001-01-01, 12:00 am (UTC-5) var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time.replace(/ /g, '&nbsp;') + ' (UTC' + utc_offset + ')'; // return_date = return_date.replace(/ /g, '&nbsp;'); return '<span style="font-size: 90%;" title="' + str + '">' + return_date + '</span>' + '(<span title="' + month + ' / ' + monthToNum(month) + '">debug</span>)'; } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } ref7x9gyagnxc2t8ow4cm2qgo1mukbv 14628 14627 2008-04-02T17:34:41Z Gary King 3640 fixing 14628 javascript text/javascript addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == '00') hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } // 2001-01-01, 12:00 am (UTC-5) var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time.replace(/ /g, '&nbsp;') + ' (UTC' + utc_offset + ')'; // return_date = return_date.replace(/ /g, '&nbsp;'); return '<span style="font-size: 90%;" title="' + str + '">' + return_date + ' (<span title="' + month + ' / ' + monthToNum(month) + '">debug</span>)' + '</span>'; } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } a28mjofyymd2s9b9u66qi9u0d6j90vu 14629 14628 2008-04-02T17:39:29Z Gary King 3640 fixing 14629 javascript text/javascript addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == '00') hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time.replace(/ /g, '&nbsp;') + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date + ' (<span title="">debug</span>)' + '</span>'; } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } a0qib0icoluhf5navfjiw3u6xqhio04 14630 14629 2008-04-02T17:40:33Z Gary King 3640 fixing 14630 javascript text/javascript addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == '00') hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time.replace(/ /g, '&nbsp;') + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date + ' (<span title="' + old_day + ' / ' + day + '">debug</span>)' + '</span>'; } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } rre0hyv0s8uwa3otwx3qx65j9w3h1w9 14631 14630 2008-04-02T17:48:27Z Gary King 3640 fixing 14631 javascript text/javascript addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == '00') hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time.replace(/ /g, '&nbsp;') + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date + '</span>'; // + ' (<span title="' + old_day + ' / ' + day + '">debug</span>)' } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } rxrfs9fpifb8i2f8ebpwln470owh5aa 14632 14631 2008-04-02T19:08:14Z Gary King 3640 fixing 14632 javascript text/javascript addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == '00') hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time.replace(/ /g, '&nbsp;') + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date + ' (<span title="' + old_month + ' / ' + month + '">debug</span>)' + '</span>'; } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } hfzwongcoe7achg2pa307dtl7vtn6u6 14633 14632 2008-04-02T19:09:27Z Gary King 3640 fixing 14633 javascript text/javascript addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == '00') hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time.replace(/ /g, '&nbsp;') + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date + ' (<span title="' + old_day + ' / ' + day + '">debug</span>)' + '</span>'; } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } rre0hyv0s8uwa3otwx3qx65j9w3h1w9 14634 14633 2008-04-02T19:12:47Z Gary King 3640 fixing 14634 javascript text/javascript addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); if (old_day == '31' && old_hour < abs(utc_offset)) var day = '30'; else var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == '00') hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time.replace(/ /g, '&nbsp;') + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date + ' (<span title="' + old_day + ' / ' + day + '">debug</span>)' + '</span>'; } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } tdpeu9rhcd38vsbsmtsnx80qs7r829y 14635 14634 2008-04-02T19:13:13Z Gary King 3640 fixing 14635 javascript text/javascript addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); if (old_day == '31' && old_hour < Math.abs(utc_offset)) var day = '30'; else var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == '00') hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time.replace(/ /g, '&nbsp;') + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date + ' (<span title="' + old_day + ' / ' + day + '">debug</span>)' + '</span>'; } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } nwwux9gs6zjaglr2jay69v1ccc0kp93 14636 14635 2008-04-02T19:14:22Z Gary King 3640 fixing 14636 javascript text/javascript addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); if (old_day == '31' && old_hour < Math.abs(utc_offset)) { var month = monthToNum(old_month); var day = '30'; } else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == '00') hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time.replace(/ /g, '&nbsp;') + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date + ' (<span title="' + old_day + ' / ' + day + '">debug</span>)' + '</span>'; } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } go6gers5vngpmxdwtgl1nq2hqv14grp 14637 14636 2008-04-02T19:14:50Z Gary King 3640 fixing 14637 javascript text/javascript addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); if (old_day == '31' && old_hour < Math.abs(utc_offset)) { var month = leading_zero(monthToNum(old_month) + 1); var day = '30'; } else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == '00') hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time.replace(/ /g, '&nbsp;') + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date + ' (<span title="' + old_day + ' / ' + day + '">debug</span>)' + '</span>'; } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } l7992ca7ke79f1mgztka7xjr4xi545f 14638 14637 2008-04-02T19:17:30Z Gary King 3640 fixing 14638 javascript text/javascript addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; }addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == '00') hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time.replace(/ /g, '&nbsp;') + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date + ' (<span title="' + old_day + ' / ' + day + '">debug</span>)' + '</span>'; } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); if (old_day == '31' && old_hour < Math.abs(utc_offset)) { var month = leading_zero(monthToNum(old_month) + 1); var day = '30'; } else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == '00') hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time.replace(/ /g, '&nbsp;') + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date + ' (<span title="' + old_day + ' / ' + day + '">debug</span>)' + '</span>'; } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 5xtwr3d0bnn8s1ut5bmmxxlq644sh4x 14639 14638 2008-04-02T19:17:55Z Gary King 3640 fixing 14639 javascript text/javascript addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == '00') hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time.replace(/ /g, '&nbsp;') + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date + ' (<span title="' + old_day + ' / ' + day + '">debug</span>)' + '</span>'; } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } jl4x3nv49hbuwju7gmeqql9i79dkk45 14640 14639 2008-04-02T19:20:54Z Gary King 3640 fixing 14640 javascript text/javascript addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == '00') hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time.replace(/ /g, '&nbsp;') + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date + ' (<span title="' + utc_offset + '">debug</span>)' + '</span>'; } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } j6nymabh4ma45r0zrvi6ndyh5i5hxl8 14641 14640 2008-04-03T22:36:57Z Gary King 3640 fixing 14641 javascript text/javascript addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == '00') hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time.replace(/ /g, '&nbsp;') + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date + '</span>'; // + ' (<span title="' + utc_offset + '">debug</span>)' } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } aq1auok9ie6g5vn0rmvxcgqcopc9g0d 14642 14641 2008-04-17T19:50:45Z Gary King 3640 remove if 14642 javascript text/javascript addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; // if (hour == '00') // hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time.replace(/ /g, '&nbsp;') + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date + '</span>'; // + ' (<span title="' + utc_offset + '">debug</span>)' } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } k7w0n5m4ofepkac1kv3f5ekm4wknk0j 14643 14642 2008-04-17T19:51:38Z Gary King 3640 readd 14643 javascript text/javascript addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time.replace(/ /g, '&nbsp;') + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date + '</span>'; // + ' (<span title="' + utc_offset + '">debug</span>)' } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } ol4f06sxk9nqv8nct3np1nmirk0vuc9 14644 14643 2008-04-25T06:32:32Z Gary King 3640 adding non-breaking spaces for the entire string 14644 javascript text/javascript addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; // + ' (<span title="' + utc_offset + '">debug</span>)' } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } fz3lpvbbdix5uicdwqxr1b29q4gi0zb 14645 14644 2008-04-27T02:42:02Z Gary King 3640 work for Edit pages as well 14645 javascript text/javascript addOnloadHook(function() { if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0 || document.title.indexOf("Editing ") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; // + ' (<span title="' + utc_offset + '">debug</span>)' } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } n6rg7b6rflswb0r3953l5dr0ql4skho 14646 14645 2008-04-27T02:42:49Z Gary King 3640 [[WP:UNDO|Undid]] revision 208447270 by [[Special:Contributions/Gary King|Gary King]] ([[User talk:Gary King|talk]]) actually, don't do that otherwise people might get confused 14646 javascript text/javascript addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; // + ' (<span title="' + utc_offset + '">debug</span>)' } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } fz3lpvbbdix5uicdwqxr1b29q4gi0zb 14647 14646 2008-04-30T10:29:15Z Gary King 3640 switching to using wgCanonicalNamespace 14647 javascript text/javascript addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; // if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) if (wgCanonicalNamespace == 'Talk' || wgCanonicalNamespace == 'Project' || wgCanonicalNamespace == 'User') { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; // + ' (<span title="' + utc_offset + '">debug</span>)' } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } foy2n23oiedqttl2b49squi827cbvag 14648 14647 2008-04-30T10:42:15Z Gary King 3640 adding Project_talk 14648 javascript text/javascript addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; // if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) if (wgCanonicalNamespace == 'Project' || wgCanonicalNamespace == 'Project_talk' || wgCanonicalNamespace == 'Talk' || wgCanonicalNamespace == 'User' || wgCanonicalNamespace == 'User_talk') { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; // + ' (<span title="' + utc_offset + '">debug</span>)' } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } medwtbbu3pddq00se7xvgrrpcg52t5n 14649 14648 2008-04-30T11:53:31Z Gary King 3640 updating 14649 javascript text/javascript addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0 || document.location.href.indexOf("action=history") != -1) return; var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; // + ' (<span title="' + utc_offset + '">debug</span>)' } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } tab7w11xwy7fdts1pebqj9hcrvwzu18 14650 14649 2008-04-30T21:28:34Z Gary King 3640 edit 14650 javascript text/javascript addOnloadHook(function() { if (document.location.href.indexOf("action=edit") != -1 || document.location.href.indexOf("action=history") != -1) return; var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; // + ' (<span title="' + utc_offset + '">debug</span>)' } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } f6hkdpwccu7spjam0yorui6ndqojw5b 14651 14650 2008-04-30T21:29:30Z Gary King 3640 disable for logs 14651 javascript text/javascript addOnloadHook(function() { if (document.location.href.indexOf("action=edit") != -1 || document.location.href.indexOf("action=history") != -1 || document.location.href.indexOf('title=Special:Log') != -1) return; var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; // + ' (<span title="' + utc_offset + '">debug</span>)' } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 24qudyc1corqh50o8loglpc2sb9lchs 14652 14651 2008-05-01T18:16:46Z Gary King 3640 use an array 14652 javascript text/javascript addOnloadHook(function() { var disabled_urls = new Array('&diff=', 'action=edit', 'action=history', 'title=Special:Log'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; // + ' (<span title="' + utc_offset + '">debug</span>)' } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } acyydpgiedkwoq5uv033itiahstgaz0 14653 14652 2008-05-01T18:18:48Z Gary King 3640 cl 14653 javascript text/javascript addOnloadHook(function() { var disabled_urls = new Array('&diff=', 'action=edit', 'action=history', 'title=Special:Log'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } document.getElementById("bodyContent").innerHTML = document.getElementById("bodyContent").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; // + ' (<span title="' + utc_offset + '">debug</span>)' } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } e3zg1vqc9lyumuynzm3zgaia61mginn 14654 14653 2008-05-01T18:41:51Z Gary King 3640 readding to diff pages 14654 javascript text/javascript addOnloadHook(function() { var disabled_urls = new Array('action=edit', 'action=history', 'title=Special:Log'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } document.getElementById("bodyContent").innerHTML = document.getElementById("bodyContent").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; // + ' (<span title="' + utc_offset + '">debug</span>)' } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 1ppyzezlyyxr5nnz3p68yhhi0yjc5er 14655 14654 2008-05-01T19:04:48Z Gary King 3640 fixing major issue with previews 14655 javascript text/javascript addOnloadHook(function() { var disabled_urls = new Array('action=edit', 'action=history', 'title=Special:Log', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } document.getElementById("bodyContent").innerHTML = document.getElementById("bodyContent").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; // + ' (<span title="' + utc_offset + '">debug</span>)' } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } iw0x6a27yez4yiq2rp7nau930kmleag 14656 14655 2008-05-01T19:39:46Z Gary King 3640 works for previews 14656 javascript text/javascript addOnloadHook(function() { var disabled_urls = new Array('action=history', 'title=Special:Log'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } document.getElementById(unique_url ? unique_url : 'bodyContent').innerHTML = document.getElementById("bodyContent").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; // + ' (<span title="' + utc_offset + '">debug</span>)' } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } bdkr8hsz13jnevmbe3897z6a69x6y4p 14657 14656 2008-05-01T19:41:14Z Gary King 3640 test 14657 javascript text/javascript addOnloadHook(function() { var disabled_urls = new Array('action=history', 'title=Special:Log'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } alert(unique_url); document.getElementById(unique_url ? unique_url : 'bodyContent').innerHTML = document.getElementById("bodyContent").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; // + ' (<span title="' + utc_offset + '">debug</span>)' } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } dn2fkp58sevucpvfwt7d9b2m9o8gkgf 14658 14657 2008-05-01T19:43:16Z Gary King 3640 update 14658 javascript text/javascript addOnloadHook(function() { var disabled_urls = new Array('action=history', 'title=Special:Log'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } document.getElementById(unique_url ? unique_url : 'bodyContent').innerHTML = document.getElementById("bodyContent").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; // + ' (<span title="' + utc_offset + '">debug</span>)' } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } bdkr8hsz13jnevmbe3897z6a69x6y4p 14659 14658 2008-05-01T19:44:19Z Gary King 3640 update 14659 javascript text/javascript addOnloadHook(function() { var disabled_urls = new Array('action=history', 'title=Special:Log'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } document.getElementById((unique_url ? unique_url : 'bodyContent')).innerHTML = document.getElementById("bodyContent").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; // + ' (<span title="' + utc_offset + '">debug</span>)' } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } d6eh6gr2i5dnzqmj8qbt6xzzb7thhq6 14660 14659 2008-05-01T19:44:43Z Gary King 3640 update 14660 javascript text/javascript addOnloadHook(function() { var disabled_urls = new Array('action=history', 'title=Special:Log'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } document.getElementById('bodyContent').innerHTML = document.getElementById("bodyContent").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; // + ' (<span title="' + utc_offset + '">debug</span>)' } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } grxrz23aeedfij0ubxuv30gdk2xcjdk 14661 14660 2008-05-01T19:45:09Z Gary King 3640 update 14661 javascript text/javascript addOnloadHook(function() { var disabled_urls = new Array('action=history', 'title=Special:Log'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } document.getElementById(unique_url ? unique_url : 'bodyContent').innerHTML = document.getElementById(unique_url ? unique_url : 'bodyContent').innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; // + ' (<span title="' + utc_offset + '">debug</span>)' } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } b6863enmgb0r603rwkcnchvvy7hw6cr 14662 14661 2008-05-02T06:03:19Z Gary King 3640 using a var, "element_id" 14662 javascript text/javascript addOnloadHook(function() { var disabled_urls = new Array('action=history', 'title=Special:Log'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; // + ' (<span title="' + utc_offset + '">debug</span>)' } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } f8sd1f34sdlo0thowyyjbyhki1afgn9 14663 14662 2008-05-03T02:00:39Z Gary King 3640 comment 14663 javascript text/javascript addOnloadHook(function() { var disabled_urls = new Array('action=history', 'title=Special:Log'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; // document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; // + ' (<span title="' + utc_offset + '">debug</span>)' } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } tizzi9790at7ddzrh5c8aqihet5n6ob 14664 14663 2008-05-03T02:01:23Z Gary King 3640 cl 14664 javascript text/javascript addOnloadHook(function() { var disabled_urls = new Array('action=history', 'title=Special:Log'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; // + ' (<span title="' + utc_offset + '">debug</span>)' } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } f8sd1f34sdlo0thowyyjbyhki1afgn9 14665 14664 2008-05-03T02:07:32Z Gary King 3640 column content 14665 javascript text/javascript addOnloadHook(function() { var disabled_urls = new Array('action=history', 'title=Special:Log'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'column-content'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; // + ' (<span title="' + utc_offset + '">debug</span>)' } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } bo7fklgh0c474rj5ooye1vb95uevnac 14666 14665 2008-05-03T02:08:05Z Gary King 3640 [[WP:UNDO|Undid]] revision 209826909 by [[Special:Contributions/Gary King|Gary King]] ([[User talk:Gary King|talk]]) 14666 javascript text/javascript addOnloadHook(function() { var disabled_urls = new Array('action=history', 'title=Special:Log'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; // + ' (<span title="' + utc_offset + '">debug</span>)' } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } f8sd1f34sdlo0thowyyjbyhki1afgn9 14667 14666 2008-05-03T02:12:07Z Gary King 3640 [[WP:UNDO|Undid]] revision 209826999 by [[Special:Contributions/Gary King|Gary King]] ([[User talk:Gary King|talk]]) 14667 javascript text/javascript addOnloadHook(function() { var disabled_urls = new Array('action=history', 'title=Special:Log'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'column-content'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; // + ' (<span title="' + utc_offset + '">debug</span>)' } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } bo7fklgh0c474rj5ooye1vb95uevnac 14668 14667 2008-05-03T02:13:03Z Gary King 3640 [[WP:UNDO|Undid]] revision 209827561 by [[Special:Contributions/Gary King|Gary King]] ([[User talk:Gary King|talk]]) 14668 javascript text/javascript addOnloadHook(function() { var disabled_urls = new Array('action=history', 'title=Special:Log'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; // + ' (<span title="' + utc_offset + '">debug</span>)' } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } f8sd1f34sdlo0thowyyjbyhki1afgn9 14669 14668 2008-05-03T02:14:58Z Gary King 3640 Reverted to revision 208447403 by [[Special:Contributions/Gary King|Gary King]]. 14669 javascript text/javascript addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; // + ' (<span title="' + utc_offset + '">debug</span>)' } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } fz3lpvbbdix5uicdwqxr1b29q4gi0zb 14670 14669 2008-05-03T02:16:20Z Gary King 3640 Reverted to revision 195739027 by [[Special:Contributions/Gary King|Gary King]]. 14670 javascript text/javascript addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); function adjustTime(str, hour, minute, day, month, year, offset, s) { var time = new Date(); time.setUTCHours(hour); time.setUTCMinutes(minute); time.setUTCDate(day); time.setUTCMonth(monthToNum(month)); time.setUTCFullYear(year); var year = time.getFullYear(); var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == '00') hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } // 2001-01-01, 12:00 am (UTC-5) var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time.replace(/ /g, '&nbsp;') + ' (UTC' + utc_offset + ')'; // return_date = return_date.replace(/ /g, '&nbsp;'); return '<span style="font-size: 90%;">' + return_date + '</span>'; } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num==0) {return "January";} else if (num==1) {return "February";} else if (num==2) {return "March";} else if (num==3) {return "April";} else if (num==4) {return "May";} else if (num==5) {return "June";} else if (num==6) {return "July";} else if (num==7) {return "August";} else if (num==8) {return "September";} else if (num==9) {return "October";} else if (num==10) {return "November";} else if (num==11) {return "December";} } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } dr5a3lk5masttlmxseh5xpkxmsiemlx 14671 14670 2008-05-03T02:16:43Z Gary King 3640 revert 14671 javascript text/javascript addOnloadHook(function() { var disabled_urls = new Array('action=history', 'title=Special:Log'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; // + ' (<span title="' + utc_offset + '">debug</span>)' } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } f8sd1f34sdlo0thowyyjbyhki1afgn9 14672 14671 2008-05-05T23:54:44Z Gary King 3640 Reverted to revision 209318628 by [[Special:Contributions/Gary King|Gary King]]. 14672 javascript text/javascript addOnloadHook(function() { if (document.location.href.indexOf("action=edit") != -1 || document.location.href.indexOf("action=history") != -1 || document.location.href.indexOf('title=Special:Log') != -1) return; var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; // + ' (<span title="' + utc_offset + '">debug</span>)' } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 24qudyc1corqh50o8loglpc2sb9lchs 14673 14672 2008-05-05T23:55:38Z Gary King 3640 Reverted to revision 203155326 by [[Special:Contributions/Gary King|Gary King]]. 14673 javascript text/javascript addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour == '00') hour = 12; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time.replace(/ /g, '&nbsp;') + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date + '</span>'; // + ' (<span title="' + utc_offset + '">debug</span>)' } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } aq1auok9ie6g5vn0rmvxcgqcopc9g0d 14674 14673 2008-05-05T23:56:30Z Gary King 3640 Reverted to revision 208447403 by [[Special:Contributions/Gary King|Gary King]]. 14674 javascript text/javascript addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; // + ' (<span title="' + utc_offset + '">debug</span>)' } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } fz3lpvbbdix5uicdwqxr1b29q4gi0zb 14675 14674 2008-05-05T23:57:54Z Gary King 3640 work for User 14675 javascript text/javascript addOnloadHook(function() { if (document.title.indexOf("Editing ") == 0) return; if (document.location.href.indexOf("action=history") != -1) return; if (document.title.indexOf("Talk:") == 0 || document.title.indexOf("talk:") != -1 || document.title.indexOf("Wikipedia:") == 0 || document.title.indexOf("User:") == 0) { var newDoc = document.getElementById("column-content").innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); document.getElementById("column-content").innerHTML = newDoc; } }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; // + ' (<span title="' + utc_offset + '">debug</span>)' } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 0quhr6fn3hiph8gfezjxu00hojc2ggq 14676 14675 2008-05-05T23:58:18Z Gary King 3640 revert 14676 javascript text/javascript addOnloadHook(function() { var disabled_urls = new Array('action=history', 'title=Special:Log'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; // + ' (<span title="' + utc_offset + '">debug</span>)' } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } f8sd1f34sdlo0thowyyjbyhki1afgn9 14677 14676 2008-05-06T00:05:37Z Gary King 3640 mv 14677 javascript text/javascript addOnloadHook(function() { var disabled_urls = new Array('action=history', 'title=Special:Log'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; // + ' (<span title="' + utc_offset + '">debug</span>)' } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } bxatol6hj2p9d5iq6gd7khbr9we045g 14678 14677 2008-05-06T00:13:50Z Gary King 3640 rm span 14678 javascript text/javascript addOnloadHook(function() { var disabled_urls = new Array('action=history', 'title=Special:Log'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return return_date.replace(/ /g, '&nbsp;'); // + ' (<span title="' + utc_offset + '">debug</span>)' } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } el9rham8d2pnl2yzwwz4ii2le9r66ll 14679 14678 2008-05-06T00:19:02Z Gary King 3640 readd span 14679 javascript text/javascript addOnloadHook(function() { var disabled_urls = new Array('action=history', 'title=Special:Log'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; // + ' (<span title="' + utc_offset + '">debug</span>)' } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } p96gopc0rphy0pndkaugtlw27randvb 14680 14679 2008-05-10T05:54:18Z Gary King 3640 disable for ALL Special: pages 14680 javascript text/javascript addOnloadHook(function() { var disabled_urls = new Array('action=history', 'Special:'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; // + ' (<span title="' + utc_offset + '">debug</span>)' } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } jrqudiodxewco7yx43kb6m04tjcxqzn 14681 14680 2008-05-27T02:19:46Z Gary King 3640 minor fix for special pages 14681 javascript text/javascript addOnloadHook(function() { var disabled_urls = new Array('action=history', '/Special:'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; // + ' (<span title="' + utc_offset + '">debug</span>)' } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } d9cerq8trexza7hkfsrwkvodpuf8hjf 14682 14681 2008-05-29T15:22:40Z Gary King 3640 adding more text to check in the URL 14682 javascript text/javascript addOnloadHook(function() { var disabled_urls = new Array('action=history', '/Special:', 'title=Special:'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; // + ' (<span title="' + utc_offset + '">debug</span>)' } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } function numToMonth(num) { if (num == 0) return 'January'; else if (num == 1) return 'February'; else if (num == 2) return 'March'; else if (num == 3) return 'April'; else if (num == 4) return 'May'; else if (num == 5) return 'June'; else if (num == 6) return 'July'; else if (num == 7) return 'August'; else if (num == 8) return 'September'; else if (num == 9) return 'October'; else if (num == 10) return 'November'; else if (num == 11) return 'December'; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 57tn2ia7thcykmk303nop9k0em5dgxu 14683 14682 2008-06-01T03:34:05Z Gary King 3640 removing code that did nothing 14683 javascript text/javascript addOnloadHook(function() { var disabled_urls = new Array('action=history', '/Special:', 'title=Special:'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour < Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 8a2yoi6g1oj1v8agk1y3jwvwck25wb0 14684 14683 2008-06-01T04:19:18Z Gary King 3640 fixing condition 14684 javascript text/javascript addOnloadHook(function() { var disabled_urls = new Array('action=history', '/Special:', 'title=Special:'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); // The following is for fringe cases if (old_day == '31' && old_hour >= Math.abs(utc_offset)) { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } // The above is for fringe cases else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } efqzd9jpyazfcqbdwpnl7owx212jl24 14685 14684 2008-06-01T04:23:08Z Gary King 3640 removing part of a conditional 14685 javascript text/javascript addOnloadHook(function() { var disabled_urls = new Array('action=history', '/Special:', 'title=Special:'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); if (old_day == '31') { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } oi6tizp8ypzx58v914gubi5zjxs9rbh 14686 14685 2008-06-02T03:18:00Z Gary King 3640 date testing 14686 javascript text/javascript addOnloadHook(function() { var disabled_urls = new Array('action=history', '/Special:', 'title=Special:'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; var d = new Date(); document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); var d2 = new Date(); alert(d2.getTime() - d.getTime()); }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); if (old_day == '31') { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 2yx5t0afbx7v1zfqrpuk9ib0lxh418h 14687 14686 2008-06-02T03:19:18Z Gary King 3640 removing 14687 javascript text/javascript addOnloadHook(function() { var disabled_urls = new Array('action=history', '/Special:', 'title=Special:'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); if (old_day == '31') { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } oi6tizp8ypzx58v914gubi5zjxs9rbh 14688 14687 2008-07-19T07:22:31Z Gary King 3640 removing from article namespace 14688 javascript text/javascript addOnloadHook(function() { if (wgNamespaceNumber == 0 or wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); if (old_day == '31') { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 5y5vnrv94nvq17n86igq98evyrogtgb 14689 14688 2008-07-19T07:24:01Z Gary King 3640 removing article one 14689 javascript text/javascript addOnloadHook(function() { // wgNamespaceNumber == 0 if (wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); if (old_day == '31') { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 42g5uj4lr4xlam9uqvwxjezrxdjbrh4 14690 14689 2008-07-19T07:26:38Z Gary King 3640 trying empty string 14690 javascript text/javascript addOnloadHook(function() { if (wgCanonicalNamespace == '' or wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); if (old_day == '31') { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } d152b03a2v9nd8bx7bdaguzg4mekh3s 14691 14690 2008-07-19T07:29:26Z Gary King 3640 adding article 14691 javascript text/javascript addOnloadHook(function() { if (wgCanonicalNamespace == 'Article' or wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); if (old_day == '31') { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 38uxm0tkga77oliqaixnzsxkkdfebis 14692 14691 2008-07-19T07:30:35Z Gary King 3640 blasted JS 14692 javascript text/javascript addOnloadHook(function() { if (wgCanonicalNamespace == 'Article' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); if (old_day == '31') { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 8vpc8hw4p7j536yeeeh3sibgqjj5xtm 14693 14692 2008-07-19T07:32:31Z Gary King 3640 empty? 14693 javascript text/javascript addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); if (old_day == '31') { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } k9gjc8rq5p1lpy06tvatrssqg4sg17v 14694 14693 2008-08-15T21:11:03Z Gary King 3640 adding mediawiki 14694 javascript text/javascript addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); if (old_day == '31') { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } else { var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 5oqkrlz5cpiiz4flkm8gvd9y8zrvhke 14695 14694 2008-08-31T06:25:42Z Gary King 3640 commenting out code 14695 javascript text/javascript addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(monthToNum(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); /* if (old_day == '31') { time.setMonth(monthToNum(old_month)); var month = leading_zero(monthToNum(old_month) + 1); time.setDate('30'); var day = '30'; } else {*/ var month = leading_zero(time.getMonth() + 1); var day = time.getDate(); // } var hour = leading_zero(parseInt(time.getHours())); var minute = leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function leading_zero(number) { if (number < 10) number = "0" + number return number } function monthToNum(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } nupxnswi8o5e07rmfziq7xs3v4eu2mq 14696 14695 2008-08-31T20:07:10Z Gary King 3640 renaming functions 14696 javascript text/javascript addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = "0" + number return number } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); /* if (old_day == '31') { time.setMonth(convert_month_to_number(old_month)); var month = add_leading_zero(convert_month_to_number(old_month) + 1); time.setDate('30'); var day = '30'; } else {*/ var month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); // } var hour = add_leading_zero(parseInt(time.getHours())); var minute = add_leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + add_leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function convert_month_to_number(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } idym5yc2w7qa5u3df0t6w6h8zsuwxub 14697 14696 2008-08-31T20:09:54Z Gary King 3640 add in some semicolons 14697 javascript text/javascript addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = "0" + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var year = time.getFullYear(); /* if (old_day == '31') { time.setMonth(convert_month_to_number(old_month)); var month = add_leading_zero(convert_month_to_number(old_month) + 1); time.setDate('30'); var day = '30'; } else {*/ var month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); // } var hour = add_leading_zero(parseInt(time.getHours())); var minute = add_leading_zero(time.getMinutes()); var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + add_leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function convert_month_to_number(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } t5j233suesl1po2dzbt8zynd1lfzvh6 14698 14697 2008-08-31T20:12:12Z Gary King 3640 comments 14698 javascript text/javascript addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = "0" + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // set the date bits to output var year = time.getFullYear(); var month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = add_leading_zero(parseInt(time.getHours())); var minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + add_leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function convert_month_to_number(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } dbmleai56i72gqc4yvoqeqaabfmp15k 14699 14698 2008-09-01T04:17:52Z Gary King 3640 try and fix 14699 javascript text/javascript addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } aaddOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = "0" + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); // set the date bits to output var year = time.getFullYear(); if (old_day == '31' && today.getDate() == '1') { time.setMonth(convert_month_to_number(old_month)); var month = add_leading_zero(convert_month_to_number(old_month) + 1); time.setDate('30'); var day = '30'; } else { var month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = add_leading_zero(parseInt(time.getHours())); var minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + add_leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function convert_month_to_number(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = "0" + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); // set the date bits to output var year = time.getFullYear(); if (old_day == '31' && today.getDate() == '1') { time.setMonth(convert_month_to_number(old_month)); var month = add_leading_zero(convert_month_to_number(old_month) + 1); time.setDate('30'); var day = '30'; } else { var month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = add_leading_zero(parseInt(time.getHours())); var minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + add_leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function convert_month_to_number(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } s5r5q0110xrj2sqr1iolxx37npra1y1 14700 14699 2008-09-01T04:18:37Z Gary King 3640 [[WP:UNDO|Undid]] revision 235519233 by [[Special:Contributions/Gary King|Gary King]] ([[User talk:Gary King|talk]]) 14700 javascript text/javascript addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = "0" + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // set the date bits to output var year = time.getFullYear(); var month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = add_leading_zero(parseInt(time.getHours())); var minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + add_leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function convert_month_to_number(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } dbmleai56i72gqc4yvoqeqaabfmp15k 14701 14700 2008-09-01T04:19:55Z Gary King 3640 try and fix 14701 javascript text/javascript addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = "0" + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); // set the date bits to output var year = time.getFullYear(); if (old_day == '31' && today.getDate() == '1') { time.setMonth(convert_month_to_number(old_month)); var month = add_leading_zero(convert_month_to_number(old_month) + 1); time.setDate('30'); var day = '30'; } else { var month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = add_leading_zero(parseInt(time.getHours())); var minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + add_leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function convert_month_to_number(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 7vizt33gsiw876ov9qgv553niwlsj8w 14702 14701 2008-09-01T04:21:08Z Gary King 3640 remove forced date 14702 javascript text/javascript addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = "0" + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); // set the date bits to output var year = time.getFullYear(); if (old_day == '31' && today.getDate() == '1') { time.setMonth(convert_month_to_number(old_month)); var month = add_leading_zero(convert_month_to_number(old_month) + 1); } else { var month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); } var hour = add_leading_zero(parseInt(time.getHours())); var minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + add_leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function convert_month_to_number(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 01g72h3rgjl9y6jjgzhmwn5m97z34vh 14703 14702 2008-09-01T04:22:05Z Gary King 3640 only keep month in the if 14703 javascript text/javascript addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = "0" + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); // set the date bits to output var year = time.getFullYear(); if (old_day == '31' && today.getDate() == '1') { time.setMonth(convert_month_to_number(old_month)); var month = add_leading_zero(convert_month_to_number(old_month) + 1); } else var month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = add_leading_zero(parseInt(time.getHours())); var minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + add_leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function convert_month_to_number(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } d2vpbk0n92b0y5ag52tzo3ej6k4k5fg 14704 14703 2008-09-01T04:23:13Z Gary King 3640 Reverted to revision 235437626 by [[Special:Contributions/Gary King|Gary King]]; restoring. 14704 javascript text/javascript addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = "0" + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // set the date bits to output var year = time.getFullYear(); var month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = add_leading_zero(parseInt(time.getHours())); var minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case var today = new Date(); // yesterday var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + add_leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function convert_month_to_number(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } dbmleai56i72gqc4yvoqeqaabfmp15k 14705 14704 2008-09-01T04:24:26Z Gary King 3640 moving today/yesterday up 14705 javascript text/javascript addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = "0" + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; var today = new Date(); var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); // set the date bits to output var year = time.getFullYear(); var month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = add_leading_zero(parseInt(time.getHours())); var minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + add_leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function convert_month_to_number(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } nnrjhr8brxbrd5j4q9gdfuu55jg8mev 14706 14705 2008-09-01T04:54:33Z Gary King 3640 moving up even more to let everyone benefit 14706 javascript text/javascript addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = "0" + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(); var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // set the date bits to output var year = time.getFullYear(); var month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = add_leading_zero(parseInt(time.getHours())); var minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + add_leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function convert_month_to_number(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } s9cf5lgkfsbc0h3k1q4h2pet9zj0cj2 14707 14706 2008-09-01T04:57:58Z Gary King 3640 fix 14707 javascript text/javascript addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = "0" + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(); var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // set the date bits to output var year = time.getFullYear(); var month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = add_leading_zero(parseInt(time.getHours())); var minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // Calculate as accurately as possible, difference in days and weeks var difference = new Date(today.valueOf() - time.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago'; descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago'; descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago'; descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + add_leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function convert_month_to_number(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } kkvnl5vsmepjqeyn194wi19ftaunhds 14708 14707 2008-11-22T03:20:53Z Gary King 3640 fixing duplicate "ago"s and future dates 14708 javascript text/javascript addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = "0" + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(); var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // set the date bits to output var year = time.getFullYear(); var month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = add_leading_zero(parseInt(time.getHours())); var minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // The difference between today and the timestamp var difference = ''; if (today.valueOf() >= time.valueOf()) difference = new Date(today.valueOf() - time.valueOf()); else if difference = new Date(time.valueOf() - today.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + add_leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ago)'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function convert_month_to_number(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } krn9fy8tviu63n9lytpbjhzuwjh893x 14709 14708 2008-11-22T03:22:12Z Gary King 3640 else 14709 javascript text/javascript addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = "0" + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(); var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // set the date bits to output var year = time.getFullYear(); var month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = add_leading_zero(parseInt(time.getHours())); var minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // The difference between today and the timestamp var difference = ''; if (today.valueOf() >= time.valueOf()) difference = new Date(today.valueOf() - time.valueOf()); else difference = new Date(time.valueOf() - today.valueOf()); var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + add_leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ago)'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function convert_month_to_number(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 92d54n5sx725f0xylz60z7syux7w8mi 14710 14709 2008-11-22T03:25:39Z Gary King 3640 fix the difference word 14710 javascript text/javascript addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = "0" + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(); var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // set the date bits to output var year = time.getFullYear(); var month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = add_leading_zero(parseInt(time.getHours())); var minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); if (days_ago <= 7) var last = 'last '; else var last = ''; // The difference between today and the timestamp var difference, difference_word = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(days_ago); } var date = year + '-' + month + '-' + add_leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function convert_month_to_number(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } n0m92s9h10lt355eql11opzi7vbfubx 14711 14710 2009-01-15T23:57:59Z Gary King 3640 removing "last" from future dates 14711 javascript text/javascript addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = "0" + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(); var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // set the date bits to output var year = time.getFullYear(); var month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = add_leading_zero(parseInt(time.getHours())); var minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); // The difference between today and the timestamp var difference, difference_word = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(days_ago); } if (days_ago <= 7 && difference_word == 'ago') var last = 'last '; else var last = ''; var date = year + '-' + month + '-' + add_leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function convert_month_to_number(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } q6t3kujbil14czygn22fpr0g04ylxkd 14712 14711 2009-01-16T00:01:51Z Gary King 3640 "new" 14712 javascript text/javascript addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = "0" + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(); var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // set the date bits to output var year = time.getFullYear(); var month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = add_leading_zero(parseInt(time.getHours())); var minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); // The difference between today and the timestamp var difference, difference_word = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } if (days_ago <= 7 && difference_word == 'ago') var last = 'last '; else var last = ''; var date = year + '-' + month + '-' + add_leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function convert_month_to_number(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } lb7thpsg1r8uq5y6jzwa9rinocnqff4 14713 14712 2009-01-16T00:06:47Z Gary King 3640 cleaner 14713 javascript text/javascript addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = "0" + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(); var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // set the date bits to output var year = time.getFullYear(); var month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = add_leading_zero(parseInt(time.getHours())); var minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } var date = year + '-' + month + '-' + add_leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function convert_month_to_number(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } t2izien6mofed1l4n2us9wbpimy63o6 14714 14713 2009-01-16T00:20:07Z Gary King 3640 "this" for future dates 14714 javascript text/javascript addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = "0" + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(); var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // set the date bits to output var year = time.getFullYear(); var month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = add_leading_zero(parseInt(time.getHours())); var minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } var date = year + '-' + month + '-' + add_leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function convert_month_to_number(month) { var tmp = new Date(month + " 1, 2006"); return tmp.getMonth(); } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } gzwnemiypblm63hm2gn5lfj91wm5ggq 14715 14714 2009-01-16T00:36:32Z Gary King 3640 use the first year of the millenium 14715 javascript text/javascript addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = "0" + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(); var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // set the date bits to output var year = time.getFullYear(); var month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = add_leading_zero(parseInt(time.getHours())); var minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } var date = year + '-' + month + '-' + add_leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function convert_month_to_number(month) { var tmp = new Date(month + " 1, 2001"); return tmp.getMonth(); } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } kyntselz2f9uw1fcaxxkbkw3nj1ualg 14716 14715 2009-01-16T01:21:36Z Gary King 3640 add date formatting 14716 javascript text/javascript if (typeof(LocalizeConfig) == 'undefined') LocalizeConfig = {}; if (typeof(LocalizeConfig.format) == 'undefined') LocalizeConfig.format = 'ymd'; addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = "0" + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(); var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // set the date bits to output var year = time.getFullYear(); var month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = add_leading_zero(parseInt(time.getHours())); var minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalizeConfig.format) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function convert_month_to_number(month) { var tmp = new Date(month + " 1, 2001"); return tmp.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } noe4szkthra7qmqg9m1aal4kciranv0 14717 14716 2009-01-16T01:24:45Z Gary King 3640 dateFormat 14717 javascript text/javascript if (typeof(LocalizeConfig) == 'undefined') LocalizeConfig = {}; if (typeof(LocalizeConfig.dateFormat) == 'undefined') LocalizeConfig.dateFormat = 'ymd'; addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } var unique_url = false; var wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = "0" + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(); var yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // set the date bits to output var year = time.getFullYear(); var month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = add_leading_zero(parseInt(time.getHours())); var minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24; days_ago = Math.round(days_ago); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalizeConfig.dateFormat) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function convert_month_to_number(month) { var tmp = new Date(month + " 1, 2001"); return tmp.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 6t4hzz4mniltnc7elgqycftyr2t8olh 14718 14717 2009-01-16T01:42:46Z Gary King 3640 shaving off some lines 14718 javascript text/javascript if (typeof(LocalizeConfig) == 'undefined') LocalizeConfig = {}; if (typeof(LocalizeConfig.dateFormat) == 'undefined') LocalizeConfig.dateFormat = 'ymd'; addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = "0" + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(), yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = add_leading_zero(parseInt(time.getHours())), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalizeConfig.dateFormat) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm, return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function convert_month_to_number(month) { var tmp = new Date(month + " 1, 2001"); return tmp.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } dyotf3lcmbmqfln1m670tunh6cip33f 14719 14718 2009-01-16T01:46:54Z Gary King 3640 "Tomorrow" 14719 javascript text/javascript if (typeof(LocalizeConfig) == 'undefined') LocalizeConfig = {}; if (typeof(LocalizeConfig.dateFormat) == 'undefined') LocalizeConfig.dateFormat = 'ymd'; addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = "0" + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(yesterday.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = add_leading_zero(parseInt(time.getHours())), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year = tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalizeConfig.dateFormat) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm, return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function convert_month_to_number(month) { var tmp = new Date(month + " 1, 2001"); return tmp.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } ie5oxmqt3zb9eo4vql8ztdr9rqcbj7e 14720 14719 2009-01-16T01:47:40Z Gary King 3640 add missing equals 14720 javascript text/javascript if (typeof(LocalizeConfig) == 'undefined') LocalizeConfig = {}; if (typeof(LocalizeConfig.dateFormat) == 'undefined') LocalizeConfig.dateFormat = 'ymd'; addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = "0" + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(yesterday.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = add_leading_zero(parseInt(time.getHours())), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalizeConfig.dateFormat) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm, return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function convert_month_to_number(month) { var tmp = new Date(month + " 1, 2001"); return tmp.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } glzucz2cm6oj00lmjxh0medmsfx87fu 14721 14720 2009-01-16T01:49:53Z Gary King 3640 fix tomorrow 14721 javascript text/javascript if (typeof(LocalizeConfig) == 'undefined') LocalizeConfig = {}; if (typeof(LocalizeConfig.dateFormat) == 'undefined') LocalizeConfig.dateFormat = 'ymd'; addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = "0" + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = add_leading_zero(parseInt(time.getHours())), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalizeConfig.dateFormat) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm, return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function convert_month_to_number(month) { var output = new Date(month + " 1, 2001"); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } i1fr8klmketgl2akxzirksibfqhfl3y 14722 14721 2009-01-19T16:37:18Z Gary King 3640 lowercase 14722 javascript text/javascript if (typeof(LocalizeConfig) == 'undefined') LocalizeConfig = {}; if (typeof(LocalizeConfig.dateFormat) == 'undefined') LocalizeConfig.dateFormat = 'ymd'; addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = "0" + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = add_leading_zero(parseInt(time.getHours())), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalizeConfig.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm, return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function convert_month_to_number(month) { var output = new Date(month + " 1, 2001"); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } tjylbz291bri1uoos8jru1llu826sec 14723 14553 2009-01-25T20:31:52Z Gary King 3640 minus symbol, and removing leading zeros for hours 14723 javascript text/javascript if (typeof(LocalizeConfig) == 'undefined') LocalizeConfig = {}; if (typeof(LocalizeConfig.dateFormat) == 'undefined') LocalizeConfig.dateFormat = 'ymd'; addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalizeConfig.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm, return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 6rc3nipw8n2ncc7evdqqpdpl7pkuxaq 14724 14723 2009-01-25T20:43:35Z Gary King 3640 fix abs 14724 javascript text/javascript if (typeof(LocalizeConfig) == 'undefined') LocalizeConfig = {}; if (typeof(LocalizeConfig.dateFormat) == 'undefined') LocalizeConfig.dateFormat = 'ymd'; addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalizeConfig.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm, return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 957ih1lfh2otrkz9qnqzsxi17fd377v 14725 14554 2009-01-26T20:00:32Z Gary King 3640 MAJOR: changing default from "ymd" to "dmy" as that's the default used by Wikipedia timestamps 14725 javascript text/javascript if (typeof(LocalizeConfig) == 'undefined') LocalizeConfig = {}; if (typeof(LocalizeConfig.dateFormat) == 'undefined') LocalizeConfig.dateFormat = 'dmy'; addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalizeConfig.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm, return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 90%;" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 1deoy986nnu6dzniy5fkl4khvlq4zia 14726 14725 2009-01-26T20:17:06Z Gary King 3640 removing small font, wrapping with class 14726 javascript text/javascript if (typeof(LocalizeConfig) == 'undefined') LocalizeConfig = {}; if (typeof(LocalizeConfig.dateFormat) == 'undefined') LocalizeConfig.dateFormat = 'dmy'; addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalizeConfig.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm, return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span class="localcomments" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 84cviea5bzxnxvlq6uqj61j5dynjwss 14727 14726 2009-01-26T20:29:14Z Gary King 3640 moved [[User:Gary King/localize comments.js]] to [[User:Gary King/comments in local time.js]] 14726 javascript text/javascript if (typeof(LocalizeConfig) == 'undefined') LocalizeConfig = {}; if (typeof(LocalizeConfig.dateFormat) == 'undefined') LocalizeConfig.dateFormat = 'dmy'; addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalizeConfig.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm, return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span class="localcomments" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 84cviea5bzxnxvlq6uqj61j5dynjwss 14728 14555 2009-01-27T21:09:02Z Gary King 3640 moving time to before date 14728 javascript text/javascript if (typeof(LocalizeConfig) == 'undefined') LocalizeConfig = {}; if (typeof(LocalizeConfig.dateFormat) == 'undefined') LocalizeConfig.dateFormat = 'dmy'; addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalizeConfig.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm, return_date = time + ', ' + date + ', ' + ' (UTC' + utc_offset + ')'; return '<span class="localcomments" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 2x49uw8uq8bqbyatr8qgxefnqpjfusu 14729 14728 2009-01-27T21:09:29Z Gary King 3640 removing extra space 14729 javascript text/javascript if (typeof(LocalizeConfig) == 'undefined') LocalizeConfig = {}; if (typeof(LocalizeConfig.dateFormat) == 'undefined') LocalizeConfig.dateFormat = 'dmy'; addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalizeConfig.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm, return_date = time + ', ' + date + ', ' + '(UTC' + utc_offset + ')'; return '<span class="localcomments" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 8ge7dczp7qdq16gux5u5n42y13lzx3e 14730 14729 2009-01-27T21:14:28Z Gary King 3640 let's try 90% font size again 14730 javascript text/javascript if (typeof(LocalizeConfig) == 'undefined') LocalizeConfig = {}; if (typeof(LocalizeConfig.dateFormat) == 'undefined') LocalizeConfig.dateFormat = 'dmy'; addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalizeConfig.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm, return_date = time + ', ' + date + ', ' + '(UTC' + utc_offset + ')'; return '<span class="localcomments" style="font-size: 90%;" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 5p2vxs3wzygx9pavqwnt75x4ooc8nu7 14731 14730 2009-01-27T21:15:14Z Gary King 3640 default to 95% font size 14731 javascript text/javascript if (typeof(LocalizeConfig) == 'undefined') LocalizeConfig = {}; if (typeof(LocalizeConfig.dateFormat) == 'undefined') LocalizeConfig.dateFormat = 'dmy'; addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalizeConfig.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm, return_date = time + ', ' + date + ', ' + '(UTC' + utc_offset + ')'; return '<span class="localcomments" style="font-size: 95%;" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } n8edty45lbbvs7aij00cxzqoxusvklu 14732 14731 2009-01-27T21:19:42Z Gary King 3640 move day of week calculation 14732 javascript text/javascript if (typeof(LocalizeConfig) == 'undefined') LocalizeConfig = {}; if (typeof(LocalizeConfig.dateFormat) == 'undefined') LocalizeConfig.dateFormat = 'dmy'; addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalizeConfig.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm, return_date = time + ', ' + date + ', ' + '(UTC' + utc_offset + ')'; return '<span class="localcomments" style="font-size: 95%;" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } i1t828tbvcqio3z602413bxtwdxf1xg 14733 14732 2009-01-27T21:20:16Z Gary King 3640 no good, undoing 14733 javascript text/javascript if (typeof(LocalizeConfig) == 'undefined') LocalizeConfig = {}; if (typeof(LocalizeConfig.dateFormat) == 'undefined') LocalizeConfig.dateFormat = 'dmy'; addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalizeConfig.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm, return_date = time + ', ' + date + ', ' + '(UTC' + utc_offset + ')'; return '<span class="localcomments" style="font-size: 95%;" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } n8edty45lbbvs7aij00cxzqoxusvklu 14734 14733 2009-01-27T21:37:32Z Gary King 3640 removing fixed size as can't be overruled 14734 javascript text/javascript if (typeof(LocalizeConfig) == 'undefined') LocalizeConfig = {}; if (typeof(LocalizeConfig.dateFormat) == 'undefined') LocalizeConfig.dateFormat = 'dmy'; addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalizeConfig.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm, return_date = time + ', ' + date + ', ' + '(UTC' + utc_offset + ')'; return '<span class="localcomments" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 8ge7dczp7qdq16gux5u5n42y13lzx3e 14735 14734 2009-01-27T21:38:25Z Gary King 3640 wrapping the 95% outside 14735 javascript text/javascript if (typeof(LocalizeConfig) == 'undefined') LocalizeConfig = {}; if (typeof(LocalizeConfig.dateFormat) == 'undefined') LocalizeConfig.dateFormat = 'dmy'; addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalizeConfig.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm, return_date = time + ', ' + date + ', ' + '(UTC' + utc_offset + ')'; return '<span style="font-size: 95%;"><span class="localcomments" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span></span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 1dtij0qg9evhw0tac1ysoqqv9klor6v 14736 14735 2009-01-27T21:46:13Z Gary King 3640 switch to LocalComments 14736 javascript text/javascript /* Deprecated */ if (typeof(LocalizeConfig) == 'undefined') LocalizeConfig = {}; if (typeof(LocalizeConfig.dateFormat) == 'undefined') LocalizeConfig.dateFormat = 'dmy'; /* End */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') LocalComments.dateFormat = 'dmy'; if (LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm, return_date = time + ', ' + date + ', ' + '(UTC' + utc_offset + ')'; return '<span style="font-size: 95%;"><span class="localcomments" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span></span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } r7pr096uqjet3yg6e22v1fxern3u3do 14737 14736 2009-01-27T22:06:18Z Gary King 3640 rm unnecessary code 14737 javascript text/javascript if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') LocalComments.dateFormat = 'dmy'; if (LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm, return_date = time + ', ' + date + ', ' + '(UTC' + utc_offset + ')'; return '<span style="font-size: 95%;"><span class="localcomments" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span></span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } aha80bo92xd47w27yolvpol733zcfn6 14738 14737 2009-01-27T22:07:32Z Gary King 3640 add another if 14738 javascript text/javascript if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') LocalComments.dateFormat = 'dmy'; if (typeof(LocalizeConfig) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm, return_date = time + ', ' + date + ', ' + '(UTC' + utc_offset + ')'; return '<span style="font-size: 95%;"><span class="localcomments" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span></span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } t55xnwb4v05bphp1aewkfmletrnwuyi 14739 14738 2009-01-27T22:08:15Z Gary King 3640 add another 14739 javascript text/javascript if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') LocalComments.dateFormat = 'dmy'; if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm, return_date = time + ', ' + date + ', ' + '(UTC' + utc_offset + ')'; return '<span style="font-size: 95%;"><span class="localcomments" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span></span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } eieaqiqoccl6g5da47dg1df8ui1pqsx 14740 14739 2009-01-27T22:09:28Z Gary King 3640 if 14740 javascript text/javascript if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } addOnloadHook(function() { if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm, return_date = time + ', ' + date + ', ' + '(UTC' + utc_offset + ')'; return '<span style="font-size: 95%;"><span class="localcomments" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span></span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 6bhz69n86ngvt4xpaggismeoay7tk78 14741 14740 2009-01-27T22:15:40Z Gary King 3640 move 14741 javascript text/javascript addOnloadHook(function() { if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm, return_date = time + ', ' + date + ', ' + '(UTC' + utc_offset + ')'; return '<span style="font-size: 95%;"><span class="localcomments" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span></span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } bjtwjrcod72k4mz2tb8k31vg9a7ozsi 14742 14741 2009-01-27T22:22:49Z Gary King 3640 setting to move date forward 14742 javascript text/javascript addOnloadHook(function() { /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm if (LocalComments.timeFirst) var return_date = time + ', ' + date + ', ' + '(UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 95%;"><span class="localcomments" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span></span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 0vltb5qolj7sjdxwvmc5hbs3mkbrwh4 14743 14742 2009-01-27T22:23:02Z Gary King 3640 add semicolon 14743 javascript text/javascript addOnloadHook(function() { /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ', ' + '(UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 95%;"><span class="localcomments" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span></span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 219vqjsarzwxdmoe3cnxejhydcwktnt 14744 14743 2009-01-27T22:46:48Z Gary King 3640 add link to docum 14744 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ', ' + '(UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 95%;"><span class="localcomments" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span></span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 8s9oe3a1xupiw3ekd7x4gfeaht2pz2q 14745 14744 2009-01-27T22:48:09Z Gary King 3640 removing comma 14745 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + '(UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 95%;"><span class="localcomments" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span></span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } o88zsqwy61k88v7k6qe8cnhtq2btjgl 14746 14745 2009-01-27T22:48:38Z Gary King 3640 still need the space though 14746 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 95%;"><span class="localcomments" title="' + str + '">' + return_date.replace(/ /g, '&nbsp;') + '</span></span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } tg9w8yw0v9gupjbksoyq5qo1gyy2aen 14747 14746 2009-01-27T22:50:36Z Gary King 3640 nowrap whitespace 14747 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 95%; white-space: nowrap;"><span class="localcomments" title="' + str + '">' + return_date + '</span></span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 34rv8tra3yt1p03huzzyzt12sd8yf7r 14748 14747 2009-01-28T17:04:56Z Gary King 3640 renaming function 14748 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 95%; white-space: nowrap;"><span class="localcomments" title="' + str + '">' + return_date + '</span></span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } cmsqh7f5h5du3gd7yqr5h5lbl45x49s 14749 14748 2009-01-28T17:32:09Z Gary King 3640 one line 14749 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 95%; white-space: nowrap;"><span class="localcomments" title="' + str + '">' + return_date + '</span></span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 2m1efbi2hr1otu27v8qduzyp2h2kcpp 14750 14749 2009-02-01T00:21:00Z Gary King 3640 try this 14750 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month /*if (old_day == '31') time.setUTCDate('30'); else*/ time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month /*if (old_day == '31') var day = time.getDate() + 1; else*/ var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 95%; white-space: nowrap;"><span class="localcomments" title="' + str + '">' + return_date + '</span></span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 34usjstzdo88urrvcp5eynfgz6xrrub 14751 14750 2009-02-01T00:25:33Z Gary King 3640 back 14751 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 95%; white-space: nowrap;"><span class="localcomments" title="' + str + '">' + return_date + '</span></span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 2m1efbi2hr1otu27v8qduzyp2h2kcpp 14752 14751 2009-02-01T00:32:14Z Gary King 3640 try again 14752 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month /*if (old_day == '31') time.setUTCDate('30'); else*/ time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month /*if (old_day == '31') var day = time.getDate() + 1; else*/ var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 95%; white-space: nowrap;"><span class="localcomments" title="' + str + '">' + return_date + '</span></span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 34usjstzdo88urrvcp5eynfgz6xrrub 14753 14752 2009-02-01T00:34:10Z Gary King 3640 digits? 14753 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == 31) time.setUTCDate(30); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == 31) var day = time.getDate() + 1; else var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 95%; white-space: nowrap;"><span class="localcomments" title="' + str + '">' + return_date + '</span></span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } lkvcsxsvvcn5pa043cmwchccy59zmet 14754 14753 2009-02-01T00:38:22Z Gary King 3640 undo 14754 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(str, old_hour, old_minute, old_day, old_month, old_year, offset, s) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 95%; white-space: nowrap;"><span class="localcomments" title="' + str + '">' + return_date + '</span></span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 2m1efbi2hr1otu27v8qduzyp2h2kcpp 14755 14754 2009-02-01T00:40:22Z Gary King 3640 minor changes 14755 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 95%; white-space: nowrap;"><span class="localcomments" title="' + original_timestamp + '">' + return_date + '</span></span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 8lvwc9zifn5h1frdftducxjjnb6k63s 14756 14755 2009-02-01T00:43:26Z Gary King 3640 debug 14756 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset, debug) { if (debug) alert('Debug mode is enabled.'); var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 95%; white-space: nowrap;"><span class="localcomments" title="' + original_timestamp + '">' + return_date + '</span></span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } g8ommkncfc2se9g6x6622zcawvzyqul 14757 14756 2009-02-01T00:43:56Z Gary King 3640 [[WP:UNDO|Undid]] revision 267734825 by [[Special:Contributions/Gary King|Gary King]] ([[User talk:Gary King|talk]]) 14757 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 95%; white-space: nowrap;"><span class="localcomments" title="' + original_timestamp + '">' + return_date + '</span></span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } String.prototype.pluralize = function(count, plural) { if (plural == null) plural = this + 's'; return (count == 1 ? this : plural) } 8lvwc9zifn5h1frdftducxjjnb6k63s 14758 14757 2009-02-01T01:58:06Z Gary King 3640 converting pluralize to a function 14758 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize('year', difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize('month', difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize('day', difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 95%; white-space: nowrap;"><span class="localcomments" title="' + original_timestamp + '">' + return_date + '</span></span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } nmwg8d0iywupv4unyajullcjeg0ozvi 14759 14758 2009-02-01T02:15:04Z Gary King 3640 one line 14759 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // fix for when the date is the 31st of the month if (old_day == '31') time.setUTCDate('30'); else time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); // fix for when the date is the 31st of the month if (old_day == '31') var day = time.getDate() + 1; else var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize('year', difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize('month', difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize('day', difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 95%; white-space: nowrap;"><span class="localcomments" title="' + original_timestamp + '">' + return_date + '</span></span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } 7f99kjjdkmv7cqq0uojvzfz6ab7yktz 14760 14759 2009-02-01T02:56:10Z Gary King 3640 remove these checks, they are just silly 14760 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // figure out what the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize('year', difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize('month', difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize('day', difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 95%; white-space: nowrap;"><span class="localcomments" title="' + original_timestamp + '">' + return_date + '</span></span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } c0atxhifj041yno4s6rq6wie4dk3ef2 14761 14760 2009-02-01T03:12:01Z Gary King 3640 comment 14761 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // determine the time offset is var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize('year', difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize('month', difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize('day', difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 95%; white-space: nowrap;"><span class="localcomments" title="' + original_timestamp + '">' + return_date + '</span></span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } nkc2oo57mfs7o81afq5a7zfh53lglbz 14762 14761 2009-02-01T03:12:17Z Gary King 3640 fix 14762 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCDate(old_day); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCFullYear(old_year); // determine the time offset var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize('year', difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize('month', difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize('day', difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 95%; white-space: nowrap;"><span class="localcomments" title="' + original_timestamp + '">' + return_date + '</span></span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } gbmdrddenss3pbr5mpo9am2i9doaxsw 14763 14762 2009-02-01T03:22:49Z Gary King 3640 switch the order 14763 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCDate(old_day); time.setUTCFullYear(old_year); // determine the time offset var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // Return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // Calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // The distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // Calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // The difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize('year', difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize('month', difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize('day', difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 95%; white-space: nowrap;"><span class="localcomments" title="' + original_timestamp + '">' + return_date + '</span></span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } 8n96eh3vgnnjyt2kx8ephk6fph0pkjv 14764 14763 2009-02-01T03:44:25Z Gary King 3640 lowercase comments 14764 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCDate(old_day); time.setUTCFullYear(old_year); // determine the time offset var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // the distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // the difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize('year', difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize('month', difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize('day', difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 95%; white-space: nowrap;"><span class="localcomments" title="' + original_timestamp + '">' + return_date + '</span></span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } ohblnz73evuhfw3n6buj8ykwbneqfzy 14765 14764 2009-02-16T22:20:33Z Gary King 3640 rewriting this bad boy to use nodes 14765 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCDate(old_day); time.setUTCFullYear(old_year); // determine the time offset var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // the distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // the difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize('year', difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize('month', difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize('day', difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return return_date; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } function replace_text(node, search, replace) { if (node.nodeType == 3) { var value = node.nodeValue; var position = value.search(search); var match = value.match(search); if (position != -1) { var length = match.toString().length; var before_match = value.substring(0, position); var after_match = value.substring(position + length); var first_span = document.createElement('span'); first_span.setAttribute('style', 'font-size: 95%; white-space: nowrap;'); var second_span = document.createElement('span'); second_span.setAttribute('class', 'localcomments'); second_span.setAttribute('title', match); second_span.appendChild(document.createTextNode(match.toString().replace(search, replace))); first_span.appendChild(second_span); var parent_node = document.createDocumentFragment(); parent_node.appendChild(document.createTextNode(before_match)); parent_node.appendChild(first_span); parent_node.appendChild(document.createTextNode(after_match)); node.parentNode.replaceChild(parent_node, node); } } else { var children = node.childNodes ? node.childNodes : []; for (var i = 0, j = children.length; i < j; i++) replace_text(children[i], search, replace) } } 5qgpotyn8zhn716poifvfnm9ql3shhw 14766 14765 2009-02-16T22:23:14Z Gary King 3640 fix 14766 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; replace_text(document.getElementById(element_id), /(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCDate(old_day); time.setUTCFullYear(old_year); // determine the time offset var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // the distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // the difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize('year', difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize('month', difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize('day', difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return return_date; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } function replace_text(node, search, replace) { if (node.nodeType == 3) { var value = node.nodeValue; var position = value.search(search); var match = value.match(search); if (position != -1) { var length = match.toString().length; var before_match = value.substring(0, position); var after_match = value.substring(position + length); var first_span = document.createElement('span'); first_span.setAttribute('style', 'font-size: 95%; white-space: nowrap;'); var second_span = document.createElement('span'); second_span.setAttribute('class', 'localcomments'); second_span.setAttribute('title', match); second_span.appendChild(document.createTextNode(match.toString().replace(search, replace))); first_span.appendChild(second_span); var parent_node = document.createDocumentFragment(); parent_node.appendChild(document.createTextNode(before_match)); parent_node.appendChild(first_span); parent_node.appendChild(document.createTextNode(after_match)); node.parentNode.replaceChild(parent_node, node); } } else { var children = node.childNodes ? node.childNodes : []; for (var i = 0, j = children.length; i < j; i++) replace_text(children[i], search, replace) } } haota4b2o5e3no7r9wxlyzkqizuo0pa 14767 14766 2009-02-16T22:27:47Z Gary King 3640 hm give me some more time 14767 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; document.getElementById(element_id).innerHTML = document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCDate(old_day); time.setUTCFullYear(old_year); // determine the time offset var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // the distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // the difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize('year', difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize('month', difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize('day', difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return '<span style="font-size: 95%; white-space: nowrap;"><span class="localcomments" title="' + original_timestamp + '">' + return_date + '</span></span>'; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } ohblnz73evuhfw3n6buj8ykwbneqfzy 14768 14767 2009-02-17T01:17:51Z Gary King 3640 [[WP:UNDO|Undid]] revision 271210161 by [[Special:Contributions/Gary King|Gary King]] ([[User talk:Gary King|talk]]) 14768 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; replace_text(document.getElementById(element_id), /(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCDate(old_day); time.setUTCFullYear(old_year); // determine the time offset var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // the distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // the difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize('year', difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize('month', difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize('day', difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return return_date; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } function replace_text(node, search, replace) { if (node.nodeType == 3) { var value = node.nodeValue; var position = value.search(search); var match = value.match(search); if (position != -1) { var length = match.toString().length; var before_match = value.substring(0, position); var after_match = value.substring(position + length); var first_span = document.createElement('span'); first_span.setAttribute('style', 'font-size: 95%; white-space: nowrap;'); var second_span = document.createElement('span'); second_span.setAttribute('class', 'localcomments'); second_span.setAttribute('title', match); second_span.appendChild(document.createTextNode(match.toString().replace(search, replace))); first_span.appendChild(second_span); var parent_node = document.createDocumentFragment(); parent_node.appendChild(document.createTextNode(before_match)); parent_node.appendChild(first_span); parent_node.appendChild(document.createTextNode(after_match)); node.parentNode.replaceChild(parent_node, node); } } else { var children = node.childNodes ? node.childNodes : []; for (var i = 0, j = children.length; i < j; i++) replace_text(children[i], search, replace) } } haota4b2o5e3no7r9wxlyzkqizuo0pa 14769 14768 2009-02-17T01:18:13Z Gary King 3640 fix with a somewhat hack 14769 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; replace_text(document.getElementById(element_id), /(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCDate(old_day); time.setUTCFullYear(old_year); // determine the time offset var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // the distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // the difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize('year', difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize('month', difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize('day', difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return return_date; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } function replace_text(node, search, replace) { if (node.nodeType == 3) { var value = node.nodeValue; var position = value.search(search); var match = value.match(search); if (position != -1) { var length = match.toString().length; var before_match = value.substring(0, position); var after_match = value.substring(position + length); var first_span = document.createElement('span'); first_span.setAttribute('style', 'font-size: 95%; white-space: nowrap;'); var second_span = document.createElement('span'); second_span.setAttribute('class', 'localcomments'); second_span.setAttribute('title', match); second_span.appendChild(document.createTextNode(match.toString().replace(search, replace))); first_span.appendChild(second_span); var parent_node = document.createDocumentFragment(); parent_node.appendChild(document.createTextNode(before_match)); parent_node.appendChild(first_span); parent_node.appendChild(document.createTextNode(after_match)); node.parentNode.replaceChild(parent_node, node); } } else { var children = [], child = node.firstChild; while (child) { children[children.length] = child; child = child.nextSibling; } for (var child = 0; child < children.length; child++) replace_text(children[child], search, replace); } } 9jtia4ypxnl1ejr2sqaai7t0vnp92nj 14770 14769 2009-03-21T23:34:16Z Gary King 3640 wrap that 14770 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ (function () { addOnloadHook(function() { /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; replace_text(document.getElementById(element_id), /(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCDate(old_day); time.setUTCFullYear(old_year); // determine the time offset var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // the distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // the difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize('year', difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize('month', difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize('day', difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return return_date; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } function replace_text(node, search, replace) { if (node.nodeType == 3) { var value = node.nodeValue; var position = value.search(search); var match = value.match(search); if (position != -1) { var length = match.toString().length; var before_match = value.substring(0, position); var after_match = value.substring(position + length); var first_span = document.createElement('span'); first_span.setAttribute('style', 'font-size: 95%; white-space: nowrap;'); var second_span = document.createElement('span'); second_span.setAttribute('class', 'localcomments'); second_span.setAttribute('title', match); second_span.appendChild(document.createTextNode(match.toString().replace(search, replace))); first_span.appendChild(second_span); var parent_node = document.createDocumentFragment(); parent_node.appendChild(document.createTextNode(before_match)); parent_node.appendChild(first_span); parent_node.appendChild(document.createTextNode(after_match)); node.parentNode.replaceChild(parent_node, node); } } else { var children = [], child = node.firstChild; while (child) { children[children.length] = child; child = child.nextSibling; } for (var child = 0; child < children.length; child++) replace_text(children[child], search, replace); } } })(); fvbv14myx6br5bumyolw08rzaqpqjeg 14771 14770 2009-03-21T23:37:37Z Gary King 3640 bam 14771 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; replace_text(document.getElementById(element_id), /(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCDate(old_day); time.setUTCFullYear(old_year); // determine the time offset var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // the distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // the difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize('year', difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize('month', difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize('day', difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return return_date; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } function replace_text(node, search, replace) { if (node.nodeType == 3) { var value = node.nodeValue; var position = value.search(search); var match = value.match(search); if (position != -1) { var length = match.toString().length; var before_match = value.substring(0, position); var after_match = value.substring(position + length); var first_span = document.createElement('span'); first_span.setAttribute('style', 'font-size: 95%; white-space: nowrap;'); var second_span = document.createElement('span'); second_span.setAttribute('class', 'localcomments'); second_span.setAttribute('title', match); second_span.appendChild(document.createTextNode(match.toString().replace(search, replace))); first_span.appendChild(second_span); var parent_node = document.createDocumentFragment(); parent_node.appendChild(document.createTextNode(before_match)); parent_node.appendChild(first_span); parent_node.appendChild(document.createTextNode(after_match)); node.parentNode.replaceChild(parent_node, node); } } else { var children = [], child = node.firstChild; while (child) { children[children.length] = child; child = child.nextSibling; } for (var child = 0; child < children.length; child++) replace_text(children[child], search, replace); } } }); cjvu3jpew47x6c3yzqm7yz0qnblxw8w 14772 14771 2009-03-21T23:39:52Z Gary King 3640 test 14772 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; replace_text(document.getElementById(element_id), /(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); }); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCDate(old_day); time.setUTCFullYear(old_year); // determine the time offset var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // the distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // the difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize('year', difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize('month', difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize('day', difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return return_date; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } function replace_text(node, search, replace) { if (node.nodeType == 3) { var value = node.nodeValue; var position = value.search(search); var match = value.match(search); if (position != -1) { var length = match.toString().length; var before_match = value.substring(0, position); var after_match = value.substring(position + length); var first_span = document.createElement('span'); first_span.setAttribute('style', 'font-size: 95%; white-space: nowrap;'); var second_span = document.createElement('span'); second_span.setAttribute('class', 'localcomments'); second_span.setAttribute('title', match); second_span.appendChild(document.createTextNode(match.toString().replace(search, replace))); first_span.appendChild(second_span); var parent_node = document.createDocumentFragment(); parent_node.appendChild(document.createTextNode(before_match)); parent_node.appendChild(first_span); parent_node.appendChild(document.createTextNode(after_match)); node.parentNode.replaceChild(parent_node, node); } } else { var children = [], child = node.firstChild; while (child) { children[children.length] = child; child = child.nextSibling; } for (var child = 0; child < children.length; child++) replace_text(children[child], search, replace); } } 9jtia4ypxnl1ejr2sqaai7t0vnp92nj 14773 14772 2009-03-21T23:40:18Z Gary King 3640 [[WP:UNDO|Undid]] revision 278835844 by [[Special:Contributions/Gary King|Gary King]] ([[User talk:Gary King|talk]]) 14773 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; replace_text(document.getElementById(element_id), /(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); time.setUTCMonth(convert_month_to_number(old_month)); time.setUTCDate(old_day); time.setUTCFullYear(old_year); // determine the time offset var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // the distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // the difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize('year', difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize('month', difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize('day', difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return return_date; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } function replace_text(node, search, replace) { if (node.nodeType == 3) { var value = node.nodeValue; var position = value.search(search); var match = value.match(search); if (position != -1) { var length = match.toString().length; var before_match = value.substring(0, position); var after_match = value.substring(position + length); var first_span = document.createElement('span'); first_span.setAttribute('style', 'font-size: 95%; white-space: nowrap;'); var second_span = document.createElement('span'); second_span.setAttribute('class', 'localcomments'); second_span.setAttribute('title', match); second_span.appendChild(document.createTextNode(match.toString().replace(search, replace))); first_span.appendChild(second_span); var parent_node = document.createDocumentFragment(); parent_node.appendChild(document.createTextNode(before_match)); parent_node.appendChild(first_span); parent_node.appendChild(document.createTextNode(after_match)); node.parentNode.replaceChild(parent_node, node); } } else { var children = [], child = node.firstChild; while (child) { children[children.length] = child; child = child.nextSibling; } for (var child = 0; child < children.length; child++) replace_text(children[child], search, replace); } } }); cjvu3jpew47x6c3yzqm7yz0qnblxw8w 14774 14773 2009-03-30T20:26:52Z Gary King 3640 fixes 14774 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { // wgCanonicalNamespace = unsafeWindow.wgCanonicalNamespace /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; replace_text(document.getElementById(element_id), /(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCFullYear(old_year, convert_month_to_number(old_month), old_day); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // determine the time offset var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // the distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // the difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize('year', difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize('month', difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize('day', difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return return_date; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } function replace_text(node, search, replace) { if (node.nodeType == 3) { var value = node.nodeValue; var position = value.search(search); var match = value.match(search); if (position != -1) { var length = match.toString().length; var before_match = value.substring(0, position); var after_match = value.substring(position + length); var first_span = document.createElement('span'); first_span.setAttribute('style', 'font-size: 95%; white-space: nowrap;'); var second_span = document.createElement('span'); second_span.setAttribute('class', 'localcomments'); second_span.setAttribute('title', match); second_span.appendChild(document.createTextNode(match.toString().replace(search, replace))); first_span.appendChild(second_span); var parent_node = document.createDocumentFragment(); parent_node.appendChild(document.createTextNode(before_match)); parent_node.appendChild(first_span); parent_node.appendChild(document.createTextNode(after_match)); node.parentNode.replaceChild(parent_node, node); } } else { var children = [], child = node.firstChild; while (child) { children[children.length] = child; child = child.nextSibling; } for (var child = 0; child < children.length; child++) replace_text(children[child], search, replace); } } }); oomeajyo9cpkis2ag1b3hvm84tgkvp0 14775 14774 2009-04-02T02:52:38Z Gary King 3640 question mark 14775 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { // wgCanonicalNamespace = unsafeWindow.wgCanonicalNamespace /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; replace_text(document.getElementById(element_id), /(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+?) (\d{4}) \(UTC\)/g, adjust_time); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCFullYear(old_year, convert_month_to_number(old_month), old_day); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // determine the time offset var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // the distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // the difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize('year', difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize('month', difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize('day', difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return return_date; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } function replace_text(node, search, replace) { if (node.nodeType == 3) { var value = node.nodeValue; var position = value.search(search); var match = value.match(search); if (position != -1) { var length = match.toString().length; var before_match = value.substring(0, position); var after_match = value.substring(position + length); var first_span = document.createElement('span'); first_span.setAttribute('style', 'font-size: 95%; white-space: nowrap;'); var second_span = document.createElement('span'); second_span.setAttribute('class', 'localcomments'); second_span.setAttribute('title', match); second_span.appendChild(document.createTextNode(match.toString().replace(search, replace))); first_span.appendChild(second_span); var parent_node = document.createDocumentFragment(); parent_node.appendChild(document.createTextNode(before_match)); parent_node.appendChild(first_span); parent_node.appendChild(document.createTextNode(after_match)); node.parentNode.replaceChild(parent_node, node); } } else { var children = [], child = node.firstChild; while (child) { children[children.length] = child; child = child.nextSibling; } for (var child = 0; child < children.length; child++) replace_text(children[child], search, replace); } } }); f7azxv3rziy21xa4pz7kswgmwnrtuxc 14776 14775 2009-04-02T03:19:12Z Gary King 3640 [[WP:UNDO|Undid]] revision 281214290 by [[Special:Contributions/Gary King|Gary King]] ([[User talk:Gary King|talk]]) 14776 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { // wgCanonicalNamespace = unsafeWindow.wgCanonicalNamespace /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; replace_text(document.getElementById(element_id), /(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCFullYear(old_year, convert_month_to_number(old_month), old_day); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // determine the time offset var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // the distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // the difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize('year', difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize('month', difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize('day', difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return return_date; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } function replace_text(node, search, replace) { if (node.nodeType == 3) { var value = node.nodeValue; var position = value.search(search); var match = value.match(search); if (position != -1) { var length = match.toString().length; var before_match = value.substring(0, position); var after_match = value.substring(position + length); var first_span = document.createElement('span'); first_span.setAttribute('style', 'font-size: 95%; white-space: nowrap;'); var second_span = document.createElement('span'); second_span.setAttribute('class', 'localcomments'); second_span.setAttribute('title', match); second_span.appendChild(document.createTextNode(match.toString().replace(search, replace))); first_span.appendChild(second_span); var parent_node = document.createDocumentFragment(); parent_node.appendChild(document.createTextNode(before_match)); parent_node.appendChild(first_span); parent_node.appendChild(document.createTextNode(after_match)); node.parentNode.replaceChild(parent_node, node); } } else { var children = [], child = node.firstChild; while (child) { children[children.length] = child; child = child.nextSibling; } for (var child = 0; child < children.length; child++) replace_text(children[child], search, replace); } } }); oomeajyo9cpkis2ag1b3hvm84tgkvp0 14777 14776 2009-04-02T16:19:07Z Gary King 3640 fixing when there is more than one timestamp in the same node 14777 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { // wgCanonicalNamespace = unsafeWindow.wgCanonicalNamespace /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; replace_text(document.getElementById(element_id), /(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCFullYear(old_year, convert_month_to_number(old_month), old_day); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // determine the time offset var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // calculate day of week var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), day_of_the_week = day_names[time.getDay()]; // the distance in days from today and last Monday? today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); // calculate time difference var milliseconds_ago = today.getTime() - time.getTime(), days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); // the difference between today and the timestamp var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize('year', difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize('month', difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize('day', difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return return_date; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } function replace_text(node, search, replace) { if (node.nodeType == 3) { value = node.nodeValue; matches = value.match(search); if (matches != null) { node_parent_node = node.parentNode; old_node = node; // old_node_list = node.parentNode.childNodes; for (match = 0; match < matches.length; match++) { if (after_match != null && length != null) position = after_match.search(search) + before_match.length + length; else position = value.search(search); length = matches[match].toString().length; before_match = value.substring(0, position); var after_match = value.substring(position + length); first_span = document.createElement('span'); first_span.setAttribute('style', 'font-size: 95%; white-space: nowrap;'); second_span = document.createElement('span'); second_span.setAttribute('class', 'localcomments'); second_span.setAttribute('title', matches[match]); second_span.appendChild(document.createTextNode(matches[match].toString().replace(search, replace))); first_span.appendChild(second_span); new_node = document.createDocumentFragment(); new_node.appendChild(document.createTextNode(before_match)); new_node.appendChild(first_span); new_node.appendChild(document.createTextNode(after_match)); // new_node_list = new_node.childNodes; node_parent_node.replaceChild(new_node, old_node); // old_node_list = new_node_list; break; } } } else { var children = [], child = node.firstChild; while (child) { children[children.length] = child; child = child.nextSibling; } for (var child = 0; child < children.length; child++) replace_text(children[child], search, replace); } } }); n4txhutfgpiiavaayyze2xf9iyayat3 14778 14777 2009-04-02T17:21:22Z Gary King 3640 allow to disable descriptive date 14778 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { // wgCanonicalNamespace = unsafeWindow.wgCanonicalNamespace /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; if (typeof(LocalComments.dateDifference) == 'undefined') LocalComments.dateDifference = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; replace_text(document.getElementById(element_id), /(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCFullYear(old_year, convert_month_to_number(old_month), old_day); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // determine the time offset var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = 'Today'; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = 'Yesterday'; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = 'Tomorrow'; else { // calculate day of week day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); day_of_the_week = day_names[time.getDay()]; if (LocalComments.dateDifference) { // calculate time difference from today and the timestamp today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); milliseconds_ago = today.getTime() - time.getTime(); days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = 'ago'; if (days_ago <= 7) last = 'last '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = 'from now'; if (days_ago >= -7) last = 'this '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize('year', difference.getYear() - 70, 'years'); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize('month', difference.getMonth(), 'months'); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize('day', difference.getDate(), 'days'); descriptive_difference.push(new_days_ago); } descriptive_difference = ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } else { descriptive_difference = ''; last = ''; } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + descriptive_difference; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return return_date; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } function replace_text(node, search, replace) { if (node.nodeType == 3) { value = node.nodeValue; matches = value.match(search); if (matches != null) { node_parent_node = node.parentNode; old_node = node; // old_node_list = node.parentNode.childNodes; for (match = 0; match < matches.length; match++) { if (after_match != null && length != null) position = after_match.search(search) + before_match.length + length; else position = value.search(search); length = matches[match].toString().length; before_match = value.substring(0, position); var after_match = value.substring(position + length); first_span = document.createElement('span'); first_span.setAttribute('style', 'font-size: 95%; white-space: nowrap;'); second_span = document.createElement('span'); second_span.setAttribute('class', 'localcomments'); second_span.setAttribute('title', matches[match]); second_span.appendChild(document.createTextNode(matches[match].toString().replace(search, replace))); first_span.appendChild(second_span); new_node = document.createDocumentFragment(); new_node.appendChild(document.createTextNode(before_match)); new_node.appendChild(first_span); new_node.appendChild(document.createTextNode(after_match)); // new_node_list = new_node.childNodes; node_parent_node.replaceChild(new_node, old_node); // old_node_list = new_node_list; break; } } } else { var children = [], child = node.firstChild; while (child) { children[children.length] = child; child = child.nextSibling; } for (var child = 0; child < children.length; child++) replace_text(children[child], search, replace); } } }); 355p6mfj9isog1ytg1x5kd3uiqmvvsb 14779 14778 2009-06-15T20:21:51Z Gary King 3640 converting language, hopefully nothing explodes 14779 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { // wgCanonicalNamespace = unsafeWindow.wgCanonicalNamespace /* Language */ var language = { // relative terms 'Today' : 'Today', 'Yesterday' : 'Yesterday', 'Tomorrow' : 'Tomorrow', 'last' : 'last', 'this' : 'this', // days of the week 'Sunday' : 'Sunday', 'Monday' : 'Monday', 'Tuesday' : 'Tuesday', 'Wednesday' : 'Wednesday', 'Thursday' : 'Thursday', 'Friday' : 'Friday', // months of the year 'January' : 'January', 'February' : 'February', 'March' : 'March', 'April' : 'April', 'May' : 'May', 'June' : 'June', 'July' : 'July', 'August' : 'August', 'September' : 'September', 'October' : 'October', 'November' : 'November', 'December' : 'December', // difference words 'ago' : 'ago', 'from now' : 'from now', // date phrases 'year' : 'year', 'years' : 'years', 'month' : 'month', 'months' : 'months', 'day' : 'day', 'days' : 'days', } /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; if (typeof(LocalComments.dateDifference) == 'undefined') LocalComments.dateDifference = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; replace_text(document.getElementById(element_id), /(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCFullYear(old_year, convert_month_to_number(old_month), old_day); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // determine the time offset var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = language['Today']; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = language['Yesterday']; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = language['Tomorrow']; else { // calculate day of week day_names = new Array(language['Sunday'], language['Monday'], language['Tuesday'], language['Wednesday'], language['Thursday'], language['Friday'], language['Saturday']); day_of_the_week = day_names[time.getDay()]; if (LocalComments.dateDifference) { // calculate time difference from today and the timestamp today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); milliseconds_ago = today.getTime() - time.getTime(); days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = language['ago']; if (days_ago <= 7) last = language['last'] + ' '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = language['from now']; if (days_ago >= -7) last = language['this'] + ' '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize(language['year'], difference.getYear() - 70, language['years']); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize(language['month'], difference.getMonth(), language['months']); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize(language['day'], difference.getDate(), language['days']); descriptive_difference.push(new_days_ago); } descriptive_difference = ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } else { descriptive_difference = ''; last = ''; } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + descriptive_difference; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return return_date; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array(language['January'], language['February'], language['March'], language['April'], language['May'], language['June'], language['July'], language['August'], language['September'], language['October'], language['November'], language['December']); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } function replace_text(node, search, replace) { if (node.nodeType == 3) { value = node.nodeValue; matches = value.match(search); if (matches != null) { node_parent_node = node.parentNode; old_node = node; // old_node_list = node.parentNode.childNodes; for (match = 0; match < matches.length; match++) { if (after_match != null && length != null) position = after_match.search(search) + before_match.length + length; else position = value.search(search); length = matches[match].toString().length; before_match = value.substring(0, position); var after_match = value.substring(position + length); first_span = document.createElement('span'); first_span.setAttribute('style', 'font-size: 95%; white-space: nowrap;'); second_span = document.createElement('span'); second_span.setAttribute('class', 'localcomments'); second_span.setAttribute('title', matches[match]); second_span.appendChild(document.createTextNode(matches[match].toString().replace(search, replace))); first_span.appendChild(second_span); new_node = document.createDocumentFragment(); new_node.appendChild(document.createTextNode(before_match)); new_node.appendChild(first_span); new_node.appendChild(document.createTextNode(after_match)); // new_node_list = new_node.childNodes; node_parent_node.replaceChild(new_node, old_node); // old_node_list = new_node_list; break; } } } else { var children = [], child = node.firstChild; while (child) { children[children.length] = child; child = child.nextSibling; } for (var child = 0; child < children.length; child++) replace_text(children[child], search, replace); } } }); fr7gbpwqlmajkwl75o9xq64f0x9acvy 14780 14779 2009-06-17T22:58:04Z Gary King 3640 add Saturday 14780 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { // wgCanonicalNamespace = unsafeWindow.wgCanonicalNamespace /* Language */ var language = { // relative terms 'Today' : 'Today', 'Yesterday' : 'Yesterday', 'Tomorrow' : 'Tomorrow', 'last' : 'last', 'this' : 'this', // days of the week 'Sunday' : 'Sunday', 'Monday' : 'Monday', 'Tuesday' : 'Tuesday', 'Wednesday' : 'Wednesday', 'Thursday' : 'Thursday', 'Friday' : 'Friday', 'Saturday' : 'Saturday', // months of the year 'January' : 'January', 'February' : 'February', 'March' : 'March', 'April' : 'April', 'May' : 'May', 'June' : 'June', 'July' : 'July', 'August' : 'August', 'September' : 'September', 'October' : 'October', 'November' : 'November', 'December' : 'December', // difference words 'ago' : 'ago', 'from now' : 'from now', // date phrases 'year' : 'year', 'years' : 'years', 'month' : 'month', 'months' : 'months', 'day' : 'day', 'days' : 'days', } /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; if (typeof(LocalComments.dateDifference) == 'undefined') LocalComments.dateDifference = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; replace_text(document.getElementById(element_id), /(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCFullYear(old_year, convert_month_to_number(old_month), old_day); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // determine the time offset var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = language['Today']; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = language['Yesterday']; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = language['Tomorrow']; else { // calculate day of week day_names = new Array(language['Sunday'], language['Monday'], language['Tuesday'], language['Wednesday'], language['Thursday'], language['Friday'], language['Saturday']); day_of_the_week = day_names[time.getDay()]; if (LocalComments.dateDifference) { // calculate time difference from today and the timestamp today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); milliseconds_ago = today.getTime() - time.getTime(); days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = language['ago']; if (days_ago <= 7) last = language['last'] + ' '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = language['from now']; if (days_ago >= -7) last = language['this'] + ' '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize(language['year'], difference.getYear() - 70, language['years']); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize(language['month'], difference.getMonth(), language['months']); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize(language['day'], difference.getDate(), language['days']); descriptive_difference.push(new_days_ago); } descriptive_difference = ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } else { descriptive_difference = ''; last = ''; } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + descriptive_difference; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return return_date; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array(language['January'], language['February'], language['March'], language['April'], language['May'], language['June'], language['July'], language['August'], language['September'], language['October'], language['November'], language['December']); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } function replace_text(node, search, replace) { if (node.nodeType == 3) { value = node.nodeValue; matches = value.match(search); if (matches != null) { node_parent_node = node.parentNode; old_node = node; // old_node_list = node.parentNode.childNodes; for (match = 0; match < matches.length; match++) { if (after_match != null && length != null) position = after_match.search(search) + before_match.length + length; else position = value.search(search); length = matches[match].toString().length; before_match = value.substring(0, position); var after_match = value.substring(position + length); first_span = document.createElement('span'); first_span.setAttribute('style', 'font-size: 95%; white-space: nowrap;'); second_span = document.createElement('span'); second_span.setAttribute('class', 'localcomments'); second_span.setAttribute('title', matches[match]); second_span.appendChild(document.createTextNode(matches[match].toString().replace(search, replace))); first_span.appendChild(second_span); new_node = document.createDocumentFragment(); new_node.appendChild(document.createTextNode(before_match)); new_node.appendChild(first_span); new_node.appendChild(document.createTextNode(after_match)); // new_node_list = new_node.childNodes; node_parent_node.replaceChild(new_node, old_node); // old_node_list = new_node_list; break; } } } else { var children = [], child = node.firstChild; while (child) { children[children.length] = child; child = child.nextSibling; } for (var child = 0; child < children.length; child++) replace_text(children[child], search, replace); } } }); mjesceu8ubvazglp8bdwjlsaxvcavhu 14781 14780 2009-07-17T17:46:23Z Gary King 3640 adding "var" where necessary 14781 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { // wgCanonicalNamespace = unsafeWindow.wgCanonicalNamespace /* Language */ var language = { // relative terms 'Today' : 'Today', 'Yesterday' : 'Yesterday', 'Tomorrow' : 'Tomorrow', 'last' : 'last', 'this' : 'this', // days of the week 'Sunday' : 'Sunday', 'Monday' : 'Monday', 'Tuesday' : 'Tuesday', 'Wednesday' : 'Wednesday', 'Thursday' : 'Thursday', 'Friday' : 'Friday', 'Saturday' : 'Saturday', // months of the year 'January' : 'January', 'February' : 'February', 'March' : 'March', 'April' : 'April', 'May' : 'May', 'June' : 'June', 'July' : 'July', 'August' : 'August', 'September' : 'September', 'October' : 'October', 'November' : 'November', 'December' : 'December', // difference words 'ago' : 'ago', 'from now' : 'from now', // date phrases 'year' : 'year', 'years' : 'years', 'month' : 'month', 'months' : 'months', 'day' : 'day', 'days' : 'days', } /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; if (typeof(LocalComments.dateDifference) == 'undefined') LocalComments.dateDifference = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; replace_text(document.getElementById(element_id), /(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCFullYear(old_year, convert_month_to_number(old_month), old_day); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // determine the time offset var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = language['Today']; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = language['Yesterday']; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = language['Tomorrow']; else { // calculate day of week var day_names = new Array(language['Sunday'], language['Monday'], language['Tuesday'], language['Wednesday'], language['Thursday'], language['Friday'], language['Saturday']); var day_of_the_week = day_names[time.getDay()]; if (LocalComments.dateDifference) { // calculate time difference from today and the timestamp today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = language['ago']; if (days_ago <= 7) last = language['last'] + ' '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = language['from now']; if (days_ago >= -7) last = language['this'] + ' '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize(language['year'], difference.getYear() - 70, language['years']); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize(language['month'], difference.getMonth(), language['months']); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize(language['day'], difference.getDate(), language['days']); descriptive_difference.push(new_days_ago); } descriptive_difference = ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } else { descriptive_difference = ''; last = ''; } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + descriptive_difference; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return return_date; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array(language['January'], language['February'], language['March'], language['April'], language['May'], language['June'], language['July'], language['August'], language['September'], language['October'], language['November'], language['December']); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } function replace_text(node, search, replace) { if (node.nodeType == 3) { var value = node.nodeValue; var matches = value.match(search); if (matches != null) { var node_parent_node = node.parentNode; var old_node = node; // old_node_list = node.parentNode.childNodes; for (match = 0; match < matches.length; match++) { var position; if (after_match != null && length != null) position = after_match.search(search) + before_match.length + length; else position = value.search(search); var length = matches[match].toString().length; var before_match = value.substring(0, position); var after_match = value.substring(position + length); var first_span = document.createElement('span'); first_span.setAttribute('style', 'font-size: 95%; white-space: nowrap;'); var second_span = document.createElement('span'); second_span.setAttribute('class', 'localcomments'); second_span.setAttribute('title', matches[match]); second_span.appendChild(document.createTextNode(matches[match].toString().replace(search, replace))); first_span.appendChild(second_span); var new_node = document.createDocumentFragment(); new_node.appendChild(document.createTextNode(before_match)); new_node.appendChild(first_span); new_node.appendChild(document.createTextNode(after_match)); // new_node_list = new_node.childNodes; node_parent_node.replaceChild(new_node, old_node); // old_node_list = new_node_list; break; } } } else { var children = [], child = node.firstChild; while (child) { children[children.length] = child; child = child.nextSibling; } for (var child = 0; child < children.length; child++) replace_text(children[child], search, replace); } } }); oqgc77xpf2sjv4mk2lqfae2j561jo9a 14782 14781 2009-07-17T17:47:51Z Gary King 3640 add semicolon 14782 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { // wgCanonicalNamespace = unsafeWindow.wgCanonicalNamespace /* Language */ var language = { // relative terms 'Today' : 'Today', 'Yesterday' : 'Yesterday', 'Tomorrow' : 'Tomorrow', 'last' : 'last', 'this' : 'this', // days of the week 'Sunday' : 'Sunday', 'Monday' : 'Monday', 'Tuesday' : 'Tuesday', 'Wednesday' : 'Wednesday', 'Thursday' : 'Thursday', 'Friday' : 'Friday', 'Saturday' : 'Saturday', // months of the year 'January' : 'January', 'February' : 'February', 'March' : 'March', 'April' : 'April', 'May' : 'May', 'June' : 'June', 'July' : 'July', 'August' : 'August', 'September' : 'September', 'October' : 'October', 'November' : 'November', 'December' : 'December', // difference words 'ago' : 'ago', 'from now' : 'from now', // date phrases 'year' : 'year', 'years' : 'years', 'month' : 'month', 'months' : 'months', 'day' : 'day', 'days' : 'days', }; /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; if (typeof(LocalComments.dateDifference) == 'undefined') LocalComments.dateDifference = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; replace_text(document.getElementById(element_id), /(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCFullYear(old_year, convert_month_to_number(old_month), old_day); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // determine the time offset var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = language['Today']; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = language['Yesterday']; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = language['Tomorrow']; else { // calculate day of week var day_names = new Array(language['Sunday'], language['Monday'], language['Tuesday'], language['Wednesday'], language['Thursday'], language['Friday'], language['Saturday']); var day_of_the_week = day_names[time.getDay()]; if (LocalComments.dateDifference) { // calculate time difference from today and the timestamp today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = language['ago']; if (days_ago <= 7) last = language['last'] + ' '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = language['from now']; if (days_ago >= -7) last = language['this'] + ' '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize(language['year'], difference.getYear() - 70, language['years']); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize(language['month'], difference.getMonth(), language['months']); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize(language['day'], difference.getDate(), language['days']); descriptive_difference.push(new_days_ago); } descriptive_difference = ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } else { descriptive_difference = ''; last = ''; } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + descriptive_difference; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return return_date; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array(language['January'], language['February'], language['March'], language['April'], language['May'], language['June'], language['July'], language['August'], language['September'], language['October'], language['November'], language['December']); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } function replace_text(node, search, replace) { if (node.nodeType == 3) { var value = node.nodeValue; var matches = value.match(search); if (matches != null) { var node_parent_node = node.parentNode; var old_node = node; // old_node_list = node.parentNode.childNodes; for (match = 0; match < matches.length; match++) { var position; if (after_match != null && length != null) position = after_match.search(search) + before_match.length + length; else position = value.search(search); var length = matches[match].toString().length; var before_match = value.substring(0, position); var after_match = value.substring(position + length); var first_span = document.createElement('span'); first_span.setAttribute('style', 'font-size: 95%; white-space: nowrap;'); var second_span = document.createElement('span'); second_span.setAttribute('class', 'localcomments'); second_span.setAttribute('title', matches[match]); second_span.appendChild(document.createTextNode(matches[match].toString().replace(search, replace))); first_span.appendChild(second_span); var new_node = document.createDocumentFragment(); new_node.appendChild(document.createTextNode(before_match)); new_node.appendChild(first_span); new_node.appendChild(document.createTextNode(after_match)); // new_node_list = new_node.childNodes; node_parent_node.replaceChild(new_node, old_node); // old_node_list = new_node_list; break; } } } else { var children = [], child = node.firstChild; while (child) { children[children.length] = child; child = child.nextSibling; } for (var child = 0; child < children.length; child++) replace_text(children[child], search, replace); } } }); fej250yhova5fzgmxitnrlkugxc9mp3 14783 14782 2009-07-17T17:48:50Z Gary King 3640 rm comma 14783 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { // wgCanonicalNamespace = unsafeWindow.wgCanonicalNamespace /* Language */ var language = { // relative terms 'Today' : 'Today', 'Yesterday' : 'Yesterday', 'Tomorrow' : 'Tomorrow', 'last' : 'last', 'this' : 'this', // days of the week 'Sunday' : 'Sunday', 'Monday' : 'Monday', 'Tuesday' : 'Tuesday', 'Wednesday' : 'Wednesday', 'Thursday' : 'Thursday', 'Friday' : 'Friday', 'Saturday' : 'Saturday', // months of the year 'January' : 'January', 'February' : 'February', 'March' : 'March', 'April' : 'April', 'May' : 'May', 'June' : 'June', 'July' : 'July', 'August' : 'August', 'September' : 'September', 'October' : 'October', 'November' : 'November', 'December' : 'December', // difference words 'ago' : 'ago', 'from now' : 'from now', // date phrases 'year' : 'year', 'years' : 'years', 'month' : 'month', 'months' : 'months', 'day' : 'day', 'days' : 'days' }; /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; if (typeof(LocalComments.dateDifference) == 'undefined') LocalComments.dateDifference = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; replace_text(document.getElementById(element_id), /(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCFullYear(old_year, convert_month_to_number(old_month), old_day); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // determine the time offset var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = language['Today']; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = language['Yesterday']; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = language['Tomorrow']; else { // calculate day of week var day_names = new Array(language['Sunday'], language['Monday'], language['Tuesday'], language['Wednesday'], language['Thursday'], language['Friday'], language['Saturday']); var day_of_the_week = day_names[time.getDay()]; if (LocalComments.dateDifference) { // calculate time difference from today and the timestamp today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = language['ago']; if (days_ago <= 7) last = language['last'] + ' '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = language['from now']; if (days_ago >= -7) last = language['this'] + ' '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize(language['year'], difference.getYear() - 70, language['years']); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize(language['month'], difference.getMonth(), language['months']); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize(language['day'], difference.getDate(), language['days']); descriptive_difference.push(new_days_ago); } descriptive_difference = ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } else { descriptive_difference = ''; last = ''; } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + descriptive_difference; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return return_date; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array(language['January'], language['February'], language['March'], language['April'], language['May'], language['June'], language['July'], language['August'], language['September'], language['October'], language['November'], language['December']); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } function replace_text(node, search, replace) { if (node.nodeType == 3) { var value = node.nodeValue; var matches = value.match(search); if (matches != null) { var node_parent_node = node.parentNode; var old_node = node; // old_node_list = node.parentNode.childNodes; for (match = 0; match < matches.length; match++) { var position; if (after_match != null && length != null) position = after_match.search(search) + before_match.length + length; else position = value.search(search); var length = matches[match].toString().length; var before_match = value.substring(0, position); var after_match = value.substring(position + length); var first_span = document.createElement('span'); first_span.setAttribute('style', 'font-size: 95%; white-space: nowrap;'); var second_span = document.createElement('span'); second_span.setAttribute('class', 'localcomments'); second_span.setAttribute('title', matches[match]); second_span.appendChild(document.createTextNode(matches[match].toString().replace(search, replace))); first_span.appendChild(second_span); var new_node = document.createDocumentFragment(); new_node.appendChild(document.createTextNode(before_match)); new_node.appendChild(first_span); new_node.appendChild(document.createTextNode(after_match)); // new_node_list = new_node.childNodes; node_parent_node.replaceChild(new_node, old_node); // old_node_list = new_node_list; break; } } } else { var children = [], child = node.firstChild; while (child) { children[children.length] = child; child = child.nextSibling; } for (var child = 0; child < children.length; child++) replace_text(children[child], search, replace); } } }); ltw19wesylq2lhbg42mofnsk943zehs 14784 14783 2009-07-17T18:21:54Z Gary King 3640 get rid of second_span 14784 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { // wgCanonicalNamespace = unsafeWindow.wgCanonicalNamespace /* Language */ var language = { // relative terms 'Today' : 'Today', 'Yesterday' : 'Yesterday', 'Tomorrow' : 'Tomorrow', 'last' : 'last', 'this' : 'this', // days of the week 'Sunday' : 'Sunday', 'Monday' : 'Monday', 'Tuesday' : 'Tuesday', 'Wednesday' : 'Wednesday', 'Thursday' : 'Thursday', 'Friday' : 'Friday', 'Saturday' : 'Saturday', // months of the year 'January' : 'January', 'February' : 'February', 'March' : 'March', 'April' : 'April', 'May' : 'May', 'June' : 'June', 'July' : 'July', 'August' : 'August', 'September' : 'September', 'October' : 'October', 'November' : 'November', 'December' : 'December', // difference words 'ago' : 'ago', 'from now' : 'from now', // date phrases 'year' : 'year', 'years' : 'years', 'month' : 'month', 'months' : 'months', 'day' : 'day', 'days' : 'days' }; /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; if (typeof(LocalComments.dateDifference) == 'undefined') LocalComments.dateDifference = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; replace_text(document.getElementById(element_id), /(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCFullYear(old_year, convert_month_to_number(old_month), old_day); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // determine the time offset var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = language['Today']; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = language['Yesterday']; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = language['Tomorrow']; else { // calculate day of week var day_names = new Array(language['Sunday'], language['Monday'], language['Tuesday'], language['Wednesday'], language['Thursday'], language['Friday'], language['Saturday']); var day_of_the_week = day_names[time.getDay()]; if (LocalComments.dateDifference) { // calculate time difference from today and the timestamp today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = language['ago']; if (days_ago <= 7) last = language['last'] + ' '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = language['from now']; if (days_ago >= -7) last = language['this'] + ' '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize(language['year'], difference.getYear() - 70, language['years']); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize(language['month'], difference.getMonth(), language['months']); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize(language['day'], difference.getDate(), language['days']); descriptive_difference.push(new_days_ago); } descriptive_difference = ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } else { descriptive_difference = ''; last = ''; } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + descriptive_difference; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return return_date; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array(language['January'], language['February'], language['March'], language['April'], language['May'], language['June'], language['July'], language['August'], language['September'], language['October'], language['November'], language['December']); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } function replace_text(node, search, replace) { if (node.nodeType == 3) { var value = node.nodeValue; var matches = value.match(search); if (matches != null) { var node_parent_node = node.parentNode; var old_node = node; // old_node_list = node.parentNode.childNodes; for (match = 0; match < matches.length; match++) { // Create <span style="font-size: 95%; white-space: nowrap;" class="localcomments" title="MATCHES[MATCH]">MATCHES[MATCH]</span> var position; if (after_match != null && length != null) position = after_match.search(search) + before_match.length + length; else position = value.search(search); var length = matches[match].toString().length; var before_match = value.substring(0, position); var after_match = value.substring(position + length); var span = document.createElement('span'); span.setAttribute('style', 'font-size: 95%; white-space: nowrap;'); span.setAttribute('class', 'localcomments'); span.setAttribute('title', matches[match]); span.appendChild(document.createTextNode(matches[match].toString().replace(search, replace))); var new_node = document.createDocumentFragment(); new_node.appendChild(document.createTextNode(before_match)); new_node.appendChild(span); new_node.appendChild(document.createTextNode(after_match)); // new_node_list = new_node.childNodes; node_parent_node.replaceChild(new_node, old_node); // old_node_list = new_node_list; break; } } } else { var children = [], child = node.firstChild; while (child) { children[children.length] = child; child = child.nextSibling; } for (var child = 0; child < children.length; child++) replace_text(children[child], search, replace); } } }); q80d5ifemud5tudw3f0ruwc1cjsuy4b 14785 14784 2009-07-17T18:27:15Z Gary King 3640 reorder 14785 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { // wgCanonicalNamespace = unsafeWindow.wgCanonicalNamespace /* Language */ var language = { // relative terms 'Today' : 'Today', 'Yesterday' : 'Yesterday', 'Tomorrow' : 'Tomorrow', 'last' : 'last', 'this' : 'this', // days of the week 'Sunday' : 'Sunday', 'Monday' : 'Monday', 'Tuesday' : 'Tuesday', 'Wednesday' : 'Wednesday', 'Thursday' : 'Thursday', 'Friday' : 'Friday', 'Saturday' : 'Saturday', // months of the year 'January' : 'January', 'February' : 'February', 'March' : 'March', 'April' : 'April', 'May' : 'May', 'June' : 'June', 'July' : 'July', 'August' : 'August', 'September' : 'September', 'October' : 'October', 'November' : 'November', 'December' : 'December', // difference words 'ago' : 'ago', 'from now' : 'from now', // date phrases 'year' : 'year', 'years' : 'years', 'month' : 'month', 'months' : 'months', 'day' : 'day', 'days' : 'days' }; /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; if (typeof(LocalComments.dateDifference) == 'undefined') LocalComments.dateDifference = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; replace_text(document.getElementById(element_id), /(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCFullYear(old_year, convert_month_to_number(old_month), old_day); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // determine the time offset var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = language['Today']; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = language['Yesterday']; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = language['Tomorrow']; else { // calculate day of week var day_names = new Array(language['Sunday'], language['Monday'], language['Tuesday'], language['Wednesday'], language['Thursday'], language['Friday'], language['Saturday']); var day_of_the_week = day_names[time.getDay()]; if (LocalComments.dateDifference) { // calculate time difference from today and the timestamp today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = language['ago']; if (days_ago <= 7) last = language['last'] + ' '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = language['from now']; if (days_ago >= -7) last = language['this'] + ' '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize(language['year'], difference.getYear() - 70, language['years']); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize(language['month'], difference.getMonth(), language['months']); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize(language['day'], difference.getDate(), language['days']); descriptive_difference.push(new_days_ago); } descriptive_difference = ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } else { descriptive_difference = ''; last = ''; } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + descriptive_difference; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return return_date; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array(language['January'], language['February'], language['March'], language['April'], language['May'], language['June'], language['July'], language['August'], language['September'], language['October'], language['November'], language['December']); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } function replace_text(node, search, replace) { if (node.nodeType == 3) { var value = node.nodeValue; var matches = value.match(search); if (matches != null) { var node_parent_node = node.parentNode; var old_node = node; // old_node_list = node.parentNode.childNodes; for (match = 0; match < matches.length; match++) { // Create <span class="localcomments" style="font-size: 95%; white-space: nowrap;" title="MATCHES[MATCH]">MATCHES[MATCH]</span> var position; if (after_match != null && length != null) position = after_match.search(search) + before_match.length + length; else position = value.search(search); var length = matches[match].toString().length; var before_match = value.substring(0, position); var after_match = value.substring(position + length); var span = document.createElement('span'); span.setAttribute('class', 'localcomments'); span.setAttribute('style', 'font-size: 95%; white-space: nowrap;'); span.setAttribute('title', matches[match]); span.appendChild(document.createTextNode(matches[match].toString().replace(search, replace))); var new_node = document.createDocumentFragment(); new_node.appendChild(document.createTextNode(before_match)); new_node.appendChild(span); new_node.appendChild(document.createTextNode(after_match)); // new_node_list = new_node.childNodes; node_parent_node.replaceChild(new_node, old_node); // old_node_list = new_node_list; break; } } } else { var children = [], child = node.firstChild; while (child) { children[children.length] = child; child = child.nextSibling; } for (var child = 0; child < children.length; child++) replace_text(children[child], search, replace); } } }); 1r8yx8vz4p6hmjdi39t7dmfwehbzubl 14786 14785 2009-07-17T19:05:55Z Gary King 3640 rm unnecessary comments 14786 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { // wgCanonicalNamespace = unsafeWindow.wgCanonicalNamespace /* Language */ var language = { // relative terms 'Today' : 'Today', 'Yesterday' : 'Yesterday', 'Tomorrow' : 'Tomorrow', 'last' : 'last', 'this' : 'this', // days of the week 'Sunday' : 'Sunday', 'Monday' : 'Monday', 'Tuesday' : 'Tuesday', 'Wednesday' : 'Wednesday', 'Thursday' : 'Thursday', 'Friday' : 'Friday', 'Saturday' : 'Saturday', // months of the year 'January' : 'January', 'February' : 'February', 'March' : 'March', 'April' : 'April', 'May' : 'May', 'June' : 'June', 'July' : 'July', 'August' : 'August', 'September' : 'September', 'October' : 'October', 'November' : 'November', 'December' : 'December', // difference words 'ago' : 'ago', 'from now' : 'from now', // date phrases 'year' : 'year', 'years' : 'years', 'month' : 'month', 'months' : 'months', 'day' : 'day', 'days' : 'days' }; /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; if (typeof(LocalComments.dateDifference) == 'undefined') LocalComments.dateDifference = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; replace_text(document.getElementById(element_id), /(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCFullYear(old_year, convert_month_to_number(old_month), old_day); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // determine the time offset var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = language['Today']; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = language['Yesterday']; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = language['Tomorrow']; else { // calculate day of week var day_names = new Array(language['Sunday'], language['Monday'], language['Tuesday'], language['Wednesday'], language['Thursday'], language['Friday'], language['Saturday']); var day_of_the_week = day_names[time.getDay()]; if (LocalComments.dateDifference) { // calculate time difference from today and the timestamp today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = language['ago']; if (days_ago <= 7) last = language['last'] + ' '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = language['from now']; if (days_ago >= -7) last = language['this'] + ' '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize(language['year'], difference.getYear() - 70, language['years']); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize(language['month'], difference.getMonth(), language['months']); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize(language['day'], difference.getDate(), language['days']); descriptive_difference.push(new_days_ago); } descriptive_difference = ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } else { descriptive_difference = ''; last = ''; } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + descriptive_difference; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return return_date; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array(language['January'], language['February'], language['March'], language['April'], language['May'], language['June'], language['July'], language['August'], language['September'], language['October'], language['November'], language['December']); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } function replace_text(node, search, replace) { if (node.nodeType == 3) { var value = node.nodeValue; var matches = value.match(search); if (matches != null) { var node_parent_node = node.parentNode; var old_node = node; // old_node_list = node.parentNode.childNodes; for (match = 0; match < matches.length; match++) { // Create <span class="localcomments" style="font-size: 95%; white-space: nowrap;" title="MATCHES[MATCH]">MATCHES[MATCH]</span> var position; if (after_match != null && length != null) position = after_match.search(search) + before_match.length + length; else position = value.search(search); var length = matches[match].toString().length; var before_match = value.substring(0, position); var after_match = value.substring(position + length); var span = document.createElement('span'); span.setAttribute('class', 'localcomments'); span.setAttribute('style', 'font-size: 95%; white-space: nowrap;'); span.setAttribute('title', matches[match]); span.appendChild(document.createTextNode(matches[match].toString().replace(search, replace))); var new_node = document.createDocumentFragment(); new_node.appendChild(document.createTextNode(before_match)); new_node.appendChild(span); new_node.appendChild(document.createTextNode(after_match)); node_parent_node.replaceChild(new_node, old_node); break; } } } else { var children = [], child = node.firstChild; while (child) { children[children.length] = child; child = child.nextSibling; } for (var child = 0; child < children.length; child++) replace_text(children[child], search, replace); } } }); 047k8imo00ltfbqiltwzm68khk831dl 14787 14786 2009-07-17T19:07:57Z Gary King 3640 rm class for nw 14787 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { // wgCanonicalNamespace = unsafeWindow.wgCanonicalNamespace /* Language */ var language = { // relative terms 'Today' : 'Today', 'Yesterday' : 'Yesterday', 'Tomorrow' : 'Tomorrow', 'last' : 'last', 'this' : 'this', // days of the week 'Sunday' : 'Sunday', 'Monday' : 'Monday', 'Tuesday' : 'Tuesday', 'Wednesday' : 'Wednesday', 'Thursday' : 'Thursday', 'Friday' : 'Friday', 'Saturday' : 'Saturday', // months of the year 'January' : 'January', 'February' : 'February', 'March' : 'March', 'April' : 'April', 'May' : 'May', 'June' : 'June', 'July' : 'July', 'August' : 'August', 'September' : 'September', 'October' : 'October', 'November' : 'November', 'December' : 'December', // difference words 'ago' : 'ago', 'from now' : 'from now', // date phrases 'year' : 'year', 'years' : 'years', 'month' : 'month', 'months' : 'months', 'day' : 'day', 'days' : 'days' }; /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; if (typeof(LocalComments.dateDifference) == 'undefined') LocalComments.dateDifference = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; replace_text(document.getElementById(element_id), /(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCFullYear(old_year, convert_month_to_number(old_month), old_day); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // determine the time offset var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = language['Today']; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = language['Yesterday']; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = language['Tomorrow']; else { // calculate day of week var day_names = new Array(language['Sunday'], language['Monday'], language['Tuesday'], language['Wednesday'], language['Thursday'], language['Friday'], language['Saturday']); var day_of_the_week = day_names[time.getDay()]; if (LocalComments.dateDifference) { // calculate time difference from today and the timestamp today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = language['ago']; if (days_ago <= 7) last = language['last'] + ' '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = language['from now']; if (days_ago >= -7) last = language['this'] + ' '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize(language['year'], difference.getYear() - 70, language['years']); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize(language['month'], difference.getMonth(), language['months']); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize(language['day'], difference.getDate(), language['days']); descriptive_difference.push(new_days_ago); } descriptive_difference = ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } else { descriptive_difference = ''; last = ''; } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + descriptive_difference; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return return_date; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array(language['January'], language['February'], language['March'], language['April'], language['May'], language['June'], language['July'], language['August'], language['September'], language['October'], language['November'], language['December']); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } function replace_text(node, search, replace) { if (node.nodeType == 3) { var value = node.nodeValue; var matches = value.match(search); if (matches != null) { var node_parent_node = node.parentNode; var old_node = node; // old_node_list = node.parentNode.childNodes; for (match = 0; match < matches.length; match++) { // Create <span class="localcomments" style="font-size: 95%; white-space: nowrap;" title="MATCHES[MATCH]">MATCHES[MATCH]</span> var position; if (after_match != null && length != null) position = after_match.search(search) + before_match.length + length; else position = value.search(search); var length = matches[match].toString().length; var before_match = value.substring(0, position); var after_match = value.substring(position + length); var span = document.createElement('span'); // span.setAttribute('class', 'localcomments'); span.setAttribute('style', 'font-size: 95%; white-space: nowrap;'); span.setAttribute('title', matches[match]); span.appendChild(document.createTextNode(matches[match].toString().replace(search, replace))); var new_node = document.createDocumentFragment(); new_node.appendChild(document.createTextNode(before_match)); new_node.appendChild(span); new_node.appendChild(document.createTextNode(after_match)); node_parent_node.replaceChild(new_node, old_node); break; } } } else { var children = [], child = node.firstChild; while (child) { children[children.length] = child; child = child.nextSibling; } for (var child = 0; child < children.length; child++) replace_text(children[child], search, replace); } } }); liwzofqkzakzu8m386yfd9wtu4btnmh 14788 14787 2009-07-17T19:14:12Z Gary King 3640 .style. 14788 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { // wgCanonicalNamespace = unsafeWindow.wgCanonicalNamespace /* Language */ var language = { // relative terms 'Today' : 'Today', 'Yesterday' : 'Yesterday', 'Tomorrow' : 'Tomorrow', 'last' : 'last', 'this' : 'this', // days of the week 'Sunday' : 'Sunday', 'Monday' : 'Monday', 'Tuesday' : 'Tuesday', 'Wednesday' : 'Wednesday', 'Thursday' : 'Thursday', 'Friday' : 'Friday', 'Saturday' : 'Saturday', // months of the year 'January' : 'January', 'February' : 'February', 'March' : 'March', 'April' : 'April', 'May' : 'May', 'June' : 'June', 'July' : 'July', 'August' : 'August', 'September' : 'September', 'October' : 'October', 'November' : 'November', 'December' : 'December', // difference words 'ago' : 'ago', 'from now' : 'from now', // date phrases 'year' : 'year', 'years' : 'years', 'month' : 'month', 'months' : 'months', 'day' : 'day', 'days' : 'days' }; /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; if (typeof(LocalComments.dateDifference) == 'undefined') LocalComments.dateDifference = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; replace_text(document.getElementById(element_id), /(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCFullYear(old_year, convert_month_to_number(old_month), old_day); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // determine the time offset var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; // return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = language['Today']; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = language['Yesterday']; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = language['Tomorrow']; else { // calculate day of week var day_names = new Array(language['Sunday'], language['Monday'], language['Tuesday'], language['Wednesday'], language['Thursday'], language['Friday'], language['Saturday']); var day_of_the_week = day_names[time.getDay()]; if (LocalComments.dateDifference) { // calculate time difference from today and the timestamp today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = language['ago']; if (days_ago <= 7) last = language['last'] + ' '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = language['from now']; if (days_ago >= -7) last = language['this'] + ' '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize(language['year'], difference.getYear() - 70, language['years']); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize(language['month'], difference.getMonth(), language['months']); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize(language['day'], difference.getDate(), language['days']); descriptive_difference.push(new_days_ago); } descriptive_difference = ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } else { descriptive_difference = ''; last = ''; } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + descriptive_difference; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return return_date; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array(language['January'], language['February'], language['March'], language['April'], language['May'], language['June'], language['July'], language['August'], language['September'], language['October'], language['November'], language['December']); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } function replace_text(node, search, replace) { if (node.nodeType == 3) { var value = node.nodeValue; var matches = value.match(search); if (matches != null) { var node_parent_node = node.parentNode; var old_node = node; // old_node_list = node.parentNode.childNodes; for (match = 0; match < matches.length; match++) { // Create <span class="localcomments" style="font-size: 95%; white-space: nowrap;" title="MATCHES[MATCH]">MATCHES[MATCH]</span> var position; if (after_match != null && length != null) position = after_match.search(search) + before_match.length + length; else position = value.search(search); var length = matches[match].toString().length; var before_match = value.substring(0, position); var after_match = value.substring(position + length); var span = document.createElement('span'); span.setAttribute('class', 'localcomments'); span.style.fontSize = '95%'; span.style.whiteSpace = 'nowrap'; span.setAttribute('title', matches[match]); span.appendChild(document.createTextNode(matches[match].toString().replace(search, replace))); var new_node = document.createDocumentFragment(); new_node.appendChild(document.createTextNode(before_match)); new_node.appendChild(span); new_node.appendChild(document.createTextNode(after_match)); node_parent_node.replaceChild(new_node, old_node); break; } } } else { var children = [], child = node.firstChild; while (child) { children[children.length] = child; child = child.nextSibling; } for (var child = 0; child < children.length; child++) replace_text(children[child], search, replace); } } }); c90adt4hrrneyqs5om9mgg5zurv00a1 14789 14788 2009-07-27T05:00:18Z Gary King 3640 add 24 hour clock 14789 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { // wgCanonicalNamespace = unsafeWindow.wgCanonicalNamespace /* Language */ var language = { // relative terms 'Today' : 'Today', 'Yesterday' : 'Yesterday', 'Tomorrow' : 'Tomorrow', 'last' : 'last', 'this' : 'this', // days of the week 'Sunday' : 'Sunday', 'Monday' : 'Monday', 'Tuesday' : 'Tuesday', 'Wednesday' : 'Wednesday', 'Thursday' : 'Thursday', 'Friday' : 'Friday', 'Saturday' : 'Saturday', // months of the year 'January' : 'January', 'February' : 'February', 'March' : 'March', 'April' : 'April', 'May' : 'May', 'June' : 'June', 'July' : 'July', 'August' : 'August', 'September' : 'September', 'October' : 'October', 'November' : 'November', 'December' : 'December', // difference words 'ago' : 'ago', 'from now' : 'from now', // date phrases 'year' : 'year', 'years' : 'years', 'month' : 'month', 'months' : 'months', 'day' : 'day', 'days' : 'days' }; /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.24hours) == 'undefined') LocalComments.24hours = false; if (typeof(LocalComments.dateDifference) == 'undefined') LocalComments.dateDifference = true; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; replace_text(document.getElementById(element_id), /(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCFullYear(old_year, convert_month_to_number(old_month), old_day); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // determine the time offset var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm; if (!LocalComments.24hours) { ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; } // return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = language['Today']; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = language['Yesterday']; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = language['Tomorrow']; else { // calculate day of week var day_names = new Array(language['Sunday'], language['Monday'], language['Tuesday'], language['Wednesday'], language['Thursday'], language['Friday'], language['Saturday']); var day_of_the_week = day_names[time.getDay()]; if (LocalComments.dateDifference) { // calculate time difference from today and the timestamp today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = language['ago']; if (days_ago <= 7) last = language['last'] + ' '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = language['from now']; if (days_ago >= -7) last = language['this'] + ' '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize(language['year'], difference.getYear() - 70, language['years']); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize(language['month'], difference.getMonth(), language['months']); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize(language['day'], difference.getDate(), language['days']); descriptive_difference.push(new_days_ago); } descriptive_difference = ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } else { descriptive_difference = ''; last = ''; } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + descriptive_difference; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return return_date; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array(language['January'], language['February'], language['March'], language['April'], language['May'], language['June'], language['July'], language['August'], language['September'], language['October'], language['November'], language['December']); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } function replace_text(node, search, replace) { if (node.nodeType == 3) { var value = node.nodeValue; var matches = value.match(search); if (matches != null) { var node_parent_node = node.parentNode; var old_node = node; // old_node_list = node.parentNode.childNodes; for (match = 0; match < matches.length; match++) { // Create <span class="localcomments" style="font-size: 95%; white-space: nowrap;" title="MATCHES[MATCH]">MATCHES[MATCH]</span> var position; if (after_match != null && length != null) position = after_match.search(search) + before_match.length + length; else position = value.search(search); var length = matches[match].toString().length; var before_match = value.substring(0, position); var after_match = value.substring(position + length); var span = document.createElement('span'); span.setAttribute('class', 'localcomments'); span.style.fontSize = '95%'; span.style.whiteSpace = 'nowrap'; span.setAttribute('title', matches[match]); span.appendChild(document.createTextNode(matches[match].toString().replace(search, replace))); var new_node = document.createDocumentFragment(); new_node.appendChild(document.createTextNode(before_match)); new_node.appendChild(span); new_node.appendChild(document.createTextNode(after_match)); node_parent_node.replaceChild(new_node, old_node); break; } } } else { var children = [], child = node.firstChild; while (child) { children[children.length] = child; child = child.nextSibling; } for (var child = 0; child < children.length; child++) replace_text(children[child], search, replace); } } }); swpglpvoq32cqz8ussm03ldw1u88md2 14790 14789 2009-07-27T05:01:44Z Gary King 3640 fix 14790 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { // wgCanonicalNamespace = unsafeWindow.wgCanonicalNamespace /* Language */ var language = { // relative terms 'Today' : 'Today', 'Yesterday' : 'Yesterday', 'Tomorrow' : 'Tomorrow', 'last' : 'last', 'this' : 'this', // days of the week 'Sunday' : 'Sunday', 'Monday' : 'Monday', 'Tuesday' : 'Tuesday', 'Wednesday' : 'Wednesday', 'Thursday' : 'Thursday', 'Friday' : 'Friday', 'Saturday' : 'Saturday', // months of the year 'January' : 'January', 'February' : 'February', 'March' : 'March', 'April' : 'April', 'May' : 'May', 'June' : 'June', 'July' : 'July', 'August' : 'August', 'September' : 'September', 'October' : 'October', 'November' : 'November', 'December' : 'December', // difference words 'ago' : 'ago', 'from now' : 'from now', // date phrases 'year' : 'year', 'years' : 'years', 'month' : 'month', 'months' : 'months', 'day' : 'day', 'days' : 'days' }; /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateDifference) == 'undefined') LocalComments.dateDifference = true; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; if (typeof(LocalComments.twentyfourhours) == 'undefined') LocalComments.twentyfourhours = false; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; replace_text(document.getElementById(element_id), /(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCFullYear(old_year, convert_month_to_number(old_month), old_day); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // determine the time offset var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm; if (!LocalComments.twentyfourhours) { ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; } // return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = language['Today']; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = language['Yesterday']; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = language['Tomorrow']; else { // calculate day of week var day_names = new Array(language['Sunday'], language['Monday'], language['Tuesday'], language['Wednesday'], language['Thursday'], language['Friday'], language['Saturday']); var day_of_the_week = day_names[time.getDay()]; if (LocalComments.dateDifference) { // calculate time difference from today and the timestamp today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = language['ago']; if (days_ago <= 7) last = language['last'] + ' '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = language['from now']; if (days_ago >= -7) last = language['this'] + ' '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize(language['year'], difference.getYear() - 70, language['years']); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize(language['month'], difference.getMonth(), language['months']); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize(language['day'], difference.getDate(), language['days']); descriptive_difference.push(new_days_ago); } descriptive_difference = ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } else { descriptive_difference = ''; last = ''; } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + descriptive_difference; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return return_date; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array(language['January'], language['February'], language['March'], language['April'], language['May'], language['June'], language['July'], language['August'], language['September'], language['October'], language['November'], language['December']); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } function replace_text(node, search, replace) { if (node.nodeType == 3) { var value = node.nodeValue; var matches = value.match(search); if (matches != null) { var node_parent_node = node.parentNode; var old_node = node; // old_node_list = node.parentNode.childNodes; for (match = 0; match < matches.length; match++) { // Create <span class="localcomments" style="font-size: 95%; white-space: nowrap;" title="MATCHES[MATCH]">MATCHES[MATCH]</span> var position; if (after_match != null && length != null) position = after_match.search(search) + before_match.length + length; else position = value.search(search); var length = matches[match].toString().length; var before_match = value.substring(0, position); var after_match = value.substring(position + length); var span = document.createElement('span'); span.setAttribute('class', 'localcomments'); span.style.fontSize = '95%'; span.style.whiteSpace = 'nowrap'; span.setAttribute('title', matches[match]); span.appendChild(document.createTextNode(matches[match].toString().replace(search, replace))); var new_node = document.createDocumentFragment(); new_node.appendChild(document.createTextNode(before_match)); new_node.appendChild(span); new_node.appendChild(document.createTextNode(after_match)); node_parent_node.replaceChild(new_node, old_node); break; } } } else { var children = [], child = node.firstChild; while (child) { children[children.length] = child; child = child.nextSibling; } for (var child = 0; child < children.length; child++) replace_text(children[child], search, replace); } } }); 3yo37kw1c91bkqopdqdk3o9c7bybseg 14791 14790 2009-07-27T05:03:41Z Gary King 3640 empty 14791 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { // wgCanonicalNamespace = unsafeWindow.wgCanonicalNamespace /* Language */ var language = { // relative terms 'Today' : 'Today', 'Yesterday' : 'Yesterday', 'Tomorrow' : 'Tomorrow', 'last' : 'last', 'this' : 'this', // days of the week 'Sunday' : 'Sunday', 'Monday' : 'Monday', 'Tuesday' : 'Tuesday', 'Wednesday' : 'Wednesday', 'Thursday' : 'Thursday', 'Friday' : 'Friday', 'Saturday' : 'Saturday', // months of the year 'January' : 'January', 'February' : 'February', 'March' : 'March', 'April' : 'April', 'May' : 'May', 'June' : 'June', 'July' : 'July', 'August' : 'August', 'September' : 'September', 'October' : 'October', 'November' : 'November', 'December' : 'December', // difference words 'ago' : 'ago', 'from now' : 'from now', // date phrases 'year' : 'year', 'years' : 'years', 'month' : 'month', 'months' : 'months', 'day' : 'day', 'days' : 'days' }; /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateDifference) == 'undefined') LocalComments.dateDifference = true; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; if (typeof(LocalComments.twentyfourhours) == 'undefined') LocalComments.twentyfourhours = false; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; replace_text(document.getElementById(element_id), /(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCFullYear(old_year, convert_month_to_number(old_month), old_day); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // determine the time offset var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = ''; if (!LocalComments.twentyfourhours) { ampm = 'am'; if (hour > 11) ampm = 'pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; } // return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = language['Today']; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = language['Yesterday']; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = language['Tomorrow']; else { // calculate day of week var day_names = new Array(language['Sunday'], language['Monday'], language['Tuesday'], language['Wednesday'], language['Thursday'], language['Friday'], language['Saturday']); var day_of_the_week = day_names[time.getDay()]; if (LocalComments.dateDifference) { // calculate time difference from today and the timestamp today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = language['ago']; if (days_ago <= 7) last = language['last'] + ' '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = language['from now']; if (days_ago >= -7) last = language['this'] + ' '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize(language['year'], difference.getYear() - 70, language['years']); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize(language['month'], difference.getMonth(), language['months']); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize(language['day'], difference.getDate(), language['days']); descriptive_difference.push(new_days_ago); } descriptive_difference = ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } else { descriptive_difference = ''; last = ''; } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + descriptive_difference; } var time = hour + ':' + minute + ' ' + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return return_date; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array(language['January'], language['February'], language['March'], language['April'], language['May'], language['June'], language['July'], language['August'], language['September'], language['October'], language['November'], language['December']); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } function replace_text(node, search, replace) { if (node.nodeType == 3) { var value = node.nodeValue; var matches = value.match(search); if (matches != null) { var node_parent_node = node.parentNode; var old_node = node; // old_node_list = node.parentNode.childNodes; for (match = 0; match < matches.length; match++) { // Create <span class="localcomments" style="font-size: 95%; white-space: nowrap;" title="MATCHES[MATCH]">MATCHES[MATCH]</span> var position; if (after_match != null && length != null) position = after_match.search(search) + before_match.length + length; else position = value.search(search); var length = matches[match].toString().length; var before_match = value.substring(0, position); var after_match = value.substring(position + length); var span = document.createElement('span'); span.setAttribute('class', 'localcomments'); span.style.fontSize = '95%'; span.style.whiteSpace = 'nowrap'; span.setAttribute('title', matches[match]); span.appendChild(document.createTextNode(matches[match].toString().replace(search, replace))); var new_node = document.createDocumentFragment(); new_node.appendChild(document.createTextNode(before_match)); new_node.appendChild(span); new_node.appendChild(document.createTextNode(after_match)); node_parent_node.replaceChild(new_node, old_node); break; } } } else { var children = [], child = node.firstChild; while (child) { children[children.length] = child; child = child.nextSibling; } for (var child = 0; child < children.length; child++) replace_text(children[child], search, replace); } } }); b7abnqvup7nhps2v2rfd4xcqidwurs8 14792 14791 2009-07-27T05:05:17Z Gary King 3640 fix space 14792 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { // wgCanonicalNamespace = unsafeWindow.wgCanonicalNamespace /* Language */ var language = { // relative terms 'Today' : 'Today', 'Yesterday' : 'Yesterday', 'Tomorrow' : 'Tomorrow', 'last' : 'last', 'this' : 'this', // days of the week 'Sunday' : 'Sunday', 'Monday' : 'Monday', 'Tuesday' : 'Tuesday', 'Wednesday' : 'Wednesday', 'Thursday' : 'Thursday', 'Friday' : 'Friday', 'Saturday' : 'Saturday', // months of the year 'January' : 'January', 'February' : 'February', 'March' : 'March', 'April' : 'April', 'May' : 'May', 'June' : 'June', 'July' : 'July', 'August' : 'August', 'September' : 'September', 'October' : 'October', 'November' : 'November', 'December' : 'December', // difference words 'ago' : 'ago', 'from now' : 'from now', // date phrases 'year' : 'year', 'years' : 'years', 'month' : 'month', 'months' : 'months', 'day' : 'day', 'days' : 'days' }; /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateDifference) == 'undefined') LocalComments.dateDifference = true; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; if (typeof(LocalComments.twentyfourhours) == 'undefined') LocalComments.twentyfourhours = false; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; replace_text(document.getElementById(element_id), /(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCFullYear(old_year, convert_month_to_number(old_month), old_day); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // determine the time offset var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = ''; if (!LocalComments.twentyfourhours) { ampm = ' am'; if (hour > 11) ampm = ' pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; } // return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = language['Today']; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = language['Yesterday']; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = language['Tomorrow']; else { // calculate day of week var day_names = new Array(language['Sunday'], language['Monday'], language['Tuesday'], language['Wednesday'], language['Thursday'], language['Friday'], language['Saturday']); var day_of_the_week = day_names[time.getDay()]; if (LocalComments.dateDifference) { // calculate time difference from today and the timestamp today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = language['ago']; if (days_ago <= 7) last = language['last'] + ' '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = language['from now']; if (days_ago >= -7) last = language['this'] + ' '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize(language['year'], difference.getYear() - 70, language['years']); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize(language['month'], difference.getMonth(), language['months']); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize(language['day'], difference.getDate(), language['days']); descriptive_difference.push(new_days_ago); } descriptive_difference = ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } else { descriptive_difference = ''; last = ''; } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + descriptive_difference; } var time = hour + ':' + minute + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return return_date; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array(language['January'], language['February'], language['March'], language['April'], language['May'], language['June'], language['July'], language['August'], language['September'], language['October'], language['November'], language['December']); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } function replace_text(node, search, replace) { if (node.nodeType == 3) { var value = node.nodeValue; var matches = value.match(search); if (matches != null) { var node_parent_node = node.parentNode; var old_node = node; // old_node_list = node.parentNode.childNodes; for (match = 0; match < matches.length; match++) { // Create <span class="localcomments" style="font-size: 95%; white-space: nowrap;" title="MATCHES[MATCH]">MATCHES[MATCH]</span> var position; if (after_match != null && length != null) position = after_match.search(search) + before_match.length + length; else position = value.search(search); var length = matches[match].toString().length; var before_match = value.substring(0, position); var after_match = value.substring(position + length); var span = document.createElement('span'); span.setAttribute('class', 'localcomments'); span.style.fontSize = '95%'; span.style.whiteSpace = 'nowrap'; span.setAttribute('title', matches[match]); span.appendChild(document.createTextNode(matches[match].toString().replace(search, replace))); var new_node = document.createDocumentFragment(); new_node.appendChild(document.createTextNode(before_match)); new_node.appendChild(span); new_node.appendChild(document.createTextNode(after_match)); node_parent_node.replaceChild(new_node, old_node); break; } } } else { var children = [], child = node.firstChild; while (child) { children[children.length] = child; child = child.nextSibling; } for (var child = 0; child < children.length; child++) replace_text(children[child], search, replace); } } }); r5jf2fvlz7atdk43pia2hp9de3dgbxl 14793 14792 2009-07-27T05:10:41Z Gary King 3640 disable day of week 14793 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { // wgCanonicalNamespace = unsafeWindow.wgCanonicalNamespace /* Language */ var language = { // relative terms 'Today' : 'Today', 'Yesterday' : 'Yesterday', 'Tomorrow' : 'Tomorrow', 'last' : 'last', 'this' : 'this', // days of the week 'Sunday' : 'Sunday', 'Monday' : 'Monday', 'Tuesday' : 'Tuesday', 'Wednesday' : 'Wednesday', 'Thursday' : 'Thursday', 'Friday' : 'Friday', 'Saturday' : 'Saturday', // months of the year 'January' : 'January', 'February' : 'February', 'March' : 'March', 'April' : 'April', 'May' : 'May', 'June' : 'June', 'July' : 'July', 'August' : 'August', 'September' : 'September', 'October' : 'October', 'November' : 'November', 'December' : 'December', // difference words 'ago' : 'ago', 'from now' : 'from now', // date phrases 'year' : 'year', 'years' : 'years', 'month' : 'month', 'months' : 'months', 'day' : 'day', 'days' : 'days' }; /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateDifference) == 'undefined') LocalComments.dateDifference = true; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.dayOfWeek) == 'undefined') LocalComments.dayOfWeek = true; if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; if (typeof(LocalComments.twentyfourhours) == 'undefined') LocalComments.twentyfourhours = false; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; replace_text(document.getElementById(element_id), /(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCFullYear(old_year, convert_month_to_number(old_month), old_day); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // determine the time offset var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = ''; if (!LocalComments.twentyfourhours) { ampm = ' am'; if (hour > 11) ampm = ' pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; } // return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = language['Today']; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = language['Yesterday']; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = language['Tomorrow']; else { // calculate day of week var day_names = new Array(language['Sunday'], language['Monday'], language['Tuesday'], language['Wednesday'], language['Thursday'], language['Friday'], language['Saturday']); var day_of_the_week = ''; if (LocalComments.dayOfWeek) day_of_the_week = day_names[time.getDay()]; if (LocalComments.dateDifference) { // calculate time difference from today and the timestamp today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = language['ago']; if (days_ago <= 7) last = language['last'] + ' '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = language['from now']; if (days_ago >= -7) last = language['this'] + ' '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize(language['year'], difference.getYear() - 70, language['years']); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize(language['month'], difference.getMonth(), language['months']); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize(language['day'], difference.getDate(), language['days']); descriptive_difference.push(new_days_ago); } descriptive_difference = ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } else { descriptive_difference = ''; last = ''; } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + descriptive_difference; } var time = hour + ':' + minute + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return return_date; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array(language['January'], language['February'], language['March'], language['April'], language['May'], language['June'], language['July'], language['August'], language['September'], language['October'], language['November'], language['December']); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } function replace_text(node, search, replace) { if (node.nodeType == 3) { var value = node.nodeValue; var matches = value.match(search); if (matches != null) { var node_parent_node = node.parentNode; var old_node = node; // old_node_list = node.parentNode.childNodes; for (match = 0; match < matches.length; match++) { // Create <span class="localcomments" style="font-size: 95%; white-space: nowrap;" title="MATCHES[MATCH]">MATCHES[MATCH]</span> var position; if (after_match != null && length != null) position = after_match.search(search) + before_match.length + length; else position = value.search(search); var length = matches[match].toString().length; var before_match = value.substring(0, position); var after_match = value.substring(position + length); var span = document.createElement('span'); span.setAttribute('class', 'localcomments'); span.style.fontSize = '95%'; span.style.whiteSpace = 'nowrap'; span.setAttribute('title', matches[match]); span.appendChild(document.createTextNode(matches[match].toString().replace(search, replace))); var new_node = document.createDocumentFragment(); new_node.appendChild(document.createTextNode(before_match)); new_node.appendChild(span); new_node.appendChild(document.createTextNode(after_match)); node_parent_node.replaceChild(new_node, old_node); break; } } } else { var children = [], child = node.firstChild; while (child) { children[children.length] = child; child = child.nextSibling; } for (var child = 0; child < children.length; child++) replace_text(children[child], search, replace); } } }); 06ycw2vngncp9p0fhabgehq9cs17wli 14794 14793 2009-07-27T05:11:29Z Gary King 3640 change casing 14794 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { // wgCanonicalNamespace = unsafeWindow.wgCanonicalNamespace /* Language */ var language = { // relative terms 'Today' : 'Today', 'Yesterday' : 'Yesterday', 'Tomorrow' : 'Tomorrow', 'last' : 'last', 'this' : 'this', // days of the week 'Sunday' : 'Sunday', 'Monday' : 'Monday', 'Tuesday' : 'Tuesday', 'Wednesday' : 'Wednesday', 'Thursday' : 'Thursday', 'Friday' : 'Friday', 'Saturday' : 'Saturday', // months of the year 'January' : 'January', 'February' : 'February', 'March' : 'March', 'April' : 'April', 'May' : 'May', 'June' : 'June', 'July' : 'July', 'August' : 'August', 'September' : 'September', 'October' : 'October', 'November' : 'November', 'December' : 'December', // difference words 'ago' : 'ago', 'from now' : 'from now', // date phrases 'year' : 'year', 'years' : 'years', 'month' : 'month', 'months' : 'months', 'day' : 'day', 'days' : 'days' }; /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateDifference) == 'undefined') LocalComments.dateDifference = true; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.dayOfWeek) == 'undefined') LocalComments.dayOfWeek = true; if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; if (typeof(LocalComments.twentyFourHours) == 'undefined') LocalComments.twentyFourHours = false; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; replace_text(document.getElementById(element_id), /(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCFullYear(old_year, convert_month_to_number(old_month), old_day); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // determine the time offset var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = ''; if (!LocalComments.twentyFourHours) { ampm = ' am'; if (hour > 11) ampm = ' pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; } // return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = language['Today']; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = language['Yesterday']; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = language['Tomorrow']; else { // calculate day of week var day_names = new Array(language['Sunday'], language['Monday'], language['Tuesday'], language['Wednesday'], language['Thursday'], language['Friday'], language['Saturday']); var day_of_the_week = ''; if (LocalComments.dayOfWeek) day_of_the_week = day_names[time.getDay()]; if (LocalComments.dateDifference) { // calculate time difference from today and the timestamp today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = language['ago']; if (days_ago <= 7) last = language['last'] + ' '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = language['from now']; if (days_ago >= -7) last = language['this'] + ' '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize(language['year'], difference.getYear() - 70, language['years']); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize(language['month'], difference.getMonth(), language['months']); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize(language['day'], difference.getDate(), language['days']); descriptive_difference.push(new_days_ago); } descriptive_difference = ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } else { descriptive_difference = ''; last = ''; } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + descriptive_difference; } var time = hour + ':' + minute + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return return_date; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array(language['January'], language['February'], language['March'], language['April'], language['May'], language['June'], language['July'], language['August'], language['September'], language['October'], language['November'], language['December']); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } function replace_text(node, search, replace) { if (node.nodeType == 3) { var value = node.nodeValue; var matches = value.match(search); if (matches != null) { var node_parent_node = node.parentNode; var old_node = node; // old_node_list = node.parentNode.childNodes; for (match = 0; match < matches.length; match++) { // Create <span class="localcomments" style="font-size: 95%; white-space: nowrap;" title="MATCHES[MATCH]">MATCHES[MATCH]</span> var position; if (after_match != null && length != null) position = after_match.search(search) + before_match.length + length; else position = value.search(search); var length = matches[match].toString().length; var before_match = value.substring(0, position); var after_match = value.substring(position + length); var span = document.createElement('span'); span.setAttribute('class', 'localcomments'); span.style.fontSize = '95%'; span.style.whiteSpace = 'nowrap'; span.setAttribute('title', matches[match]); span.appendChild(document.createTextNode(matches[match].toString().replace(search, replace))); var new_node = document.createDocumentFragment(); new_node.appendChild(document.createTextNode(before_match)); new_node.appendChild(span); new_node.appendChild(document.createTextNode(after_match)); node_parent_node.replaceChild(new_node, old_node); break; } } } else { var children = [], child = node.firstChild; while (child) { children[children.length] = child; child = child.nextSibling; } for (var child = 0; child < children.length; child++) replace_text(children[child], search, replace); } } }); qy8yzuu35op62oqp43g78xxgthyhlst 14795 14794 2009-07-27T05:13:31Z Gary King 3640 [[WP:UNDO|Undid]] revision 304420185 by [[Special:Contributions/Gary King|Gary King]] ([[User talk:Gary King|talk]]) 14795 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { // wgCanonicalNamespace = unsafeWindow.wgCanonicalNamespace /* Language */ var language = { // relative terms 'Today' : 'Today', 'Yesterday' : 'Yesterday', 'Tomorrow' : 'Tomorrow', 'last' : 'last', 'this' : 'this', // days of the week 'Sunday' : 'Sunday', 'Monday' : 'Monday', 'Tuesday' : 'Tuesday', 'Wednesday' : 'Wednesday', 'Thursday' : 'Thursday', 'Friday' : 'Friday', 'Saturday' : 'Saturday', // months of the year 'January' : 'January', 'February' : 'February', 'March' : 'March', 'April' : 'April', 'May' : 'May', 'June' : 'June', 'July' : 'July', 'August' : 'August', 'September' : 'September', 'October' : 'October', 'November' : 'November', 'December' : 'December', // difference words 'ago' : 'ago', 'from now' : 'from now', // date phrases 'year' : 'year', 'years' : 'years', 'month' : 'month', 'months' : 'months', 'day' : 'day', 'days' : 'days' }; /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateDifference) == 'undefined') LocalComments.dateDifference = true; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; if (typeof(LocalComments.twentyFourHours) == 'undefined') LocalComments.twentyFourHours = false; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; replace_text(document.getElementById(element_id), /(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCFullYear(old_year, convert_month_to_number(old_month), old_day); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // determine the time offset var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = ''; if (!LocalComments.twentyFourHours) { ampm = ' am'; if (hour > 11) ampm = ' pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; } // return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = language['Today']; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = language['Yesterday']; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = language['Tomorrow']; else { // calculate day of week var day_names = new Array(language['Sunday'], language['Monday'], language['Tuesday'], language['Wednesday'], language['Thursday'], language['Friday'], language['Saturday']); var day_of_the_week = day_names[time.getDay()]; if (LocalComments.dateDifference) { // calculate time difference from today and the timestamp today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = language['ago']; if (days_ago <= 7) last = language['last'] + ' '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = language['from now']; if (days_ago >= -7) last = language['this'] + ' '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize(language['year'], difference.getYear() - 70, language['years']); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize(language['month'], difference.getMonth(), language['months']); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize(language['day'], difference.getDate(), language['days']); descriptive_difference.push(new_days_ago); } descriptive_difference = ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } else { descriptive_difference = ''; last = ''; } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + descriptive_difference; } var time = hour + ':' + minute + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return return_date; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array(language['January'], language['February'], language['March'], language['April'], language['May'], language['June'], language['July'], language['August'], language['September'], language['October'], language['November'], language['December']); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } function replace_text(node, search, replace) { if (node.nodeType == 3) { var value = node.nodeValue; var matches = value.match(search); if (matches != null) { var node_parent_node = node.parentNode; var old_node = node; // old_node_list = node.parentNode.childNodes; for (match = 0; match < matches.length; match++) { // Create <span class="localcomments" style="font-size: 95%; white-space: nowrap;" title="MATCHES[MATCH]">MATCHES[MATCH]</span> var position; if (after_match != null && length != null) position = after_match.search(search) + before_match.length + length; else position = value.search(search); var length = matches[match].toString().length; var before_match = value.substring(0, position); var after_match = value.substring(position + length); var span = document.createElement('span'); span.setAttribute('class', 'localcomments'); span.style.fontSize = '95%'; span.style.whiteSpace = 'nowrap'; span.setAttribute('title', matches[match]); span.appendChild(document.createTextNode(matches[match].toString().replace(search, replace))); var new_node = document.createDocumentFragment(); new_node.appendChild(document.createTextNode(before_match)); new_node.appendChild(span); new_node.appendChild(document.createTextNode(after_match)); node_parent_node.replaceChild(new_node, old_node); break; } } } else { var children = [], child = node.firstChild; while (child) { children[children.length] = child; child = child.nextSibling; } for (var child = 0; child < children.length; child++) replace_text(children[child], search, replace); } } }); jyj6feer9h644rcw89cc99qck8b4kiy 14796 14795 2009-09-19T23:58:34Z Gary King 3640 instructions on localization 14796 javascript text/javascript /* Documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { // wgCanonicalNamespace = unsafeWindow.wgCanonicalNamespace /* Language LOCALIZING THIS SCRIPT To localize this script, change the terms below, to the RIGHT of the colons, to the correct term used in that language. */ var language = { // relative terms 'Today' : 'Today', 'Yesterday' : 'Yesterday', 'Tomorrow' : 'Tomorrow', 'last' : 'last', 'this' : 'this', // days of the week 'Sunday' : 'Sunday', 'Monday' : 'Monday', 'Tuesday' : 'Tuesday', 'Wednesday' : 'Wednesday', 'Thursday' : 'Thursday', 'Friday' : 'Friday', 'Saturday' : 'Saturday', // months of the year 'January' : 'January', 'February' : 'February', 'March' : 'March', 'April' : 'April', 'May' : 'May', 'June' : 'June', 'July' : 'July', 'August' : 'August', 'September' : 'September', 'October' : 'October', 'November' : 'November', 'December' : 'December', // difference words 'ago' : 'ago', 'from now' : 'from now', // date phrases 'year' : 'year', 'years' : 'years', 'month' : 'month', 'months' : 'months', 'day' : 'day', 'days' : 'days' }; /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateDifference) == 'undefined') LocalComments.dateDifference = true; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; if (typeof(LocalComments.twentyFourHours) == 'undefined') LocalComments.twentyFourHours = false; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; replace_text(document.getElementById(element_id), /(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCFullYear(old_year, convert_month_to_number(old_month), old_day); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // determine the time offset var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = ''; if (!LocalComments.twentyFourHours) { ampm = ' am'; if (hour > 11) ampm = ' pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; } // return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = language['Today']; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = language['Yesterday']; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = language['Tomorrow']; else { // calculate day of week var day_names = new Array(language['Sunday'], language['Monday'], language['Tuesday'], language['Wednesday'], language['Thursday'], language['Friday'], language['Saturday']); var day_of_the_week = day_names[time.getDay()]; if (LocalComments.dateDifference) { // calculate time difference from today and the timestamp today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = language['ago']; if (days_ago <= 7) last = language['last'] + ' '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = language['from now']; if (days_ago >= -7) last = language['this'] + ' '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize(language['year'], difference.getYear() - 70, language['years']); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize(language['month'], difference.getMonth(), language['months']); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize(language['day'], difference.getDate(), language['days']); descriptive_difference.push(new_days_ago); } descriptive_difference = ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } else { descriptive_difference = ''; last = ''; } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + descriptive_difference; } var time = hour + ':' + minute + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return return_date; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array(language['January'], language['February'], language['March'], language['April'], language['May'], language['June'], language['July'], language['August'], language['September'], language['October'], language['November'], language['December']); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } function replace_text(node, search, replace) { if (node.nodeType == 3) { var value = node.nodeValue; var matches = value.match(search); if (matches != null) { var node_parent_node = node.parentNode; var old_node = node; // old_node_list = node.parentNode.childNodes; for (match = 0; match < matches.length; match++) { // Create <span class="localcomments" style="font-size: 95%; white-space: nowrap;" title="MATCHES[MATCH]">MATCHES[MATCH]</span> var position; if (after_match != null && length != null) position = after_match.search(search) + before_match.length + length; else position = value.search(search); var length = matches[match].toString().length; var before_match = value.substring(0, position); var after_match = value.substring(position + length); var span = document.createElement('span'); span.setAttribute('class', 'localcomments'); span.style.fontSize = '95%'; span.style.whiteSpace = 'nowrap'; span.setAttribute('title', matches[match]); span.appendChild(document.createTextNode(matches[match].toString().replace(search, replace))); var new_node = document.createDocumentFragment(); new_node.appendChild(document.createTextNode(before_match)); new_node.appendChild(span); new_node.appendChild(document.createTextNode(after_match)); node_parent_node.replaceChild(new_node, old_node); break; } } } else { var children = [], child = node.firstChild; while (child) { children[children.length] = child; child = child.nextSibling; } for (var child = 0; child < children.length; child++) replace_text(children[child], search, replace); } } }); ku425ai2rnhl6zyt3l4gq7ly69f4jg0 14797 14796 2009-09-19T23:59:32Z Gary King 3640 adding creds 14797 javascript text/javascript /* COMMENTS IN LOCAL TIME Original author: http://en.wikipedia.org/wiki/User:Gary_King English Wikipedia documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { // wgCanonicalNamespace = unsafeWindow.wgCanonicalNamespace /* Language LOCALIZING THIS SCRIPT To localize this script, change the terms below, to the RIGHT of the colons, to the correct term used in that language. */ var language = { // relative terms 'Today' : 'Today', 'Yesterday' : 'Yesterday', 'Tomorrow' : 'Tomorrow', 'last' : 'last', 'this' : 'this', // days of the week 'Sunday' : 'Sunday', 'Monday' : 'Monday', 'Tuesday' : 'Tuesday', 'Wednesday' : 'Wednesday', 'Thursday' : 'Thursday', 'Friday' : 'Friday', 'Saturday' : 'Saturday', // months of the year 'January' : 'January', 'February' : 'February', 'March' : 'March', 'April' : 'April', 'May' : 'May', 'June' : 'June', 'July' : 'July', 'August' : 'August', 'September' : 'September', 'October' : 'October', 'November' : 'November', 'December' : 'December', // difference words 'ago' : 'ago', 'from now' : 'from now', // date phrases 'year' : 'year', 'years' : 'years', 'month' : 'month', 'months' : 'months', 'day' : 'day', 'days' : 'days' }; /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateDifference) == 'undefined') LocalComments.dateDifference = true; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; if (typeof(LocalComments.twentyFourHours) == 'undefined') LocalComments.twentyFourHours = false; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; replace_text(document.getElementById(element_id), /(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCFullYear(old_year, convert_month_to_number(old_month), old_day); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // determine the time offset var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = ''; if (!LocalComments.twentyFourHours) { ampm = ' am'; if (hour > 11) ampm = ' pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; } // return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = language['Today']; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = language['Yesterday']; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = language['Tomorrow']; else { // calculate day of week var day_names = new Array(language['Sunday'], language['Monday'], language['Tuesday'], language['Wednesday'], language['Thursday'], language['Friday'], language['Saturday']); var day_of_the_week = day_names[time.getDay()]; if (LocalComments.dateDifference) { // calculate time difference from today and the timestamp today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = language['ago']; if (days_ago <= 7) last = language['last'] + ' '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = language['from now']; if (days_ago >= -7) last = language['this'] + ' '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize(language['year'], difference.getYear() - 70, language['years']); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize(language['month'], difference.getMonth(), language['months']); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize(language['day'], difference.getDate(), language['days']); descriptive_difference.push(new_days_ago); } descriptive_difference = ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } else { descriptive_difference = ''; last = ''; } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + descriptive_difference; } var time = hour + ':' + minute + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return return_date; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array(language['January'], language['February'], language['March'], language['April'], language['May'], language['June'], language['July'], language['August'], language['September'], language['October'], language['November'], language['December']); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } function replace_text(node, search, replace) { if (node.nodeType == 3) { var value = node.nodeValue; var matches = value.match(search); if (matches != null) { var node_parent_node = node.parentNode; var old_node = node; // old_node_list = node.parentNode.childNodes; for (match = 0; match < matches.length; match++) { // Create <span class="localcomments" style="font-size: 95%; white-space: nowrap;" title="MATCHES[MATCH]">MATCHES[MATCH]</span> var position; if (after_match != null && length != null) position = after_match.search(search) + before_match.length + length; else position = value.search(search); var length = matches[match].toString().length; var before_match = value.substring(0, position); var after_match = value.substring(position + length); var span = document.createElement('span'); span.setAttribute('class', 'localcomments'); span.style.fontSize = '95%'; span.style.whiteSpace = 'nowrap'; span.setAttribute('title', matches[match]); span.appendChild(document.createTextNode(matches[match].toString().replace(search, replace))); var new_node = document.createDocumentFragment(); new_node.appendChild(document.createTextNode(before_match)); new_node.appendChild(span); new_node.appendChild(document.createTextNode(after_match)); node_parent_node.replaceChild(new_node, old_node); break; } } } else { var children = [], child = node.firstChild; while (child) { children[children.length] = child; child = child.nextSibling; } for (var child = 0; child < children.length; child++) replace_text(children[child], search, replace); } } }); s79wbn6fhwaylj9ln63vb2fwbxs8xsl 14798 14797 2009-09-20T00:05:05Z Gary King 3640 add example 14798 javascript text/javascript /* COMMENTS IN LOCAL TIME Original author: http://en.wikipedia.org/wiki/User:Gary_King English Wikipedia documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { // wgCanonicalNamespace = unsafeWindow.wgCanonicalNamespace /* Language LOCALIZING THIS SCRIPT To localize this script, change the terms below, to the RIGHT of the colons, to the correct term used in that language. For example, in the French language, 'Today' : 'Today', would be 'Today' : 'Aujourd’hui', */ var language = { // relative terms 'Today' : 'Today', 'Yesterday' : 'Yesterday', 'Tomorrow' : 'Tomorrow', 'last' : 'last', 'this' : 'this', // days of the week 'Sunday' : 'Sunday', 'Monday' : 'Monday', 'Tuesday' : 'Tuesday', 'Wednesday' : 'Wednesday', 'Thursday' : 'Thursday', 'Friday' : 'Friday', 'Saturday' : 'Saturday', // months of the year 'January' : 'January', 'February' : 'February', 'March' : 'March', 'April' : 'April', 'May' : 'May', 'June' : 'June', 'July' : 'July', 'August' : 'August', 'September' : 'September', 'October' : 'October', 'November' : 'November', 'December' : 'December', // difference words 'ago' : 'ago', 'from now' : 'from now', // date phrases 'year' : 'year', 'years' : 'years', 'month' : 'month', 'months' : 'months', 'day' : 'day', 'days' : 'days' }; /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateDifference) == 'undefined') LocalComments.dateDifference = true; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; if (typeof(LocalComments.twentyFourHours) == 'undefined') LocalComments.twentyFourHours = false; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; replace_text(document.getElementById(element_id), /(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCFullYear(old_year, convert_month_to_number(old_month), old_day); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // determine the time offset var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = ''; if (!LocalComments.twentyFourHours) { ampm = ' am'; if (hour > 11) ampm = ' pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; } // return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = language['Today']; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = language['Yesterday']; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = language['Tomorrow']; else { // calculate day of week var day_names = new Array(language['Sunday'], language['Monday'], language['Tuesday'], language['Wednesday'], language['Thursday'], language['Friday'], language['Saturday']); var day_of_the_week = day_names[time.getDay()]; if (LocalComments.dateDifference) { // calculate time difference from today and the timestamp today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = language['ago']; if (days_ago <= 7) last = language['last'] + ' '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = language['from now']; if (days_ago >= -7) last = language['this'] + ' '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize(language['year'], difference.getYear() - 70, language['years']); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize(language['month'], difference.getMonth(), language['months']); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize(language['day'], difference.getDate(), language['days']); descriptive_difference.push(new_days_ago); } descriptive_difference = ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } else { descriptive_difference = ''; last = ''; } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + descriptive_difference; } var time = hour + ':' + minute + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return return_date; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array(language['January'], language['February'], language['March'], language['April'], language['May'], language['June'], language['July'], language['August'], language['September'], language['October'], language['November'], language['December']); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } function replace_text(node, search, replace) { if (node.nodeType == 3) { var value = node.nodeValue; var matches = value.match(search); if (matches != null) { var node_parent_node = node.parentNode; var old_node = node; // old_node_list = node.parentNode.childNodes; for (match = 0; match < matches.length; match++) { // Create <span class="localcomments" style="font-size: 95%; white-space: nowrap;" title="MATCHES[MATCH]">MATCHES[MATCH]</span> var position; if (after_match != null && length != null) position = after_match.search(search) + before_match.length + length; else position = value.search(search); var length = matches[match].toString().length; var before_match = value.substring(0, position); var after_match = value.substring(position + length); var span = document.createElement('span'); span.setAttribute('class', 'localcomments'); span.style.fontSize = '95%'; span.style.whiteSpace = 'nowrap'; span.setAttribute('title', matches[match]); span.appendChild(document.createTextNode(matches[match].toString().replace(search, replace))); var new_node = document.createDocumentFragment(); new_node.appendChild(document.createTextNode(before_match)); new_node.appendChild(span); new_node.appendChild(document.createTextNode(after_match)); node_parent_node.replaceChild(new_node, old_node); break; } } } else { var children = [], child = node.firstChild; while (child) { children[children.length] = child; child = child.nextSibling; } for (var child = 0; child < children.length; child++) replace_text(children[child], search, replace); } } }); rop5g93es1yvkz5x86slitch3pt4yze 14799 14556 2010-01-26T15:37:14Z Adrignola 502 242 revisions from [[:w:User:Gary King/comments in local time.js]]: actual code for gadget 14799 javascript text/javascript /* COMMENTS IN LOCAL TIME Original author: http://en.wikipedia.org/wiki/User:Gary_King English Wikipedia documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { // wgCanonicalNamespace = unsafeWindow.wgCanonicalNamespace /* Language LOCALIZING THIS SCRIPT To localize this script, change the terms below, to the RIGHT of the colons, to the correct term used in that language. For example, in the French language, 'Today' : 'Today', would be 'Today' : 'Aujourd’hui', */ var language = { // relative terms 'Today' : 'Today', 'Yesterday' : 'Yesterday', 'Tomorrow' : 'Tomorrow', 'last' : 'last', 'this' : 'this', // days of the week 'Sunday' : 'Sunday', 'Monday' : 'Monday', 'Tuesday' : 'Tuesday', 'Wednesday' : 'Wednesday', 'Thursday' : 'Thursday', 'Friday' : 'Friday', 'Saturday' : 'Saturday', // months of the year 'January' : 'January', 'February' : 'February', 'March' : 'March', 'April' : 'April', 'May' : 'May', 'June' : 'June', 'July' : 'July', 'August' : 'August', 'September' : 'September', 'October' : 'October', 'November' : 'November', 'December' : 'December', // difference words 'ago' : 'ago', 'from now' : 'from now', // date phrases 'year' : 'year', 'years' : 'years', 'month' : 'month', 'months' : 'months', 'day' : 'day', 'days' : 'days' }; /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateDifference) == 'undefined') LocalComments.dateDifference = true; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; if (typeof(LocalComments.twentyFourHours) == 'undefined') LocalComments.twentyFourHours = false; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; replace_text(document.getElementById(element_id), /(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCFullYear(old_year, convert_month_to_number(old_month), old_day); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // determine the time offset var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = ''; if (!LocalComments.twentyFourHours) { ampm = ' am'; if (hour > 11) ampm = ' pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; } // return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = language['Today']; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = language['Yesterday']; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = language['Tomorrow']; else { // calculate day of week var day_names = new Array(language['Sunday'], language['Monday'], language['Tuesday'], language['Wednesday'], language['Thursday'], language['Friday'], language['Saturday']); var day_of_the_week = day_names[time.getDay()]; if (LocalComments.dateDifference) { // calculate time difference from today and the timestamp today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = language['ago']; if (days_ago <= 7) last = language['last'] + ' '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = language['from now']; if (days_ago >= -7) last = language['this'] + ' '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize(language['year'], difference.getYear() - 70, language['years']); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize(language['month'], difference.getMonth(), language['months']); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize(language['day'], difference.getDate(), language['days']); descriptive_difference.push(new_days_ago); } descriptive_difference = ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } else { descriptive_difference = ''; last = ''; } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + descriptive_difference; } var time = hour + ':' + minute + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return return_date; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array(language['January'], language['February'], language['March'], language['April'], language['May'], language['June'], language['July'], language['August'], language['September'], language['October'], language['November'], language['December']); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } function replace_text(node, search, replace) { if (node.nodeType == 3) { var value = node.nodeValue; var matches = value.match(search); if (matches != null) { var node_parent_node = node.parentNode; var old_node = node; // old_node_list = node.parentNode.childNodes; for (match = 0; match < matches.length; match++) { // Create <span class="localcomments" style="font-size: 95%; white-space: nowrap;" title="MATCHES[MATCH]">MATCHES[MATCH]</span> var position; if (after_match != null && length != null) position = after_match.search(search) + before_match.length + length; else position = value.search(search); var length = matches[match].toString().length; var before_match = value.substring(0, position); var after_match = value.substring(position + length); var span = document.createElement('span'); span.setAttribute('class', 'localcomments'); span.style.fontSize = '95%'; span.style.whiteSpace = 'nowrap'; span.setAttribute('title', matches[match]); span.appendChild(document.createTextNode(matches[match].toString().replace(search, replace))); var new_node = document.createDocumentFragment(); new_node.appendChild(document.createTextNode(before_match)); new_node.appendChild(span); new_node.appendChild(document.createTextNode(after_match)); node_parent_node.replaceChild(new_node, old_node); break; } } } else { var children = [], child = node.firstChild; while (child) { children[children.length] = child; child = child.nextSibling; } for (var child = 0; child < children.length; child++) replace_text(children[child], search, replace); } } }); rop5g93es1yvkz5x86slitch3pt4yze 14800 14799 2010-01-26T15:37:40Z Adrignola 502 moved [[Transwiki:Gary King/comments in local time.js]] to [[MediaWiki:Gadget-CommentsInLocalTime.js]] 14799 javascript text/javascript /* COMMENTS IN LOCAL TIME Original author: http://en.wikipedia.org/wiki/User:Gary_King English Wikipedia documentation: [[Wikipedia:Comments in Local Time]] */ addOnloadHook(function() { // wgCanonicalNamespace = unsafeWindow.wgCanonicalNamespace /* Language LOCALIZING THIS SCRIPT To localize this script, change the terms below, to the RIGHT of the colons, to the correct term used in that language. For example, in the French language, 'Today' : 'Today', would be 'Today' : 'Aujourd’hui', */ var language = { // relative terms 'Today' : 'Today', 'Yesterday' : 'Yesterday', 'Tomorrow' : 'Tomorrow', 'last' : 'last', 'this' : 'this', // days of the week 'Sunday' : 'Sunday', 'Monday' : 'Monday', 'Tuesday' : 'Tuesday', 'Wednesday' : 'Wednesday', 'Thursday' : 'Thursday', 'Friday' : 'Friday', 'Saturday' : 'Saturday', // months of the year 'January' : 'January', 'February' : 'February', 'March' : 'March', 'April' : 'April', 'May' : 'May', 'June' : 'June', 'July' : 'July', 'August' : 'August', 'September' : 'September', 'October' : 'October', 'November' : 'November', 'December' : 'December', // difference words 'ago' : 'ago', 'from now' : 'from now', // date phrases 'year' : 'year', 'years' : 'years', 'month' : 'month', 'months' : 'months', 'day' : 'day', 'days' : 'days' }; /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateDifference) == 'undefined') LocalComments.dateDifference = true; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; if (typeof(LocalComments.twentyFourHours) == 'undefined') LocalComments.twentyFourHours = false; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; replace_text(document.getElementById(element_id), /(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCFullYear(old_year, convert_month_to_number(old_month), old_day); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // determine the time offset var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = ''; if (!LocalComments.twentyFourHours) { ampm = ' am'; if (hour > 11) ampm = ' pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; } // return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = language['Today']; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = language['Yesterday']; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = language['Tomorrow']; else { // calculate day of week var day_names = new Array(language['Sunday'], language['Monday'], language['Tuesday'], language['Wednesday'], language['Thursday'], language['Friday'], language['Saturday']); var day_of_the_week = day_names[time.getDay()]; if (LocalComments.dateDifference) { // calculate time difference from today and the timestamp today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = language['ago']; if (days_ago <= 7) last = language['last'] + ' '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = language['from now']; if (days_ago >= -7) last = language['this'] + ' '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize(language['year'], difference.getYear() - 70, language['years']); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize(language['month'], difference.getMonth(), language['months']); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize(language['day'], difference.getDate(), language['days']); descriptive_difference.push(new_days_ago); } descriptive_difference = ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } else { descriptive_difference = ''; last = ''; } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + descriptive_difference; } var time = hour + ':' + minute + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return return_date; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array(language['January'], language['February'], language['March'], language['April'], language['May'], language['June'], language['July'], language['August'], language['September'], language['October'], language['November'], language['December']); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } function replace_text(node, search, replace) { if (node.nodeType == 3) { var value = node.nodeValue; var matches = value.match(search); if (matches != null) { var node_parent_node = node.parentNode; var old_node = node; // old_node_list = node.parentNode.childNodes; for (match = 0; match < matches.length; match++) { // Create <span class="localcomments" style="font-size: 95%; white-space: nowrap;" title="MATCHES[MATCH]">MATCHES[MATCH]</span> var position; if (after_match != null && length != null) position = after_match.search(search) + before_match.length + length; else position = value.search(search); var length = matches[match].toString().length; var before_match = value.substring(0, position); var after_match = value.substring(position + length); var span = document.createElement('span'); span.setAttribute('class', 'localcomments'); span.style.fontSize = '95%'; span.style.whiteSpace = 'nowrap'; span.setAttribute('title', matches[match]); span.appendChild(document.createTextNode(matches[match].toString().replace(search, replace))); var new_node = document.createDocumentFragment(); new_node.appendChild(document.createTextNode(before_match)); new_node.appendChild(span); new_node.appendChild(document.createTextNode(after_match)); node_parent_node.replaceChild(new_node, old_node); break; } } } else { var children = [], child = node.firstChild; while (child) { children[children.length] = child; child = child.nextSibling; } for (var child = 0; child < children.length; child++) replace_text(children[child], search, replace); } } }); rop5g93es1yvkz5x86slitch3pt4yze 14801 14800 2010-01-26T15:38:16Z Adrignola 502 fixed links 14801 javascript text/javascript /* COMMENTS IN LOCAL TIME Original author: http://en.wikipedia.org/wiki/User:Gary_King English Wikibooks documentation: [[Wikibooks:Comments in Local Time]] */ addOnloadHook(function() { // wgCanonicalNamespace = unsafeWindow.wgCanonicalNamespace /* Language LOCALIZING THIS SCRIPT To localize this script, change the terms below, to the RIGHT of the colons, to the correct term used in that language. For example, in the French language, 'Today' : 'Today', would be 'Today' : 'Aujourd’hui', */ var language = { // relative terms 'Today' : 'Today', 'Yesterday' : 'Yesterday', 'Tomorrow' : 'Tomorrow', 'last' : 'last', 'this' : 'this', // days of the week 'Sunday' : 'Sunday', 'Monday' : 'Monday', 'Tuesday' : 'Tuesday', 'Wednesday' : 'Wednesday', 'Thursday' : 'Thursday', 'Friday' : 'Friday', 'Saturday' : 'Saturday', // months of the year 'January' : 'January', 'February' : 'February', 'March' : 'March', 'April' : 'April', 'May' : 'May', 'June' : 'June', 'July' : 'July', 'August' : 'August', 'September' : 'September', 'October' : 'October', 'November' : 'November', 'December' : 'December', // difference words 'ago' : 'ago', 'from now' : 'from now', // date phrases 'year' : 'year', 'years' : 'years', 'month' : 'month', 'months' : 'months', 'day' : 'day', 'days' : 'days' }; /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateDifference) == 'undefined') LocalComments.dateDifference = true; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; if (typeof(LocalComments.twentyFourHours) == 'undefined') LocalComments.twentyFourHours = false; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; replace_text(document.getElementById(element_id), /(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCFullYear(old_year, convert_month_to_number(old_month), old_day); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // determine the time offset var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = ''; if (!LocalComments.twentyFourHours) { ampm = ' am'; if (hour > 11) ampm = ' pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; } // return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = language['Today']; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = language['Yesterday']; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = language['Tomorrow']; else { // calculate day of week var day_names = new Array(language['Sunday'], language['Monday'], language['Tuesday'], language['Wednesday'], language['Thursday'], language['Friday'], language['Saturday']); var day_of_the_week = day_names[time.getDay()]; if (LocalComments.dateDifference) { // calculate time difference from today and the timestamp today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = language['ago']; if (days_ago <= 7) last = language['last'] + ' '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = language['from now']; if (days_ago >= -7) last = language['this'] + ' '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize(language['year'], difference.getYear() - 70, language['years']); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize(language['month'], difference.getMonth(), language['months']); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize(language['day'], difference.getDate(), language['days']); descriptive_difference.push(new_days_ago); } descriptive_difference = ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } else { descriptive_difference = ''; last = ''; } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + descriptive_difference; } var time = hour + ':' + minute + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return return_date; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array(language['January'], language['February'], language['March'], language['April'], language['May'], language['June'], language['July'], language['August'], language['September'], language['October'], language['November'], language['December']); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } function replace_text(node, search, replace) { if (node.nodeType == 3) { var value = node.nodeValue; var matches = value.match(search); if (matches != null) { var node_parent_node = node.parentNode; var old_node = node; // old_node_list = node.parentNode.childNodes; for (match = 0; match < matches.length; match++) { // Create <span class="localcomments" style="font-size: 95%; white-space: nowrap;" title="MATCHES[MATCH]">MATCHES[MATCH]</span> var position; if (after_match != null && length != null) position = after_match.search(search) + before_match.length + length; else position = value.search(search); var length = matches[match].toString().length; var before_match = value.substring(0, position); var after_match = value.substring(position + length); var span = document.createElement('span'); span.setAttribute('class', 'localcomments'); span.style.fontSize = '95%'; span.style.whiteSpace = 'nowrap'; span.setAttribute('title', matches[match]); span.appendChild(document.createTextNode(matches[match].toString().replace(search, replace))); var new_node = document.createDocumentFragment(); new_node.appendChild(document.createTextNode(before_match)); new_node.appendChild(span); new_node.appendChild(document.createTextNode(after_match)); node_parent_node.replaceChild(new_node, old_node); break; } } } else { var children = [], child = node.firstChild; while (child) { children[children.length] = child; child = child.nextSibling; } for (var child = 0; child < children.length; child++) replace_text(children[child], search, replace); } } }); ej0ewyqgckn7fmd8xvfycisi3zhcg96 14802 14801 2010-06-23T14:38:37Z Adrignola 502 dynamic link 14802 javascript text/javascript importScriptURI('http://en.wikipedia.org/w/index.php?title=User:Gary King/comments in local time.js&action=raw&ctype=text/javascript'); 4iznebwyvtxyfjas8g9wzgrwrz7kvc7 14803 14802 2010-06-29T13:04:20Z Adrignola 502 hosting locally to reduce delays 14803 javascript text/javascript /* COMMENTS IN LOCAL TIME Original author: http://en.wikipedia.org/wiki/User:Gary_King English Wikibooks documentation: [[Wikibooks:Comments in Local Time]] */ addOnloadHook(function() { // wgCanonicalNamespace = unsafeWindow.wgCanonicalNamespace /* Language LOCALIZING THIS SCRIPT To localize this script, change the terms below, to the RIGHT of the colons, to the correct term used in that language. For example, in the French language, 'Today' : 'Today', would be 'Today' : 'Aujourd’hui', */ var language = { // relative terms 'Today' : 'Today', 'Yesterday' : 'Yesterday', 'Tomorrow' : 'Tomorrow', 'last' : 'last', 'this' : 'this', // days of the week 'Sunday' : 'Sunday', 'Monday' : 'Monday', 'Tuesday' : 'Tuesday', 'Wednesday' : 'Wednesday', 'Thursday' : 'Thursday', 'Friday' : 'Friday', 'Saturday' : 'Saturday', // months of the year 'January' : 'January', 'February' : 'February', 'March' : 'March', 'April' : 'April', 'May' : 'May', 'June' : 'June', 'July' : 'July', 'August' : 'August', 'September' : 'September', 'October' : 'October', 'November' : 'November', 'December' : 'December', // difference words 'ago' : 'ago', 'from now' : 'from now', // date phrases 'year' : 'year', 'years' : 'years', 'month' : 'month', 'months' : 'months', 'day' : 'day', 'days' : 'days' }; /* Settings */ if (typeof(LocalComments) == 'undefined') LocalComments = {}; if (typeof(LocalComments.dateDifference) == 'undefined') LocalComments.dateDifference = true; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; if (typeof(LocalComments.twentyFourHours) == 'undefined') LocalComments.twentyFourHours = false; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; replace_text(document.getElementById(element_id), /(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCFullYear(old_year, convert_month_to_number(old_month), old_day); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // determine the time offset var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = ''; if (!LocalComments.twentyFourHours) { ampm = ' am'; if (hour > 11) ampm = ' pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; } // return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = language['Today']; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = language['Yesterday']; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = language['Tomorrow']; else { // calculate day of week var day_names = new Array(language['Sunday'], language['Monday'], language['Tuesday'], language['Wednesday'], language['Thursday'], language['Friday'], language['Saturday']); var day_of_the_week = day_names[time.getDay()]; if (LocalComments.dateDifference) { // calculate time difference from today and the timestamp today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = language['ago']; if (days_ago <= 7) last = language['last'] + ' '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = language['from now']; if (days_ago >= -7) last = language['this'] + ' '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize(language['year'], difference.getYear() - 70, language['years']); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize(language['month'], difference.getMonth(), language['months']); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize(language['day'], difference.getDate(), language['days']); descriptive_difference.push(new_days_ago); } descriptive_difference = ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } else { descriptive_difference = ''; last = ''; } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + descriptive_difference; } var time = hour + ':' + minute + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return return_date; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array(language['January'], language['February'], language['March'], language['April'], language['May'], language['June'], language['July'], language['August'], language['September'], language['October'], language['November'], language['December']); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } function replace_text(node, search, replace) { if (node.nodeType == 3) { var value = node.nodeValue; var matches = value.match(search); if (matches != null) { var node_parent_node = node.parentNode; var old_node = node; // old_node_list = node.parentNode.childNodes; for (match = 0; match < matches.length; match++) { // Create <span class="localcomments" style="font-size: 95%; white-space: nowrap;" title="MATCHES[MATCH]">MATCHES[MATCH]</span> var position; if (after_match != null && length != null) position = after_match.search(search) + before_match.length + length; else position = value.search(search); var length = matches[match].toString().length; var before_match = value.substring(0, position); var after_match = value.substring(position + length); var span = document.createElement('span'); span.setAttribute('class', 'localcomments'); span.style.fontSize = '95%'; span.style.whiteSpace = 'nowrap'; span.setAttribute('title', matches[match]); span.appendChild(document.createTextNode(matches[match].toString().replace(search, replace))); var new_node = document.createDocumentFragment(); new_node.appendChild(document.createTextNode(before_match)); new_node.appendChild(span); new_node.appendChild(document.createTextNode(after_match)); node_parent_node.replaceChild(new_node, old_node); break; } } } else { var children = [], child = node.firstChild; while (child) { children[children.length] = child; child = child.nextSibling; } for (var child = 0; child < children.length; child++) replace_text(children[child], search, replace); } } }); ej0ewyqgckn7fmd8xvfycisi3zhcg96 14804 14803 2010-11-23T22:08:05Z Darklama 2894 properly declare var 14804 javascript text/javascript /* COMMENTS IN LOCAL TIME Original author: http://en.wikipedia.org/wiki/User:Gary_King English Wikibooks documentation: [[Wikibooks:Comments in Local Time]] */ addOnloadHook(function() { // wgCanonicalNamespace = unsafeWindow.wgCanonicalNamespace /* Language LOCALIZING THIS SCRIPT To localize this script, change the terms below, to the RIGHT of the colons, to the correct term used in that language. For example, in the French language, 'Today' : 'Today', would be 'Today' : 'Aujourd’hui', */ var language = { // relative terms 'Today' : 'Today', 'Yesterday' : 'Yesterday', 'Tomorrow' : 'Tomorrow', 'last' : 'last', 'this' : 'this', // days of the week 'Sunday' : 'Sunday', 'Monday' : 'Monday', 'Tuesday' : 'Tuesday', 'Wednesday' : 'Wednesday', 'Thursday' : 'Thursday', 'Friday' : 'Friday', 'Saturday' : 'Saturday', // months of the year 'January' : 'January', 'February' : 'February', 'March' : 'March', 'April' : 'April', 'May' : 'May', 'June' : 'June', 'July' : 'July', 'August' : 'August', 'September' : 'September', 'October' : 'October', 'November' : 'November', 'December' : 'December', // difference words 'ago' : 'ago', 'from now' : 'from now', // date phrases 'year' : 'year', 'years' : 'years', 'month' : 'month', 'months' : 'months', 'day' : 'day', 'days' : 'days' }; /* Settings */ if (typeof(LocalComments) == 'undefined') var LocalComments = {}; if (typeof(LocalComments.dateDifference) == 'undefined') LocalComments.dateDifference = true; if (typeof(LocalComments.dateFormat) == 'undefined') { // Deprecated: LocalizeConfig if (typeof(LocalizeConfig) != 'undefined' && typeof(LocalizeConfig.dateFormat) != 'undefined' && LocalizeConfig.dateFormat != '') LocalComments.dateFormat = LocalizeConfig.dateFormat; else LocalComments.dateFormat = 'dmy'; } if (typeof(LocalComments.timeFirst) == 'undefined') LocalComments.timeFirst = true; if (typeof(LocalComments.twentyFourHours) == 'undefined') LocalComments.twentyFourHours = false; /* End Settings */ if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special') return; var disabled_urls = new Array('action=history'), unique_url = false, wikiPreview = new Array('action=edit', 'action=submit'); for (var i = 0; i < disabled_urls.length; i++) { if (document.location.href.indexOf(disabled_urls[i]) != -1) return; } for (var i = 0; i < wikiPreview.length; i++) { if (document.location.href.indexOf(wikiPreview[i]) != -1) unique_url = 'wikiPreview'; } var element_id = unique_url ? unique_url : 'bodyContent'; replace_text(document.getElementById(element_id), /(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjust_time); function add_leading_zero(number) { if (number < 10) number = '0' + number; return number; } function adjust_time(original_timestamp, old_hour, old_minute, old_day, old_month, old_year, offset) { var today = new Date(), yesterday = new Date(), tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); // set the date entered var time = new Date(); time.setUTCFullYear(old_year, convert_month_to_number(old_month), old_day); time.setUTCHours(old_hour); time.setUTCMinutes(old_minute); // determine the time offset var utc_offset = -1 * time.getTimezoneOffset() / 60; if (utc_offset >= 0) utc_offset = '+' + utc_offset; else utc_offset = '−' + Math.abs(utc_offset); // set the date bits to output var year = time.getFullYear(), month = add_leading_zero(time.getMonth() + 1); var day = time.getDate(); var hour = parseInt(time.getHours()), minute = add_leading_zero(time.getMinutes()); // output am or pm depending on the date var ampm = ''; if (!LocalComments.twentyFourHours) { ampm = ' am'; if (hour > 11) ampm = ' pm'; if (hour > 12) hour -= 12; if (hour == '00') hour = 12; } // return 'today' or 'yesterday' if that is the case if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate()) var date = language['Today']; else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate()) var date = language['Yesterday']; else if (year == tomorrow.getFullYear() && month == add_leading_zero(tomorrow.getMonth() + 1) && day == tomorrow.getDate()) var date = language['Tomorrow']; else { // calculate day of week var day_names = new Array(language['Sunday'], language['Monday'], language['Tuesday'], language['Wednesday'], language['Thursday'], language['Friday'], language['Saturday']); var day_of_the_week = day_names[time.getDay()]; if (LocalComments.dateDifference) { // calculate time difference from today and the timestamp today = new Date(today.getYear(), today.getMonth(), today.getDate()); time = new Date(time.getYear(), time.getMonth(), time.getDate()); var milliseconds_ago = today.getTime() - time.getTime(); var days_ago = Math.round(milliseconds_ago / 1000 / 60 / 60 / 24); var difference, difference_word = '', last = ''; if (today.valueOf() >= time.valueOf()) { difference = new Date(today.valueOf() - time.valueOf()); difference_word = language['ago']; if (days_ago <= 7) last = language['last'] + ' '; } else { difference = new Date(time.valueOf() - today.valueOf()); difference_word = language['from now']; if (days_ago >= -7) last = language['this'] + ' '; } var descriptive_difference = []; if (difference.getYear() - 70 > 0) { var years_ago = (difference.getYear() - 70) + ' ' + pluralize(language['year'], difference.getYear() - 70, language['years']); descriptive_difference.push(years_ago); } if (difference.getMonth() > 0) { var months_ago = difference.getMonth() + ' ' + pluralize(language['month'], difference.getMonth(), language['months']); descriptive_difference.push(months_ago); } if (difference.getDate() > 0) { var new_days_ago = difference.getDate() + ' ' + pluralize(language['day'], difference.getDate(), language['days']); descriptive_difference.push(new_days_ago); } descriptive_difference = ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')'; } else { descriptive_difference = ''; last = ''; } // format the date according to user preferences var formatted_date = '', month_name = convert_number_to_month(time.getMonth()); switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': formatted_date = day + ' ' + month_name + ' ' + year; break; case 'mdy': formatted_date = month_name + ' ' + day + ', ' + year; break; default: formatted_date = year + '-' + month + '-' + add_leading_zero(day); } var date = formatted_date + ', ' + last + day_of_the_week + descriptive_difference; } var time = hour + ':' + minute + ampm; if (LocalComments.timeFirst) var return_date = time + ', ' + date + ' (UTC' + utc_offset + ')'; else var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')'; return return_date; } function convert_month_to_number(month) { var output = new Date(month + ' 1, 2001'); return output.getMonth(); } function convert_number_to_month(number) { var month = new Array(language['January'], language['February'], language['March'], language['April'], language['May'], language['June'], language['July'], language['August'], language['September'], language['October'], language['November'], language['December']); return month[number]; } function pluralize(term, count, plural) { if (plural == null) plural = term + 's'; return (count == 1 ? term : plural) } function replace_text(node, search, replace) { if (node.nodeType == 3) { var value = node.nodeValue; var matches = value.match(search); if (matches != null) { var node_parent_node = node.parentNode; var old_node = node; // old_node_list = node.parentNode.childNodes; for (match = 0; match < matches.length; match++) { // Create <span class="localcomments" style="font-size: 95%; white-space: nowrap;" title="MATCHES[MATCH]">MATCHES[MATCH]</span> var position; if (after_match != null && length != null) position = after_match.search(search) + before_match.length + length; else position = value.search(search); var length = matches[match].toString().length; var before_match = value.substring(0, position); var after_match = value.substring(position + length); var span = document.createElement('span'); span.setAttribute('class', 'localcomments'); span.style.fontSize = '95%'; span.style.whiteSpace = 'nowrap'; span.setAttribute('title', matches[match]); span.appendChild(document.createTextNode(matches[match].toString().replace(search, replace))); var new_node = document.createDocumentFragment(); new_node.appendChild(document.createTextNode(before_match)); new_node.appendChild(span); new_node.appendChild(document.createTextNode(after_match)); node_parent_node.replaceChild(new_node, old_node); break; } } } else { var children = [], child = node.firstChild; while (child) { children[children.length] = child; child = child.nextSibling; } for (var child = 0; child < children.length; child++) replace_text(children[child], search, replace); } } }); 48hk3vmbxd4ky0ua9cuq50fm61c1j9y 14805 14804 2015-08-15T10:45:17Z Az1568 66 Update 14805 javascript text/javascript // Generated by CoffeeScript 1.8.0 /** * COMMENTS IN LOCAL TIME * * Description: * Changes [[Coordinated Universal Time|UTC]]-based times and dates, * such as those used in signatures, to be relative to local time. * * Documentation: * English Wikibooks documentation: [[Wikibooks:Comments in Local Time]] */ var CommentsInLocalTime, runScript; CommentsInLocalTime = (function() { var LocalComments, language; function CommentsInLocalTime() {} language = ''; LocalComments = {}; CommentsInLocalTime.settings = function() { if (window.LocalComments != null) { LocalComments = window.LocalComments; } /* Language LOCALIZING THIS SCRIPT To localize this script, change the terms below, to the RIGHT of the colons, to the correct term used in that language. For example, in the French language, 'Today' : 'Today', would be 'Today' : "Aujourd'hui", */ return LocalComments.language = { /* relative terms */ 'Today': 'Today', 'Yesterday': 'Yesterday', 'Tomorrow': 'Tomorrow', 'last': 'last', 'this': 'this', /* days of the week */ 'Sunday': 'Sunday', 'Monday': 'Monday', 'Tuesday': 'Tuesday', 'Wednesday': 'Wednesday', 'Thursday': 'Thursday', 'Friday': 'Friday', 'Saturday': 'Saturday', /* months of the year */ 'January': 'January', 'February': 'February', 'March': 'March', 'April': 'April', 'May': 'May', 'June': 'June', 'July': 'July', 'August': 'August', 'September': 'September', 'October': 'October', 'November': 'November', 'December': 'December', /* difference words */ 'ago': 'ago', 'from now': 'from now', /* date phrases */ 'year': 'year', 'years': 'years', 'month': 'month', 'months': 'months', 'day': 'day', 'days': 'days' }; }; /* APPLICATION */ CommentsInLocalTime.init = function() { /* Settings */ var contentText, namespace, pageAction; this.settings(); if (LocalComments.language == null) { return false; } language = this.setDefaultSetting('language', LocalComments.language); this.setDefaultSetting({ 'dateDifference': true, 'dateFormat': 'dmy', 'dayOfWeek': true, 'dropDays': 0, 'dropMonths': 0, 'timeFirst': true, 'twentyFourHours': false }); /* End Settings */ namespace = mw.config.get('wgCanonicalNamespace'); pageAction = mw.config.get('wgAction'); if (['', 'MediaWiki', 'Special'].indexOf(namespace) > -1 || pageAction === 'history') { return false; } contentText = document.getElementById('mw-content-text'); if (mw.config.get('wgAction') !== 'view' || (contentText == null)) { return false; } return this.replaceText(contentText, /(\d{1,2}):(\d{2}), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/); }; CommentsInLocalTime.replaceText = function(node, search) { var after, afterMatch, before, beforeMatch, child, children, length, match, matches, parent, parentNodeName, position, span, timeArray, timestamp, value, _i, _len, _results; if (!node) { return false; } if (node.nodeType === 3) { parent = node.parentNode; parentNodeName = parent.nodeName; if (['CODE', 'PRE'].indexOf(parentNodeName) > -1) { return false; } value = node.nodeValue; matches = value.match(search); if (matches != null) { match = matches[0]; position = value.search(search); length = match.toString().length; beforeMatch = value.substring(0, position); afterMatch = value.substring(position + length); timeArray = this.adjustTime(match.toString(), search); timestamp = timeArray[1] ? timeArray[1].getTime() : ''; span = document.createElement('span'); span.className = 'localcomments'; span.style.fontSize = '95%'; span.style.whiteSpace = 'nowrap'; span.setAttribute('timestamp', timestamp); span.title = match; span.appendChild(document.createTextNode(timeArray[0])); parent = node.parentNode; parent.replaceChild(span, node); before = document.createElement('span'); before.className = 'before-localcomments'; before.appendChild(document.createTextNode(beforeMatch)); after = document.createElement('span'); after.className = 'after-localcomments'; after.appendChild(document.createTextNode(afterMatch)); parent.insertBefore(before, span); return parent.insertBefore(after, span.nextSibling); } } else { children = []; child = node.childNodes[0]; while (child) { children.push(child); child = child.nextSibling; } _results = []; for (_i = 0, _len = children.length; _i < _len; _i++) { child = children[_i]; _results.push(this.replaceText(child, search)); } return _results; } }; CommentsInLocalTime.adjustTime = function(originalTimestamp, search) { var ampm, date, day, dayNames, dayOfTheWeek, descriptiveDifference, finalTime, formattedDate, formattedDayOfTheWeek, hour, last, minute, month, monthName, oldDay, oldHour, oldMinute, oldMonth, oldYear, returnDate, time, today, tomorrow, utcOffset, year, yesterday, _ref, _ref1; time = originalTimestamp.match(search); _ref = [time[1], time[2], time[3], time[4], time[5]], oldHour = _ref[0], oldMinute = _ref[1], oldDay = _ref[2], oldMonth = _ref[3], oldYear = _ref[4]; today = new Date(); yesterday = new Date(); tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); time = new Date(); time.setUTCFullYear(oldYear, this.convertMonthToNumber(oldMonth), oldDay); time.setUTCHours(oldHour); time.setUTCMinutes(oldMinute); if (isNaN(time)) { return [originalTimestamp, '']; } utcOffset = -1 * time.getTimezoneOffset() / 60; utcOffset = utcOffset >= 0 ? '+' + utcOffset : '−' + Math.abs(utcOffset); year = time.getFullYear(); month = this.addLeadingZero(time.getMonth() + 1); day = time.getDate(); hour = parseInt(time.getHours()); minute = this.addLeadingZero(time.getMinutes()); ampm = ''; if (LocalComments.twentyFourHours) { hour = this.addLeadingZero(hour); } else { ampm = hour <= 11 ? ' am' : ' pm'; if (hour > 12) { hour -= 12; } else if (hour === 0) { hour = 12; } } if (year === today.getFullYear() && month === this.addLeadingZero(today.getMonth() + 1) && day === today.getDate()) { date = language['Today']; } else if (year === yesterday.getFullYear() && month === this.addLeadingZero(yesterday.getMonth() + 1) && day === yesterday.getDate()) { date = language['Yesterday']; } else if (year === tomorrow.getFullYear() && month === this.addLeadingZero(tomorrow.getMonth() + 1) && day === tomorrow.getDate()) { date = language['Tomorrow']; } else { dayNames = [language['Sunday'], language['Monday'], language['Tuesday'], language['Wednesday'], language['Thursday'], language['Friday'], language['Saturday']]; dayOfTheWeek = dayNames[time.getDay()]; descriptiveDifference = ''; last = ''; if (LocalComments.dateDifference) { _ref1 = this.createRelativeDate(today, time), descriptiveDifference = _ref1.descriptiveDifference, last = _ref1.last; } formattedDate = ''; monthName = this.convertNumberToMonth(time.getMonth()); formattedDate = (function() { switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': return day + ' ' + monthName + ' ' + year; case 'mdy': return monthName + ' ' + day + ', ' + year; default: return year + '-' + month + '-' + this.addLeadingZero(day); } }).call(this); formattedDayOfTheWeek = ''; if (LocalComments.dayOfWeek) { formattedDayOfTheWeek = ', ' + last + dayOfTheWeek; } date = formattedDate + formattedDayOfTheWeek + descriptiveDifference; } finalTime = hour + ':' + minute + ampm; if (LocalComments.timeFirst) { returnDate = finalTime + ', ' + date + ' (UTC' + utcOffset + ')'; } else { returnDate = date + ', ' + finalTime + ' (UTC' + utcOffset + ')'; } return [returnDate, time]; }; CommentsInLocalTime.createRelativeDate = function(today, time) { var daysAgo, descriptiveParts, differenceWord, fmtDays, fmtMonths, fmtYears, last, millisecondsAgo, monthsAgo, totalMonthsAgo, yearsAgo; millisecondsAgo = today.getTime() - time.getTime(); daysAgo = Math.abs(Math.round(millisecondsAgo / 1000 / 60 / 60 / 24)); differenceWord = ''; last = ''; if (millisecondsAgo >= 0) { differenceWord = language['ago']; if (daysAgo <= 7) { last = language['last'] + ' '; } } else { differenceWord = language['from now']; if (daysAgo <= 7) { last = language['this'] + ' '; } } monthsAgo = Math.floor(daysAgo / 365 * 12); totalMonthsAgo = monthsAgo; yearsAgo = Math.floor(monthsAgo / 12); if (monthsAgo < LocalComments.dropMonths) { yearsAgo = 0; } else if (LocalComments.dropMonths > 0) { monthsAgo = 0; } else { monthsAgo = monthsAgo - yearsAgo * 12; } if (daysAgo < LocalComments.dropDays) { monthsAgo = 0; yearsAgo = 0; } else if (LocalComments.dropDays > 0) { daysAgo = 0; } else { daysAgo = daysAgo - Math.floor(totalMonthsAgo * 365 / 12); } descriptiveParts = []; if (yearsAgo > 0) { fmtYears = yearsAgo + ' ' + this.pluralize(language['year'], yearsAgo, language['years']); descriptiveParts.push(fmtYears); } if (monthsAgo > 0) { fmtMonths = monthsAgo + ' ' + this.pluralize(language['month'], monthsAgo, language['months']); descriptiveParts.push(fmtMonths); } if (daysAgo > 0) { fmtDays = daysAgo + ' ' + this.pluralize(language['day'], daysAgo, language['days']); descriptiveParts.push(fmtDays); } return { descriptiveDifference: ' (' + descriptiveParts.join(', ') + ' ' + differenceWord + ')', last: last }; }; /* HELPERS */ CommentsInLocalTime.addLeadingZero = function(number) { if (number < 10) { number = '0' + number; } return number; }; CommentsInLocalTime.convertMonthToNumber = function(month) { return (new Date(month + ' 1, 2001')).getMonth(); }; CommentsInLocalTime.convertNumberToMonth = function(number) { return [language['January'], language['February'], language['March'], language['April'], language['May'], language['June'], language['July'], language['August'], language['September'], language['October'], language['November'], language['December']][number]; }; CommentsInLocalTime.pluralize = function(term, count, plural) { if (plural === null) { plural = term + 's'; } if (count === 1) { return term; } else { return plural; } }; CommentsInLocalTime.setDefaultSetting = function() { var defaultSetting, name, settings; if (!arguments.length) { return false; } if (typeof arguments[0] === 'object') { settings = arguments[0]; for (name in settings) { defaultSetting = settings[name]; if (LocalComments[name] == null) { LocalComments[name] = defaultSetting; } } return settings; } else if (typeof arguments[0] === 'string') { name = arguments[0]; defaultSetting = arguments[1]; if (LocalComments[name] == null) { LocalComments[name] = defaultSetting; } return LocalComments[name]; } }; return CommentsInLocalTime; })(); runScript = function() { return $(window).load(function() { if (window.location.href.indexOf('&disable=loco') === -1) { return CommentsInLocalTime.init(); } }); }; if (typeof waitForScripts === 'function') { waitForScripts(runScript); } else { runScript(); } fyzm57si29b5chlq3zsoe12a9v6dj1w 14806 14805 2017-08-11T12:27:06Z Krenair 1158 Maintenance: [[mw:RL/MGU]] / [[mw:RL/JD]] - Replaced .load event handler (removed in jQuery 3.0) [[phab:T169385]] 14806 javascript text/javascript // Generated by CoffeeScript 1.8.0 /** * COMMENTS IN LOCAL TIME * * Description: * Changes [[Coordinated Universal Time|UTC]]-based times and dates, * such as those used in signatures, to be relative to local time. * * Documentation: * English Wikibooks documentation: [[Wikibooks:Comments in Local Time]] */ var CommentsInLocalTime, runScript; CommentsInLocalTime = (function() { var LocalComments, language; function CommentsInLocalTime() {} language = ''; LocalComments = {}; CommentsInLocalTime.settings = function() { if (window.LocalComments != null) { LocalComments = window.LocalComments; } /* Language LOCALIZING THIS SCRIPT To localize this script, change the terms below, to the RIGHT of the colons, to the correct term used in that language. For example, in the French language, 'Today' : 'Today', would be 'Today' : "Aujourd'hui", */ return LocalComments.language = { /* relative terms */ 'Today': 'Today', 'Yesterday': 'Yesterday', 'Tomorrow': 'Tomorrow', 'last': 'last', 'this': 'this', /* days of the week */ 'Sunday': 'Sunday', 'Monday': 'Monday', 'Tuesday': 'Tuesday', 'Wednesday': 'Wednesday', 'Thursday': 'Thursday', 'Friday': 'Friday', 'Saturday': 'Saturday', /* months of the year */ 'January': 'January', 'February': 'February', 'March': 'March', 'April': 'April', 'May': 'May', 'June': 'June', 'July': 'July', 'August': 'August', 'September': 'September', 'October': 'October', 'November': 'November', 'December': 'December', /* difference words */ 'ago': 'ago', 'from now': 'from now', /* date phrases */ 'year': 'year', 'years': 'years', 'month': 'month', 'months': 'months', 'day': 'day', 'days': 'days' }; }; /* APPLICATION */ CommentsInLocalTime.init = function() { /* Settings */ var contentText, namespace, pageAction; this.settings(); if (LocalComments.language == null) { return false; } language = this.setDefaultSetting('language', LocalComments.language); this.setDefaultSetting({ 'dateDifference': true, 'dateFormat': 'dmy', 'dayOfWeek': true, 'dropDays': 0, 'dropMonths': 0, 'timeFirst': true, 'twentyFourHours': false }); /* End Settings */ namespace = mw.config.get('wgCanonicalNamespace'); pageAction = mw.config.get('wgAction'); if (['', 'MediaWiki', 'Special'].indexOf(namespace) > -1 || pageAction === 'history') { return false; } contentText = document.getElementById('mw-content-text'); if (mw.config.get('wgAction') !== 'view' || (contentText == null)) { return false; } return this.replaceText(contentText, /(\d{1,2}):(\d{2}), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/); }; CommentsInLocalTime.replaceText = function(node, search) { var after, afterMatch, before, beforeMatch, child, children, length, match, matches, parent, parentNodeName, position, span, timeArray, timestamp, value, _i, _len, _results; if (!node) { return false; } if (node.nodeType === 3) { parent = node.parentNode; parentNodeName = parent.nodeName; if (['CODE', 'PRE'].indexOf(parentNodeName) > -1) { return false; } value = node.nodeValue; matches = value.match(search); if (matches != null) { match = matches[0]; position = value.search(search); length = match.toString().length; beforeMatch = value.substring(0, position); afterMatch = value.substring(position + length); timeArray = this.adjustTime(match.toString(), search); timestamp = timeArray[1] ? timeArray[1].getTime() : ''; span = document.createElement('span'); span.className = 'localcomments'; span.style.fontSize = '95%'; span.style.whiteSpace = 'nowrap'; span.setAttribute('timestamp', timestamp); span.title = match; span.appendChild(document.createTextNode(timeArray[0])); parent = node.parentNode; parent.replaceChild(span, node); before = document.createElement('span'); before.className = 'before-localcomments'; before.appendChild(document.createTextNode(beforeMatch)); after = document.createElement('span'); after.className = 'after-localcomments'; after.appendChild(document.createTextNode(afterMatch)); parent.insertBefore(before, span); return parent.insertBefore(after, span.nextSibling); } } else { children = []; child = node.childNodes[0]; while (child) { children.push(child); child = child.nextSibling; } _results = []; for (_i = 0, _len = children.length; _i < _len; _i++) { child = children[_i]; _results.push(this.replaceText(child, search)); } return _results; } }; CommentsInLocalTime.adjustTime = function(originalTimestamp, search) { var ampm, date, day, dayNames, dayOfTheWeek, descriptiveDifference, finalTime, formattedDate, formattedDayOfTheWeek, hour, last, minute, month, monthName, oldDay, oldHour, oldMinute, oldMonth, oldYear, returnDate, time, today, tomorrow, utcOffset, year, yesterday, _ref, _ref1; time = originalTimestamp.match(search); _ref = [time[1], time[2], time[3], time[4], time[5]], oldHour = _ref[0], oldMinute = _ref[1], oldDay = _ref[2], oldMonth = _ref[3], oldYear = _ref[4]; today = new Date(); yesterday = new Date(); tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); time = new Date(); time.setUTCFullYear(oldYear, this.convertMonthToNumber(oldMonth), oldDay); time.setUTCHours(oldHour); time.setUTCMinutes(oldMinute); if (isNaN(time)) { return [originalTimestamp, '']; } utcOffset = -1 * time.getTimezoneOffset() / 60; utcOffset = utcOffset >= 0 ? '+' + utcOffset : '−' + Math.abs(utcOffset); year = time.getFullYear(); month = this.addLeadingZero(time.getMonth() + 1); day = time.getDate(); hour = parseInt(time.getHours()); minute = this.addLeadingZero(time.getMinutes()); ampm = ''; if (LocalComments.twentyFourHours) { hour = this.addLeadingZero(hour); } else { ampm = hour <= 11 ? ' am' : ' pm'; if (hour > 12) { hour -= 12; } else if (hour === 0) { hour = 12; } } if (year === today.getFullYear() && month === this.addLeadingZero(today.getMonth() + 1) && day === today.getDate()) { date = language['Today']; } else if (year === yesterday.getFullYear() && month === this.addLeadingZero(yesterday.getMonth() + 1) && day === yesterday.getDate()) { date = language['Yesterday']; } else if (year === tomorrow.getFullYear() && month === this.addLeadingZero(tomorrow.getMonth() + 1) && day === tomorrow.getDate()) { date = language['Tomorrow']; } else { dayNames = [language['Sunday'], language['Monday'], language['Tuesday'], language['Wednesday'], language['Thursday'], language['Friday'], language['Saturday']]; dayOfTheWeek = dayNames[time.getDay()]; descriptiveDifference = ''; last = ''; if (LocalComments.dateDifference) { _ref1 = this.createRelativeDate(today, time), descriptiveDifference = _ref1.descriptiveDifference, last = _ref1.last; } formattedDate = ''; monthName = this.convertNumberToMonth(time.getMonth()); formattedDate = (function() { switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': return day + ' ' + monthName + ' ' + year; case 'mdy': return monthName + ' ' + day + ', ' + year; default: return year + '-' + month + '-' + this.addLeadingZero(day); } }).call(this); formattedDayOfTheWeek = ''; if (LocalComments.dayOfWeek) { formattedDayOfTheWeek = ', ' + last + dayOfTheWeek; } date = formattedDate + formattedDayOfTheWeek + descriptiveDifference; } finalTime = hour + ':' + minute + ampm; if (LocalComments.timeFirst) { returnDate = finalTime + ', ' + date + ' (UTC' + utcOffset + ')'; } else { returnDate = date + ', ' + finalTime + ' (UTC' + utcOffset + ')'; } return [returnDate, time]; }; CommentsInLocalTime.createRelativeDate = function(today, time) { var daysAgo, descriptiveParts, differenceWord, fmtDays, fmtMonths, fmtYears, last, millisecondsAgo, monthsAgo, totalMonthsAgo, yearsAgo; millisecondsAgo = today.getTime() - time.getTime(); daysAgo = Math.abs(Math.round(millisecondsAgo / 1000 / 60 / 60 / 24)); differenceWord = ''; last = ''; if (millisecondsAgo >= 0) { differenceWord = language['ago']; if (daysAgo <= 7) { last = language['last'] + ' '; } } else { differenceWord = language['from now']; if (daysAgo <= 7) { last = language['this'] + ' '; } } monthsAgo = Math.floor(daysAgo / 365 * 12); totalMonthsAgo = monthsAgo; yearsAgo = Math.floor(monthsAgo / 12); if (monthsAgo < LocalComments.dropMonths) { yearsAgo = 0; } else if (LocalComments.dropMonths > 0) { monthsAgo = 0; } else { monthsAgo = monthsAgo - yearsAgo * 12; } if (daysAgo < LocalComments.dropDays) { monthsAgo = 0; yearsAgo = 0; } else if (LocalComments.dropDays > 0) { daysAgo = 0; } else { daysAgo = daysAgo - Math.floor(totalMonthsAgo * 365 / 12); } descriptiveParts = []; if (yearsAgo > 0) { fmtYears = yearsAgo + ' ' + this.pluralize(language['year'], yearsAgo, language['years']); descriptiveParts.push(fmtYears); } if (monthsAgo > 0) { fmtMonths = monthsAgo + ' ' + this.pluralize(language['month'], monthsAgo, language['months']); descriptiveParts.push(fmtMonths); } if (daysAgo > 0) { fmtDays = daysAgo + ' ' + this.pluralize(language['day'], daysAgo, language['days']); descriptiveParts.push(fmtDays); } return { descriptiveDifference: ' (' + descriptiveParts.join(', ') + ' ' + differenceWord + ')', last: last }; }; /* HELPERS */ CommentsInLocalTime.addLeadingZero = function(number) { if (number < 10) { number = '0' + number; } return number; }; CommentsInLocalTime.convertMonthToNumber = function(month) { return (new Date(month + ' 1, 2001')).getMonth(); }; CommentsInLocalTime.convertNumberToMonth = function(number) { return [language['January'], language['February'], language['March'], language['April'], language['May'], language['June'], language['July'], language['August'], language['September'], language['October'], language['November'], language['December']][number]; }; CommentsInLocalTime.pluralize = function(term, count, plural) { if (plural === null) { plural = term + 's'; } if (count === 1) { return term; } else { return plural; } }; CommentsInLocalTime.setDefaultSetting = function() { var defaultSetting, name, settings; if (!arguments.length) { return false; } if (typeof arguments[0] === 'object') { settings = arguments[0]; for (name in settings) { defaultSetting = settings[name]; if (LocalComments[name] == null) { LocalComments[name] = defaultSetting; } } return settings; } else if (typeof arguments[0] === 'string') { name = arguments[0]; defaultSetting = arguments[1]; if (LocalComments[name] == null) { LocalComments[name] = defaultSetting; } return LocalComments[name]; } }; return CommentsInLocalTime; })(); runScript = function() { return $(window).on( 'load', function() { if (window.location.href.indexOf('&disable=loco') === -1) { return CommentsInLocalTime.init(); } }); }; if (typeof waitForScripts === 'function') { waitForScripts(runScript); } else { runScript(); } 6shb0fubnb9bkabqazvxq78xdnhsayx 14807 14806 2026-08-01T17:24:10Z QueerEcofeminist 1879 [[:en:MediaWiki:Gadget-CommentsInLocalTime.js]] पासून २५४ आवर्तने आयात केलीत 14806 javascript text/javascript // Generated by CoffeeScript 1.8.0 /** * COMMENTS IN LOCAL TIME * * Description: * Changes [[Coordinated Universal Time|UTC]]-based times and dates, * such as those used in signatures, to be relative to local time. * * Documentation: * English Wikibooks documentation: [[Wikibooks:Comments in Local Time]] */ var CommentsInLocalTime, runScript; CommentsInLocalTime = (function() { var LocalComments, language; function CommentsInLocalTime() {} language = ''; LocalComments = {}; CommentsInLocalTime.settings = function() { if (window.LocalComments != null) { LocalComments = window.LocalComments; } /* Language LOCALIZING THIS SCRIPT To localize this script, change the terms below, to the RIGHT of the colons, to the correct term used in that language. For example, in the French language, 'Today' : 'Today', would be 'Today' : "Aujourd'hui", */ return LocalComments.language = { /* relative terms */ 'Today': 'Today', 'Yesterday': 'Yesterday', 'Tomorrow': 'Tomorrow', 'last': 'last', 'this': 'this', /* days of the week */ 'Sunday': 'Sunday', 'Monday': 'Monday', 'Tuesday': 'Tuesday', 'Wednesday': 'Wednesday', 'Thursday': 'Thursday', 'Friday': 'Friday', 'Saturday': 'Saturday', /* months of the year */ 'January': 'January', 'February': 'February', 'March': 'March', 'April': 'April', 'May': 'May', 'June': 'June', 'July': 'July', 'August': 'August', 'September': 'September', 'October': 'October', 'November': 'November', 'December': 'December', /* difference words */ 'ago': 'ago', 'from now': 'from now', /* date phrases */ 'year': 'year', 'years': 'years', 'month': 'month', 'months': 'months', 'day': 'day', 'days': 'days' }; }; /* APPLICATION */ CommentsInLocalTime.init = function() { /* Settings */ var contentText, namespace, pageAction; this.settings(); if (LocalComments.language == null) { return false; } language = this.setDefaultSetting('language', LocalComments.language); this.setDefaultSetting({ 'dateDifference': true, 'dateFormat': 'dmy', 'dayOfWeek': true, 'dropDays': 0, 'dropMonths': 0, 'timeFirst': true, 'twentyFourHours': false }); /* End Settings */ namespace = mw.config.get('wgCanonicalNamespace'); pageAction = mw.config.get('wgAction'); if (['', 'MediaWiki', 'Special'].indexOf(namespace) > -1 || pageAction === 'history') { return false; } contentText = document.getElementById('mw-content-text'); if (mw.config.get('wgAction') !== 'view' || (contentText == null)) { return false; } return this.replaceText(contentText, /(\d{1,2}):(\d{2}), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/); }; CommentsInLocalTime.replaceText = function(node, search) { var after, afterMatch, before, beforeMatch, child, children, length, match, matches, parent, parentNodeName, position, span, timeArray, timestamp, value, _i, _len, _results; if (!node) { return false; } if (node.nodeType === 3) { parent = node.parentNode; parentNodeName = parent.nodeName; if (['CODE', 'PRE'].indexOf(parentNodeName) > -1) { return false; } value = node.nodeValue; matches = value.match(search); if (matches != null) { match = matches[0]; position = value.search(search); length = match.toString().length; beforeMatch = value.substring(0, position); afterMatch = value.substring(position + length); timeArray = this.adjustTime(match.toString(), search); timestamp = timeArray[1] ? timeArray[1].getTime() : ''; span = document.createElement('span'); span.className = 'localcomments'; span.style.fontSize = '95%'; span.style.whiteSpace = 'nowrap'; span.setAttribute('timestamp', timestamp); span.title = match; span.appendChild(document.createTextNode(timeArray[0])); parent = node.parentNode; parent.replaceChild(span, node); before = document.createElement('span'); before.className = 'before-localcomments'; before.appendChild(document.createTextNode(beforeMatch)); after = document.createElement('span'); after.className = 'after-localcomments'; after.appendChild(document.createTextNode(afterMatch)); parent.insertBefore(before, span); return parent.insertBefore(after, span.nextSibling); } } else { children = []; child = node.childNodes[0]; while (child) { children.push(child); child = child.nextSibling; } _results = []; for (_i = 0, _len = children.length; _i < _len; _i++) { child = children[_i]; _results.push(this.replaceText(child, search)); } return _results; } }; CommentsInLocalTime.adjustTime = function(originalTimestamp, search) { var ampm, date, day, dayNames, dayOfTheWeek, descriptiveDifference, finalTime, formattedDate, formattedDayOfTheWeek, hour, last, minute, month, monthName, oldDay, oldHour, oldMinute, oldMonth, oldYear, returnDate, time, today, tomorrow, utcOffset, year, yesterday, _ref, _ref1; time = originalTimestamp.match(search); _ref = [time[1], time[2], time[3], time[4], time[5]], oldHour = _ref[0], oldMinute = _ref[1], oldDay = _ref[2], oldMonth = _ref[3], oldYear = _ref[4]; today = new Date(); yesterday = new Date(); tomorrow = new Date(); yesterday.setDate(yesterday.getDate() - 1); tomorrow.setDate(tomorrow.getDate() + 1); time = new Date(); time.setUTCFullYear(oldYear, this.convertMonthToNumber(oldMonth), oldDay); time.setUTCHours(oldHour); time.setUTCMinutes(oldMinute); if (isNaN(time)) { return [originalTimestamp, '']; } utcOffset = -1 * time.getTimezoneOffset() / 60; utcOffset = utcOffset >= 0 ? '+' + utcOffset : '−' + Math.abs(utcOffset); year = time.getFullYear(); month = this.addLeadingZero(time.getMonth() + 1); day = time.getDate(); hour = parseInt(time.getHours()); minute = this.addLeadingZero(time.getMinutes()); ampm = ''; if (LocalComments.twentyFourHours) { hour = this.addLeadingZero(hour); } else { ampm = hour <= 11 ? ' am' : ' pm'; if (hour > 12) { hour -= 12; } else if (hour === 0) { hour = 12; } } if (year === today.getFullYear() && month === this.addLeadingZero(today.getMonth() + 1) && day === today.getDate()) { date = language['Today']; } else if (year === yesterday.getFullYear() && month === this.addLeadingZero(yesterday.getMonth() + 1) && day === yesterday.getDate()) { date = language['Yesterday']; } else if (year === tomorrow.getFullYear() && month === this.addLeadingZero(tomorrow.getMonth() + 1) && day === tomorrow.getDate()) { date = language['Tomorrow']; } else { dayNames = [language['Sunday'], language['Monday'], language['Tuesday'], language['Wednesday'], language['Thursday'], language['Friday'], language['Saturday']]; dayOfTheWeek = dayNames[time.getDay()]; descriptiveDifference = ''; last = ''; if (LocalComments.dateDifference) { _ref1 = this.createRelativeDate(today, time), descriptiveDifference = _ref1.descriptiveDifference, last = _ref1.last; } formattedDate = ''; monthName = this.convertNumberToMonth(time.getMonth()); formattedDate = (function() { switch (LocalComments.dateFormat.toLowerCase()) { case 'dmy': return day + ' ' + monthName + ' ' + year; case 'mdy': return monthName + ' ' + day + ', ' + year; default: return year + '-' + month + '-' + this.addLeadingZero(day); } }).call(this); formattedDayOfTheWeek = ''; if (LocalComments.dayOfWeek) { formattedDayOfTheWeek = ', ' + last + dayOfTheWeek; } date = formattedDate + formattedDayOfTheWeek + descriptiveDifference; } finalTime = hour + ':' + minute + ampm; if (LocalComments.timeFirst) { returnDate = finalTime + ', ' + date + ' (UTC' + utcOffset + ')'; } else { returnDate = date + ', ' + finalTime + ' (UTC' + utcOffset + ')'; } return [returnDate, time]; }; CommentsInLocalTime.createRelativeDate = function(today, time) { var daysAgo, descriptiveParts, differenceWord, fmtDays, fmtMonths, fmtYears, last, millisecondsAgo, monthsAgo, totalMonthsAgo, yearsAgo; millisecondsAgo = today.getTime() - time.getTime(); daysAgo = Math.abs(Math.round(millisecondsAgo / 1000 / 60 / 60 / 24)); differenceWord = ''; last = ''; if (millisecondsAgo >= 0) { differenceWord = language['ago']; if (daysAgo <= 7) { last = language['last'] + ' '; } } else { differenceWord = language['from now']; if (daysAgo <= 7) { last = language['this'] + ' '; } } monthsAgo = Math.floor(daysAgo / 365 * 12); totalMonthsAgo = monthsAgo; yearsAgo = Math.floor(monthsAgo / 12); if (monthsAgo < LocalComments.dropMonths) { yearsAgo = 0; } else if (LocalComments.dropMonths > 0) { monthsAgo = 0; } else { monthsAgo = monthsAgo - yearsAgo * 12; } if (daysAgo < LocalComments.dropDays) { monthsAgo = 0; yearsAgo = 0; } else if (LocalComments.dropDays > 0) { daysAgo = 0; } else { daysAgo = daysAgo - Math.floor(totalMonthsAgo * 365 / 12); } descriptiveParts = []; if (yearsAgo > 0) { fmtYears = yearsAgo + ' ' + this.pluralize(language['year'], yearsAgo, language['years']); descriptiveParts.push(fmtYears); } if (monthsAgo > 0) { fmtMonths = monthsAgo + ' ' + this.pluralize(language['month'], monthsAgo, language['months']); descriptiveParts.push(fmtMonths); } if (daysAgo > 0) { fmtDays = daysAgo + ' ' + this.pluralize(language['day'], daysAgo, language['days']); descriptiveParts.push(fmtDays); } return { descriptiveDifference: ' (' + descriptiveParts.join(', ') + ' ' + differenceWord + ')', last: last }; }; /* HELPERS */ CommentsInLocalTime.addLeadingZero = function(number) { if (number < 10) { number = '0' + number; } return number; }; CommentsInLocalTime.convertMonthToNumber = function(month) { return (new Date(month + ' 1, 2001')).getMonth(); }; CommentsInLocalTime.convertNumberToMonth = function(number) { return [language['January'], language['February'], language['March'], language['April'], language['May'], language['June'], language['July'], language['August'], language['September'], language['October'], language['November'], language['December']][number]; }; CommentsInLocalTime.pluralize = function(term, count, plural) { if (plural === null) { plural = term + 's'; } if (count === 1) { return term; } else { return plural; } }; CommentsInLocalTime.setDefaultSetting = function() { var defaultSetting, name, settings; if (!arguments.length) { return false; } if (typeof arguments[0] === 'object') { settings = arguments[0]; for (name in settings) { defaultSetting = settings[name]; if (LocalComments[name] == null) { LocalComments[name] = defaultSetting; } } return settings; } else if (typeof arguments[0] === 'string') { name = arguments[0]; defaultSetting = arguments[1]; if (LocalComments[name] == null) { LocalComments[name] = defaultSetting; } return LocalComments[name]; } }; return CommentsInLocalTime; })(); runScript = function() { return $(window).on( 'load', function() { if (window.location.href.indexOf('&disable=loco') === -1) { return CommentsInLocalTime.init(); } }); }; if (typeof waitForScripts === 'function') { waitForScripts(runScript); } else { runScript(); } 6shb0fubnb9bkabqazvxq78xdnhsayx मिडियाविकी:Gadget-SpecialSearch.js 8 4160 14808 2008-03-25T17:20:24Z Darklama 2894 turning the search enhancements into an optional gadget instead 14808 javascript text/javascript /* * Change Special:Search to use a drop-down menu to pick which search engine to use * Created by [[w:User:Gracenotes]] for Wikipedia; updated by [[w:User:Brion VIBBER]] for Wikipedia; * Maintained at Wikibooks by [[User:Mike.lifeguard]] and [[User:Darklama]] */ if (wgPageName == "Special:Search") { var searchEngines = []; addOnloadHook(WB_SpecialSearchEnhanced); } function WB_SpecialSearchEnhanced() { var createOption = function(site, action, mainQ, addQ, addV) { var opt = document.createElement('option'); opt.appendChild(document.createTextNode(site)); searchEngines[searchEngines.length] = [action, mainQ, addQ, addV]; return opt; } var searchForm = document.forms['powersearch'] || document.forms['search']; var searchBox = searchForm.lsearchbox || searchForm.search; var selectBox = document.createElement('select'); selectBox.id = 'searchEngine'; searchForm.onsubmit = function() { var optSelected = searchEngines[document.getElementById('searchEngine').selectedIndex]; searchForm.action = optSelected[0]; searchBox.name = optSelected[1]; searchForm.title.value = optSelected[3]; searchForm.title.name = optSelected[2]; } selectBox.appendChild(createOption('MediaWiki search', wgScript, 'search', 'title', 'Special:Search')); selectBox.appendChild(createOption('Google', 'http://www.google.com/search', 'q', 'sitesearch', 'en.wikibooks.org')); selectBox.appendChild(createOption('Yahoo', 'http://search.yahoo.com/search', 'p', 'vs', 'en.wikibooks.org')); selectBox.appendChild(createOption('Windows Live', 'http://search.live.com/results.aspx', 'q', 'q1', 'site:http://en.wikibooks.org')); searchBox.style.marginLeft = '0px'; var lStat = document.getElementById('loadStatus') || searchForm.fulltext; lStat.parentNode.insertBefore(selectBox, lStat); } 98efaz0le7pl7j6lisejapt99txtosw 14809 14808 2010-12-29T14:40:01Z Darklama 2894 used jQuery and add search engine 14809 javascript text/javascript // <source lang="javascript"> /* * Change Special:Search to use a drop-down menu to pick which search engine to use * Created by [[w:User:Gracenotes]] for Wikipedia; * Updated by [[w:User:Brion VIBBER]] for Wikipedia; * Maintained at Wikibooks by [[User:Mike.lifeguard]] and [[User:Darklama]] */ function WB_SpecialSearchEnhanced() { var search = $j('form#powersearch')[0] || $j('form#search')[0]; var search_for = $('input:text:first', search)[0]; var createOption = function(site, action, mainQ, addQ, addV) { searchEngines.push({ action: action, name: mainQ, what: addQ, where: addV}); return '<option>' + site + '</option>'; }; var $search_what = $j('<select id="searchEngine"/>') .append(createOption('Mediawiki search', wgScript, 'search', 'title', 'Special:Search')) .append(createOption('Google', 'http://www.google.com/search', 'q', 'sitesearch', 'en.wikibooks.org')) .append(createOption('Yahoo', 'http://search.yahoo.com/search', 'p', 'vs', 'en.wikibooks.org')) .append(createOption('Bing', 'http://www.bing.com/search', 'q', 'q1', 'site:http://en.wikibooks.org')) .append(createOption('Exalead', 'http://www.exalead.com/wikibooks/results', 'q', 'language', 'en')); $(search_for).before($search_what); $j(search).submit( function() { var which = searchEngines[$search_what[0].selectedIndex]; search_for.name = which.name; this.action = which.action; this.title.name = which.what; this.title.value = which.where; }); } if (wgPageName == "Special:Search") { var searchEngines = []; $j(window).load((WB_SpecialSearchEnhanced); } // </source> skkc0qn126a5upmts0opery3eat1cz0 14810 14809 2010-12-29T14:47:52Z Darklama 2894 typo 14810 javascript text/javascript // <source lang="javascript"> /* * Change Special:Search to use a drop-down menu to pick which search engine to use * Created by [[w:User:Gracenotes]] for Wikipedia; * Updated by [[w:User:Brion VIBBER]] for Wikipedia; * Maintained at Wikibooks by [[User:Mike.lifeguard]] and [[User:Darklama]] */ function WB_SpecialSearchEnhanced() { var search = $j('form#powersearch')[0] || $j('form#search')[0]; var search_for = $('input:text:first', search)[0]; var createOption = function(site, action, mainQ, addQ, addV) { searchEngines.push({ action: action, name: mainQ, what: addQ, where: addV}); return '<option>' + site + '</option>'; }; var $search_what = $j('<select id="searchEngine"/>') .append(createOption('Mediawiki search', wgScript, 'search', 'title', 'Special:Search')) .append(createOption('Google', 'http://www.google.com/search', 'q', 'sitesearch', 'en.wikibooks.org')) .append(createOption('Yahoo', 'http://search.yahoo.com/search', 'p', 'vs', 'en.wikibooks.org')) .append(createOption('Bing', 'http://www.bing.com/search', 'q', 'q1', 'site:http://en.wikibooks.org')) .append(createOption('Exalead', 'http://www.exalead.com/wikibooks/results', 'q', 'language', 'en')); $(search_for).before($search_what); $j(search).submit( function() { var which = searchEngines[$search_what[0].selectedIndex]; search_for.name = which.name; this.action = which.action; this.title.name = which.what; this.title.value = which.where; }); } if (wgPageName == "Special:Search") { var searchEngines = []; $j(window).load(WB_SpecialSearchEnhanced); } // </source> p11b2jzmdfj0rgm0ca2rd4r7umdooll 14811 14810 2010-12-29T15:08:18Z Darklama 2894 fixed 14811 javascript text/javascript // <source lang="javascript"> /* * Change Special:Search to use a drop-down menu to pick which search engine to use * Created by [[w:User:Gracenotes]] for Wikipedia; * Updated by [[w:User:Brion VIBBER]] for Wikipedia; * Maintained at Wikibooks by [[User:Mike.lifeguard]] and [[User:Darklama]] */ function WB_SpecialSearchEnhanced() { var search = $j('form#powersearch')[0] || $j('form#search')[0]; var search_for = $('input:text:first', search)[0]; var createOption = function(site, action, mainQ, addQ, addV) { searchEngines.push({ action: action, name: mainQ, what: addQ, where: addV}); return '<option>' + site + '</option>'; }; var $search_what = $j('<select id="searchEngine"/>') .append(createOption('Mediawiki search', wgScript, 'search', 'title', 'Special:Search')) .append(createOption('Google', 'http://www.google.com/search', 'q', 'sitesearch', 'en.wikibooks.org')) .append(createOption('Yahoo', 'http://search.yahoo.com/search', 'p', 'vs', 'en.wikibooks.org')) .append(createOption('Bing', 'http://www.bing.com/search', 'q', 'q1', 'site:http://en.wikibooks.org')) .append(createOption('Exalead', 'http://www.exalead.com/wikibooks/results', 'q', 'language', 'en')); $(search_for).before($search_what); $j(search).submit( function() { var which = searchEngines[$search_what[0].selectedIndex]; search_for.name = which.name; $(this).attr('action', which.action); $('input[name=title]', this).attr( { name: which.what, value: which.where } ); }); } if (wgPageName == "Special:Search") { var searchEngines = []; $j(window).load(WB_SpecialSearchEnhanced); } // </source> trw3ovh66e5fwnqp2bw5zgk5lf8hjof 14812 14811 2010-12-29T15:31:23Z Darklama 2894 fixed link 14812 javascript text/javascript // <source lang="javascript"> /* * Change Special:Search to use a drop-down menu to pick which search engine to use * Created by [[w:User:Gracenotes]] for Wikipedia; * Updated by [[w:User:Brion VIBBER]] for Wikipedia; * Maintained at Wikibooks by [[User:Mike.lifeguard]] and [[User:Darklama]] */ function WB_SpecialSearchEnhanced() { var search = $j('form#powersearch')[0] || $j('form#search')[0]; var search_for = $('input:text:first', search)[0]; var createOption = function(site, action, mainQ, addQ, addV) { searchEngines.push({ action: action, name: mainQ, what: addQ, where: addV}); return '<option>' + site + '</option>'; }; var $search_what = $j('<select id="searchEngine"/>') .append(createOption('Mediawiki search', wgScript, 'search', 'title', 'Special:Search')) .append(createOption('Google', 'http://www.google.com/search', 'q', 'sitesearch', 'en.wikibooks.org')) .append(createOption('Yahoo', 'http://search.yahoo.com/search', 'p', 'vs', 'en.wikibooks.org')) .append(createOption('Bing', 'http://www.bing.com/search', 'q', 'q1', 'site:http://en.wikibooks.org')) .append(createOption('Exalead', 'http://www.exalead.com/search/wikibooks/results/', 'q', 'language', 'en')); $(search_for).before($search_what); $j(search).submit( function() { var which = searchEngines[$search_what[0].selectedIndex]; search_for.name = which.name; $(this).attr('action', which.action); $('input[name=title]', this).attr( { name: which.what, value: which.where } ); }); } if (wgPageName == "Special:Search") { var searchEngines = []; $j(window).load(WB_SpecialSearchEnhanced); } // </source> k5ly60g8g6nfgp3kun4vrz7r7ecy19k 14813 14812 2010-12-29T15:34:04Z Darklama 2894 looks like Exalead cannot be used 14813 javascript text/javascript // <source lang="javascript"> /* * Change Special:Search to use a drop-down menu to pick which search engine to use * Created by [[w:User:Gracenotes]] for Wikipedia; * Updated by [[w:User:Brion VIBBER]] for Wikipedia; * Maintained at Wikibooks by [[User:Mike.lifeguard]] and [[User:Darklama]] */ function WB_SpecialSearchEnhanced() { var search = $j('form#powersearch')[0] || $j('form#search')[0]; var search_for = $('input:text:first', search)[0]; var createOption = function(site, action, mainQ, addQ, addV) { searchEngines.push({ action: action, name: mainQ, what: addQ, where: addV}); return '<option>' + site + '</option>'; }; var $search_what = $j('<select id="searchEngine"/>') .append(createOption('Mediawiki search', wgScript, 'search', 'title', 'Special:Search')) .append(createOption('Google', 'http://www.google.com/search', 'q', 'sitesearch', 'en.wikibooks.org')) .append(createOption('Yahoo', 'http://search.yahoo.com/search', 'p', 'vs', 'en.wikibooks.org')) .append(createOption('Bing', 'http://www.bing.com/search', 'q', 'q1', 'site:http://en.wikibooks.org')); $(search_for).before($search_what); $j(search).submit( function() { var which = searchEngines[$search_what[0].selectedIndex]; search_for.name = which.name; $(this).attr('action', which.action); $('input[name=title]', this).attr( { name: which.what, value: which.where } ); }); } if (wgPageName == "Special:Search") { var searchEngines = []; $j(window).load(WB_SpecialSearchEnhanced); } // </source> hqok940se3tfbqky7v9rzuub7hmty7f 14814 14813 2014-06-11T17:38:36Z Darklama 2894 update to replace deprecated things 14814 javascript text/javascript /* * Change Special:Search to use a drop-down menu to pick which search engine to use * Created by [[w:User:Gracenotes]] for Wikipedia; * Updated by [[w:User:Brion VIBBER]] for Wikipedia; * Maintained at Wikibooks by [[User:Mike.lifeguard]] and [[User:Darklama]] */ function SpecialSearchEnhanced() { var searchEngines = [], createOption = function(site, action, mainQ, addQ, addV) { searchEngines.push({ action: action, name: mainQ, what: addQ, where: addV}); return '<option>' + site + '</option>'; }, $search = $('#powersearch').add('#search').eq(0), $search_for = $search.find('input:text:first'), $search_what = $('<select id="searchEngine"/>') .append(createOption('English Wikibooks', mw.config.get('wgScript'), 'search', 'title', 'Special:Search')) .append(createOption('Google', 'http://www.google.com/search', 'q', 'sitesearch', 'en.wikibooks.org')) .append(createOption('Yahoo', 'http://search.yahoo.com/search', 'p', 'vs', 'en.wikibooks.org')) .append(createOption('Bing', 'http://www.bing.com/search', 'q', 'q1', 'site:http://en.wikibooks.org')); $search_for.before($search_what); $search.submit( { 'search': searchEngines }, function(e) { var which = e.data.search[$('#searchEngine').prop('selectedIndex')]; $search_for.attr('name', which.name); $(this).attr('action', which.action); $(this).find('input[name=title]').attr({ name: which.what, value: which.where }); }); } if (mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Search') { $(SpecialSearchEnhanced); } 41ex5sqcs8tq749z46pv7tbu8ct81jx 14815 14814 2014-06-11T18:04:24Z Darklama 2894 use more descriptive variable names, and look for search input 14815 javascript text/javascript /* * Change Special:Search to use a drop-down menu to pick which search engine to use * Created by [[w:User:Gracenotes]] for Wikipedia; * Updated by [[w:User:Brion VIBBER]] for Wikipedia; * Maintained at Wikibooks by [[User:Mike.lifeguard]] and [[User:Darklama]] */ function SpecialSearchEnhanced() { var searchEngines = [], createOption = function(site, action, mainQ, addQ, addV) { searchEngines.push({ action: action, name: mainQ, what: addQ, where: addV}); return '<option>' + site + '</option>'; }, $form = $('#powersearch').add('#search').eq(0), $search = $form.find('input[type=search').eq(0), $search_what = $('<select id="searchEngine"/>') .append(createOption('English Wikibooks', mw.config.get('wgScript'), 'search', 'title', 'Special:Search')) .append(createOption('Google', 'http://www.google.com/search', 'q', 'sitesearch', 'en.wikibooks.org')) .append(createOption('Yahoo', 'http://search.yahoo.com/search', 'p', 'vs', 'en.wikibooks.org')) .append(createOption('Bing', 'http://www.bing.com/search', 'q', 'q1', 'site:http://en.wikibooks.org')); $search.before($search_what); $form.submit( { 'search': searchEngines }, function(e) { var which = e.data.search[$('#searchEngine').prop('selectedIndex')]; $search.attr('name', which.name); $(this).attr('action', which.action); $(this).find('input[name=title]').attr({ name: which.what, value: which.where }); }); } if (mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Search') { $(SpecialSearchEnhanced); } l1pq396439u1bnoegzj16x9hmyoo0as 14816 14815 2014-06-11T18:05:18Z Darklama 2894 fix typo 14816 javascript text/javascript /* * Change Special:Search to use a drop-down menu to pick which search engine to use * Created by [[w:User:Gracenotes]] for Wikipedia; * Updated by [[w:User:Brion VIBBER]] for Wikipedia; * Maintained at Wikibooks by [[User:Mike.lifeguard]] and [[User:Darklama]] */ function SpecialSearchEnhanced() { var searchEngines = [], createOption = function(site, action, mainQ, addQ, addV) { searchEngines.push({ action: action, name: mainQ, what: addQ, where: addV}); return '<option>' + site + '</option>'; }, $form = $('#powersearch').add('#search').eq(0), $search = $form.find('input[type=search]').eq(0), $search_what = $('<select id="searchEngine"/>') .append(createOption('English Wikibooks', mw.config.get('wgScript'), 'search', 'title', 'Special:Search')) .append(createOption('Google', 'http://www.google.com/search', 'q', 'sitesearch', 'en.wikibooks.org')) .append(createOption('Yahoo', 'http://search.yahoo.com/search', 'p', 'vs', 'en.wikibooks.org')) .append(createOption('Bing', 'http://www.bing.com/search', 'q', 'q1', 'site:http://en.wikibooks.org')); $search.before($search_what); $form.submit( { 'search': searchEngines }, function(e) { var which = e.data.search[$('#searchEngine').prop('selectedIndex')]; $search.attr('name', which.name); $(this).attr('action', which.action); $(this).find('input[name=title]').attr({ name: which.what, value: which.where }); }); } if (mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Search') { $(SpecialSearchEnhanced); } sc6i1qv7beeucr4z7zoc33bsrgq5l42 14817 14816 2015-08-15T11:07:24Z Az1568 66 Update 14817 javascript text/javascript /** Change Special:Search to use a drop-down menu ******************************************************* * * Description: Change Special:Search to use a drop-down menu, with the default being * the internal MediaWiki engine * Created and maintained by: [[User:Gracenotes]] */ function SpecialSearchEnhanced() { var createOption = function(site, action, mainQ, addQ, addV) { var opt = document.createElement('option'); opt.appendChild(document.createTextNode(site)); window.searchEngines.push([action, mainQ, addQ, addV]); return opt; } if (document.forms.powersearch) var searchForm = document.forms.powersearch; if (document.forms.search) var searchForm = document.forms.search; if (searchForm.lsearchbox) { var searchBox = searchForm.lsearchbox; } else { var searchBox = searchForm.search; } var selectBox = document.createElement('select'); selectBox.id = 'searchEngine'; searchForm.onsubmit = function() { var optSelected = window.searchEngines[document.getElementById('searchEngine').selectedIndex]; searchForm.action = optSelected[0]; searchBox.name = optSelected[1]; searchForm.title.value = optSelected[3]; searchForm.title.name = optSelected[2]; } selectBox.appendChild(createOption('English Wikibooks', mw.config.get( 'wgScript' ), 'search', 'title', 'Special:Search')); selectBox.appendChild(createOption('Google', 'http://www.google.com/search', 'q', 'sitesearch', 'en.wikibooks.org')); selectBox.appendChild(createOption('Yahoo', 'http://search.yahoo.com/search', 'p', 'vs', 'en.wikibooks.org')); selectBox.appendChild(createOption('Bing', 'http://www.bing.com/search', 'q', 'q1', 'site:http://en.wikibooks.org')); selectBox.appendChild(createOption('Wikiwix', 'http://www.wikiwix.com/', 'action', 'lang', 'en')); selectBox.appendChild(createOption('Exalead', 'http://www.exalead.com/wikibooks/results', 'q', 'language', 'en')); searchBox.style.marginLeft = '0px'; if (document.getElementById('loadStatus')) { var lStat = document.getElementById('loadStatus'); } else { var lStat = searchForm.title; if( typeof lStat === 'object' && typeof lStat.length === 'number' ) lStat = lStat[0]; } lStat.parentNode.insertBefore(selectBox, lStat); } window.searchEngines = []; // Script is specific to Special:Search if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Search'){ $(SpecialSearchEnhanced); } ruwlel6p1pm9qtwlj68i5kxiqnhpcu9 14818 14817 2016-08-14T11:51:18Z JackPotte 1965 warning HTTPS 14818 javascript text/javascript /** Change Special:Search to use a drop-down menu ******************************************************* * * Description: Change Special:Search to use a drop-down menu, with the default being * the internal MediaWiki engine * Created and maintained by: [[User:Gracenotes]] */ function SpecialSearchEnhanced() { var createOption = function(site, action, mainQ, addQ, addV) { var opt = document.createElement('option'); opt.appendChild(document.createTextNode(site)); window.searchEngines.push([action, mainQ, addQ, addV]); return opt; } if (document.forms.powersearch) var searchForm = document.forms.powersearch; if (document.forms.search) var searchForm = document.forms.search; if (searchForm.lsearchbox) { var searchBox = searchForm.lsearchbox; } else { var searchBox = searchForm.search; } var selectBox = document.createElement('select'); selectBox.id = 'searchEngine'; searchForm.onsubmit = function() { var optSelected = window.searchEngines[document.getElementById('searchEngine').selectedIndex]; searchForm.action = optSelected[0]; searchBox.name = optSelected[1]; searchForm.title.value = optSelected[3]; searchForm.title.name = optSelected[2]; } selectBox.appendChild(createOption('English Wikibooks', mw.config.get( 'wgScript' ), 'search', 'title', 'Special:Search')); selectBox.appendChild(createOption('Google', 'https://www.google.com/search', 'q', 'sitesearch', 'en.wikibooks.org')); selectBox.appendChild(createOption('Yahoo', 'https://search.yahoo.com/search', 'p', 'vs', 'en.wikibooks.org')); selectBox.appendChild(createOption('Bing', 'https://www.bing.com/search', 'q', 'q1', 'site:http://en.wikibooks.org')); selectBox.appendChild(createOption('Wikiwix', 'https://www.wikiwix.com/', 'action', 'lang', 'en')); selectBox.appendChild(createOption('Exalead', 'https://www.exalead.com/wikibooks/results', 'q', 'language', 'en')); searchBox.style.marginLeft = '0px'; if (document.getElementById('loadStatus')) { var lStat = document.getElementById('loadStatus'); } else { var lStat = searchForm.title; if( typeof lStat === 'object' && typeof lStat.length === 'number' ) lStat = lStat[0]; } lStat.parentNode.insertBefore(selectBox, lStat); } window.searchEngines = []; // Script is specific to Special:Search if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Search'){ $(SpecialSearchEnhanced); } i8l3i4elb5xlnzjbki0jioytp094l4k 14819 14818 2016-08-14T11:55:31Z JackPotte 1965 Reparation 14819 javascript text/javascript /** Change Special:Search to use a drop-down menu ******************************************************* * * Description: Change Special:Search to use a drop-down menu, with the default being * the internal MediaWiki engine * Created and maintained by: [[User:Gracenotes]] */ function SpecialSearchEnhanced() { var createOption = function(site, action, mainQ, addQ, addV) { var opt = document.createElement('option'); opt.appendChild(document.createTextNode(site)); window.searchEngines.push([action, mainQ, addQ, addV]); return opt; } if (document.forms.powersearch) var searchForm = document.forms.powersearch; if (document.forms.search) var searchForm = document.forms.search; if (searchForm.lsearchbox) { var searchBox = searchForm.lsearchbox; } else { var searchBox = searchForm.search; } var selectBox = document.createElement('select'); selectBox.id = 'searchEngine'; searchForm.onsubmit = function() { var optSelected = window.searchEngines[document.getElementById('searchEngine').selectedIndex]; searchForm.action = optSelected[0]; searchBox.name = optSelected[1]; searchForm.title.value = optSelected[3]; searchForm.title.name = optSelected[2]; } selectBox.appendChild(createOption('English Wikibooks', mw.config.get( 'wgScript' ), 'search', 'title', 'Special:Search')); selectBox.appendChild(createOption('Google', 'https://www.google.com/search', 'q', 'sitesearch', 'en.wikibooks.org')); selectBox.appendChild(createOption('Yahoo', 'https://search.yahoo.com/search', 'p', 'vs', 'en.wikibooks.org')); selectBox.appendChild(createOption('Bing', 'https://www.bing.com/search', 'q', 'q1', 'site:http://en.wikibooks.org')); selectBox.appendChild(createOption('Wikiwix', 'https://www.wikiwix.com/', 'action', 'lang', 'en')); selectBox.appendChild(createOption('Exalead', 'https://www.exalead.com/', 'q', 'language', 'en', 'site:http://en.wikibooks.org')); searchBox.style.marginLeft = '0px'; if (document.getElementById('loadStatus')) { var lStat = document.getElementById('loadStatus'); } else { var lStat = searchForm.title; if( typeof lStat === 'object' && typeof lStat.length === 'number' ) lStat = lStat[0]; } lStat.parentNode.insertBefore(selectBox, lStat); } window.searchEngines = []; // Script is specific to Special:Search if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Search'){ $(SpecialSearchEnhanced); } fm4pfb4ura73gh913b17090vq5proeh 14820 14819 2016-08-14T11:56:25Z JackPotte 1965 14820 javascript text/javascript /** Change Special:Search to use a drop-down menu ******************************************************* * * Description: Change Special:Search to use a drop-down menu, with the default being * the internal MediaWiki engine * Created and maintained by: [[User:Gracenotes]] */ function SpecialSearchEnhanced() { var createOption = function(site, action, mainQ, addQ, addV) { var opt = document.createElement('option'); opt.appendChild(document.createTextNode(site)); window.searchEngines.push([action, mainQ, addQ, addV]); return opt; } if (document.forms.powersearch) var searchForm = document.forms.powersearch; if (document.forms.search) var searchForm = document.forms.search; if (searchForm.lsearchbox) { var searchBox = searchForm.lsearchbox; } else { var searchBox = searchForm.search; } var selectBox = document.createElement('select'); selectBox.id = 'searchEngine'; searchForm.onsubmit = function() { var optSelected = window.searchEngines[document.getElementById('searchEngine').selectedIndex]; searchForm.action = optSelected[0]; searchBox.name = optSelected[1]; searchForm.title.value = optSelected[3]; searchForm.title.name = optSelected[2]; } selectBox.appendChild(createOption('English Wikibooks', mw.config.get( 'wgScript' ), 'search', 'title', 'Special:Search')); selectBox.appendChild(createOption('Google', 'https://www.google.com/search', 'q', 'sitesearch', 'en.wikibooks.org')); selectBox.appendChild(createOption('Yahoo', 'https://search.yahoo.com/search', 'p', 'vs', 'en.wikibooks.org')); selectBox.appendChild(createOption('Bing', 'https://www.bing.com/search', 'q', 'q1', 'site:http://en.wikibooks.org')); selectBox.appendChild(createOption('Wikiwix', 'https://www.wikiwix.com/', 'action', 'lang', 'en')); selectBox.appendChild(createOption('Exalead', 'https://www.exalead.com/', 'q' + ' site:http://en.wikibooks.org', 'language', 'en')); searchBox.style.marginLeft = '0px'; if (document.getElementById('loadStatus')) { var lStat = document.getElementById('loadStatus'); } else { var lStat = searchForm.title; if( typeof lStat === 'object' && typeof lStat.length === 'number' ) lStat = lStat[0]; } lStat.parentNode.insertBefore(selectBox, lStat); } window.searchEngines = []; // Script is specific to Special:Search if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Search'){ $(SpecialSearchEnhanced); } 4b7fh54nvj7jhe3n2vzx529s87qcx5z 14821 14820 2016-08-14T11:58:04Z JackPotte 1965 14821 javascript text/javascript /** Change Special:Search to use a drop-down menu ******************************************************* * * Description: Change Special:Search to use a drop-down menu, with the default being * the internal MediaWiki engine * Created and maintained by: [[User:Gracenotes]] */ function SpecialSearchEnhanced() { var createOption = function(site, action, mainQ, addQ, addV) { var opt = document.createElement('option'); opt.appendChild(document.createTextNode(site)); window.searchEngines.push([action, mainQ, addQ, addV]); return opt; } if (document.forms.powersearch) var searchForm = document.forms.powersearch; if (document.forms.search) var searchForm = document.forms.search; if (searchForm.lsearchbox) { var searchBox = searchForm.lsearchbox; } else { var searchBox = searchForm.search; } var selectBox = document.createElement('select'); selectBox.id = 'searchEngine'; searchForm.onsubmit = function() { var optSelected = window.searchEngines[document.getElementById('searchEngine').selectedIndex]; searchForm.action = optSelected[0]; searchBox.name = optSelected[1]; searchForm.title.value = optSelected[3]; searchForm.title.name = optSelected[2]; } selectBox.appendChild(createOption('English Wikibooks', mw.config.get( 'wgScript' ), 'search', 'title', 'Special:Search')); selectBox.appendChild(createOption('Google', 'https://www.google.com/search', 'q', 'sitesearch', 'en.wikibooks.org')); selectBox.appendChild(createOption('Yahoo', 'https://search.yahoo.com/search', 'p', 'vs', 'en.wikibooks.org')); selectBox.appendChild(createOption('Bing', 'https://www.bing.com/search', 'q', 'q1', 'site:https://en.wikibooks.org')); selectBox.appendChild(createOption('Wikiwix', 'https://www.wikiwix.com/', 'action', 'lang', 'en')); selectBox.appendChild(createOption('Exalead', 'https://www.exalead.com/', 'q', 'language', 'en', 'site', 'en.wikibooks.org')); searchBox.style.marginLeft = '0px'; if (document.getElementById('loadStatus')) { var lStat = document.getElementById('loadStatus'); } else { var lStat = searchForm.title; if( typeof lStat === 'object' && typeof lStat.length === 'number' ) lStat = lStat[0]; } lStat.parentNode.insertBefore(selectBox, lStat); } window.searchEngines = []; // Script is specific to Special:Search if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Search'){ $(SpecialSearchEnhanced); } 98cxe4y6rlwrev8r0cy7wwv1w78f2w0 14822 14821 2016-08-14T11:59:37Z JackPotte 1965 14822 javascript text/javascript /** Change Special:Search to use a drop-down menu ******************************************************* * * Description: Change Special:Search to use a drop-down menu, with the default being * the internal MediaWiki engine * Created and maintained by: [[User:Gracenotes]] */ function SpecialSearchEnhanced() { var createOption = function(site, action, mainQ, addQ, addV) { var opt = document.createElement('option'); opt.appendChild(document.createTextNode(site)); window.searchEngines.push([action, mainQ, addQ, addV]); return opt; } if (document.forms.powersearch) var searchForm = document.forms.powersearch; if (document.forms.search) var searchForm = document.forms.search; if (searchForm.lsearchbox) { var searchBox = searchForm.lsearchbox; } else { var searchBox = searchForm.search; } var selectBox = document.createElement('select'); selectBox.id = 'searchEngine'; searchForm.onsubmit = function() { var optSelected = window.searchEngines[document.getElementById('searchEngine').selectedIndex]; searchForm.action = optSelected[0]; searchBox.name = optSelected[1]; searchForm.title.value = optSelected[3]; searchForm.title.name = optSelected[2]; } selectBox.appendChild(createOption('English Wikibooks', mw.config.get( 'wgScript' ), 'search', 'title', 'Special:Search')); selectBox.appendChild(createOption('Google', 'https://www.google.com/search', 'q', 'sitesearch', 'en.wikibooks.org')); selectBox.appendChild(createOption('Yahoo', 'https://search.yahoo.com/search', 'p', 'vs', 'en.wikibooks.org')); selectBox.appendChild(createOption('Bing', 'https://www.bing.com/search', 'q', 'q1', 'site:https://en.wikibooks.org')); selectBox.appendChild(createOption('Wikiwix', 'https://www.wikiwix.com/', 'action', 'lang', 'en')); selectBox.appendChild(createOption('Exalead', 'https://www.exalead.com/', 'q', 'site', 'en.wikibooks.org')); searchBox.style.marginLeft = '0px'; if (document.getElementById('loadStatus')) { var lStat = document.getElementById('loadStatus'); } else { var lStat = searchForm.title; if( typeof lStat === 'object' && typeof lStat.length === 'number' ) lStat = lStat[0]; } lStat.parentNode.insertBefore(selectBox, lStat); } window.searchEngines = []; // Script is specific to Special:Search if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Search'){ $(SpecialSearchEnhanced); } n6xtihu65m51hftvd4ug2wtjr1a3no1 14823 14822 2016-08-14T12:00:37Z JackPotte 1965 14823 javascript text/javascript /** Change Special:Search to use a drop-down menu ******************************************************* * * Description: Change Special:Search to use a drop-down menu, with the default being * the internal MediaWiki engine * Created and maintained by: [[User:Gracenotes]] */ function SpecialSearchEnhanced() { var createOption = function(site, action, mainQ, addQ, addV) { var opt = document.createElement('option'); opt.appendChild(document.createTextNode(site)); window.searchEngines.push([action, mainQ, addQ, addV]); return opt; } if (document.forms.powersearch) var searchForm = document.forms.powersearch; if (document.forms.search) var searchForm = document.forms.search; if (searchForm.lsearchbox) { var searchBox = searchForm.lsearchbox; } else { var searchBox = searchForm.search; } var selectBox = document.createElement('select'); selectBox.id = 'searchEngine'; searchForm.onsubmit = function() { var optSelected = window.searchEngines[document.getElementById('searchEngine').selectedIndex]; searchForm.action = optSelected[0]; searchBox.name = optSelected[1]; searchForm.title.value = optSelected[3]; searchForm.title.name = optSelected[2]; } selectBox.appendChild(createOption('English Wikibooks', mw.config.get( 'wgScript' ), 'search', 'title', 'Special:Search')); selectBox.appendChild(createOption('Google', 'https://www.google.com/search', 'q', 'sitesearch', 'en.wikibooks.org')); selectBox.appendChild(createOption('Yahoo', 'https://search.yahoo.com/search', 'p', 'vs', 'en.wikibooks.org')); selectBox.appendChild(createOption('Bing', 'https://www.bing.com/search', 'q', 'q1', 'site:https://en.wikibooks.org')); selectBox.appendChild(createOption('Wikiwix', 'http://www.wikiwix.com/', 'action', 'lang', 'en')); selectBox.appendChild(createOption('Exalead', 'https://www.exalead.com/', 'q', 'site', 'en.wikibooks.org')); searchBox.style.marginLeft = '0px'; if (document.getElementById('loadStatus')) { var lStat = document.getElementById('loadStatus'); } else { var lStat = searchForm.title; if( typeof lStat === 'object' && typeof lStat.length === 'number' ) lStat = lStat[0]; } lStat.parentNode.insertBefore(selectBox, lStat); } window.searchEngines = []; // Script is specific to Special:Search if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Search'){ $(SpecialSearchEnhanced); } 0jdfykefct9x5kipr6xsnz8wp5oi5d1 14824 14823 2016-08-14T12:02:08Z JackPotte 1965 14824 javascript text/javascript /** Change Special:Search to use a drop-down menu ******************************************************* * * Description: Change Special:Search to use a drop-down menu, with the default being * the internal MediaWiki engine * Created and maintained by: [[User:Gracenotes]] */ function SpecialSearchEnhanced() { var createOption = function(site, action, mainQ, addQ, addV) { var opt = document.createElement('option'); opt.appendChild(document.createTextNode(site)); window.searchEngines.push([action, mainQ, addQ, addV]); return opt; } if (document.forms.powersearch) var searchForm = document.forms.powersearch; if (document.forms.search) var searchForm = document.forms.search; if (searchForm.lsearchbox) { var searchBox = searchForm.lsearchbox; } else { var searchBox = searchForm.search; } var selectBox = document.createElement('select'); selectBox.id = 'searchEngine'; searchForm.onsubmit = function() { var optSelected = window.searchEngines[document.getElementById('searchEngine').selectedIndex]; searchForm.action = optSelected[0]; searchBox.name = optSelected[1]; searchForm.title.value = optSelected[3]; searchForm.title.name = optSelected[2]; } selectBox.appendChild(createOption('English Wikibooks', mw.config.get( 'wgScript' ), 'search', 'title', 'Special:Search')); selectBox.appendChild(createOption('Google', 'https://www.google.com/search', 'q', 'sitesearch', 'en.wikibooks.org')); selectBox.appendChild(createOption('Yahoo', 'https://search.yahoo.com/search', 'p', 'vs', 'en.wikibooks.org')); selectBox.appendChild(createOption('Bing', 'https://www.bing.com/search', 'q', 'q1', 'site:https://en.wikibooks.org')); selectBox.appendChild(createOption('Wikiwix', 'http://www.wikiwix.com/', 'action', 'disp', 'book')); selectBox.appendChild(createOption('Exalead', 'https://www.exalead.com/', 'q', 'site', 'en.wikibooks.org')); searchBox.style.marginLeft = '0px'; if (document.getElementById('loadStatus')) { var lStat = document.getElementById('loadStatus'); } else { var lStat = searchForm.title; if( typeof lStat === 'object' && typeof lStat.length === 'number' ) lStat = lStat[0]; } lStat.parentNode.insertBefore(selectBox, lStat); } window.searchEngines = []; // Script is specific to Special:Search if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Search'){ $(SpecialSearchEnhanced); } ndlx1o6ghlrs501dakzjv51s2id00i7 14825 14824 2026-08-01T17:24:50Z QueerEcofeminist 1879 [[:en:MediaWiki:Gadget-SpecialSearch.js]] पासून १७ आवर्तने आयात केलीत 14824 javascript text/javascript /** Change Special:Search to use a drop-down menu ******************************************************* * * Description: Change Special:Search to use a drop-down menu, with the default being * the internal MediaWiki engine * Created and maintained by: [[User:Gracenotes]] */ function SpecialSearchEnhanced() { var createOption = function(site, action, mainQ, addQ, addV) { var opt = document.createElement('option'); opt.appendChild(document.createTextNode(site)); window.searchEngines.push([action, mainQ, addQ, addV]); return opt; } if (document.forms.powersearch) var searchForm = document.forms.powersearch; if (document.forms.search) var searchForm = document.forms.search; if (searchForm.lsearchbox) { var searchBox = searchForm.lsearchbox; } else { var searchBox = searchForm.search; } var selectBox = document.createElement('select'); selectBox.id = 'searchEngine'; searchForm.onsubmit = function() { var optSelected = window.searchEngines[document.getElementById('searchEngine').selectedIndex]; searchForm.action = optSelected[0]; searchBox.name = optSelected[1]; searchForm.title.value = optSelected[3]; searchForm.title.name = optSelected[2]; } selectBox.appendChild(createOption('English Wikibooks', mw.config.get( 'wgScript' ), 'search', 'title', 'Special:Search')); selectBox.appendChild(createOption('Google', 'https://www.google.com/search', 'q', 'sitesearch', 'en.wikibooks.org')); selectBox.appendChild(createOption('Yahoo', 'https://search.yahoo.com/search', 'p', 'vs', 'en.wikibooks.org')); selectBox.appendChild(createOption('Bing', 'https://www.bing.com/search', 'q', 'q1', 'site:https://en.wikibooks.org')); selectBox.appendChild(createOption('Wikiwix', 'http://www.wikiwix.com/', 'action', 'disp', 'book')); selectBox.appendChild(createOption('Exalead', 'https://www.exalead.com/', 'q', 'site', 'en.wikibooks.org')); searchBox.style.marginLeft = '0px'; if (document.getElementById('loadStatus')) { var lStat = document.getElementById('loadStatus'); } else { var lStat = searchForm.title; if( typeof lStat === 'object' && typeof lStat.length === 'number' ) lStat = lStat[0]; } lStat.parentNode.insertBefore(selectBox, lStat); } window.searchEngines = []; // Script is specific to Special:Search if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Search'){ $(SpecialSearchEnhanced); } ndlx1o6ghlrs501dakzjv51s2id00i7 मिडियाविकी:Gadget-rightsfilter.js 8 4161 14826 2008-01-12T07:15:28Z Mike.lifeguard 117 from [[w:User:Splarka/rightsfilter.js]] 14826 javascript text/javascript var rightsLogOnly = (document.location.href.indexOf('type=rights')==-1 && document.location.href.indexOf('Log/rights')==-1) ? false : true if((wgPageName=='Special:Log')) addOnloadHook(filterLogsButton) function filterLogsButton() { addPortletLink('p-cactions','javascript:filterLogsForm()','Filter','ca-rxfilter','Open interactive log entry regex filter thingy'); if(window.AutoLoadLogsFilter) filterLogsForm(); } function filterLogsForm() { var instructions = (rightsLogOnly) ? 'Regex filter the space-delimited list of rights.' : 'Regex filter the plain text representation of these log entries.' //generate the form document.getElementById('ca-rxfilter').style.display = 'none'; var frm = document.getElementsByTagName('form')[0]; var rf = document.createElement('form'); rf.setAttribute('action','javascript:void(0)'); rf.setAttribute('id','rfform'); var fs = document.createElement('fieldset'); var is = document.createElement('p'); is.appendChild(document.createTextNode(instructions)); fs.appendChild(is); var lg = document.createElement('legend'); lg.appendChild(document.createTextNode('Filter logs (javascript)')); fs.appendChild(lg); if(rightsLogOnly) { var sel = document.createElement('select'); sel.setAttribute('id','rfselect'); var op1 = document.createElement('option'); op1.appendChild(document.createTextNode('added rights')); sel.appendChild(op1); var op2 = document.createElement('option'); op2.appendChild(document.createTextNode('removed rights')); sel.appendChild(op2); var op3 = document.createElement('option'); op3.appendChild(document.createTextNode('added OR removed')); sel.appendChild(op3); var op4 = document.createElement('option'); op4.appendChild(document.createTextNode('added/removed/static')); sel.appendChild(op4); fs.appendChild(sel); } var lab1 = document.createElement('label'); lab1.appendChild(document.createTextNode(' Regex string: ')); lab1.setAttribute('for','rfinput1'); fs.appendChild(lab1); fs.appendChild(document.createTextNode(' ')); var inp1 = document.createElement('input'); inp1.setAttribute('id','rfinput1'); inp1.setAttribute('name','rfinput1'); inp1.setAttribute('type','text'); fs.appendChild(inp1); var chk1 = document.createElement('input'); chk1.setAttribute('id','rfinput2'); chk1.setAttribute('name','rfinput2'); chk1.setAttribute('type','checkbox'); fs.appendChild(chk1); var lab2 = document.createElement('label'); lab2.appendChild(document.createTextNode('Invert ')); lab2.setAttribute('for','rfinput2'); fs.appendChild(lab2); var sub1 = document.createElement('input'); sub1.setAttribute('type','button'); sub1.setAttribute('value','filter'); sub1.setAttribute('onclick','filterLogs(false)'); fs.appendChild(sub1) fs.appendChild(document.createTextNode(' ')); var sub2 = document.createElement('input'); sub2.setAttribute('type','button'); sub2.setAttribute('value','hilight'); sub2.setAttribute('onclick','filterLogs(true)'); fs.appendChild(sub2) rf.appendChild(fs); frm.parentNode.insertBefore(rf,frm); } function filterLogs(hilight) { //grab options from form if(rightsLogOnly) var type = document.getElementById('rfselect').selectedIndex; var invert = document.getElementById('rfinput2').checked; var srch = document.getElementById('rfinput1').value; var rx = new RegExp(srch,'ig'); //grab the list of <li> var uls = document.getElementById('bodyContent').getElementsByTagName('ul'); if(uls.length == 0) return var lis = uls[0].getElementsByTagName('li'); //iterate var rightrx = /^.*?User\:.*? from (.*?) to (.*?) \u200E.*?$/i //the regex used to grab the Special:Log/rights changes for(var i=0;i<lis.length;i++) { if(rightsLogOnly) { //Special:Log/rights var oldr = gettext(lis[i]).replace(rightrx,'$1').replace(/\, /g,' '); var newr = gettext(lis[i]).replace(rightrx,'$2').replace(/\, /g,' '); var oldrl = oldr.split(' '); var newrl = newr.split(' '); for (var j=0;j<oldrl.length;j++) { for (var k=0;k<newrl.length;k++) { if(oldrl[j]==newrl[k]) { oldrl[j] = ''; newrl[k] = ''; } } } var remr = oldrl.join(' '); var addr = newrl.join(' '); switch(type) { case 0: var look = addr; break; case 1: var look = remr; break; case 2: var look = remr + ' ' + addr; break; case 3: var look = oldr + ' ' + newr; break; } } else { //Any other Special:Log var look = gettext(lis[i]); } lis[i].style.display = ''; lis[i].style.backgroundColor = ''; if ((look.search(rx)!=-1 && !invert) || (look.search(rx)==-1 && invert)) { if(hilight) lis[i].style.backgroundColor = '#ffff99'; } else { if(!hilight) lis[i].style.display = 'none'; } } } function gettext(object) { if (object.nodeType == 3) return object.nodeValue; var txt = []; var i=0; while(object.childNodes[i]) { txt[txt.length] = gettext(object.childNodes[i]); i++; } return txt.join(''); } 0fvecag00m7cijuz18bcsw597ewsg83 14827 14826 2008-01-14T19:00:11Z Mike.lifeguard 117 also for CUs 14827 javascript text/javascript var rightsLogOnly = (document.location.href.indexOf('type=rights')==-1 && document.location.href.indexOf('Log/rights')==-1) ? false : true if (wgPageName=="Special:CheckUser") addOnloadHook(filterLogsButton) else if(wgPageName=="Special:Log"){ addOnloadHook(filterLogsButton) } function filterLogsButton() { addPortletLink('p-cactions','javascript:filterLogsForm()','Filter','ca-rxfilter','Open interactive log entry regex filter thingy'); if(window.AutoLoadLogsFilter) filterLogsForm(); } function filterLogsForm() { var instructions = (rightsLogOnly) ? 'Regex filter the space-delimited list of rights.' : 'Regex filter the plain text representation of these log entries.' //generate the form document.getElementById('ca-rxfilter').style.display = 'none'; var frm = document.getElementsByTagName('form')[0]; var rf = document.createElement('form'); rf.setAttribute('action','javascript:void(0)'); rf.setAttribute('id','rfform'); var fs = document.createElement('fieldset'); var is = document.createElement('p'); is.appendChild(document.createTextNode(instructions)); fs.appendChild(is); var lg = document.createElement('legend'); lg.appendChild(document.createTextNode('Filter logs (javascript)')); fs.appendChild(lg); if(rightsLogOnly) { var sel = document.createElement('select'); sel.setAttribute('id','rfselect'); var op1 = document.createElement('option'); op1.appendChild(document.createTextNode('added rights')); sel.appendChild(op1); var op2 = document.createElement('option'); op2.appendChild(document.createTextNode('removed rights')); sel.appendChild(op2); var op3 = document.createElement('option'); op3.appendChild(document.createTextNode('added OR removed')); sel.appendChild(op3); var op4 = document.createElement('option'); op4.appendChild(document.createTextNode('added/removed/static')); sel.appendChild(op4); fs.appendChild(sel); } var lab1 = document.createElement('label'); lab1.appendChild(document.createTextNode(' Regex string: ')); lab1.setAttribute('for','rfinput1'); fs.appendChild(lab1); fs.appendChild(document.createTextNode(' ')); var inp1 = document.createElement('input'); inp1.setAttribute('id','rfinput1'); inp1.setAttribute('name','rfinput1'); inp1.setAttribute('type','text'); fs.appendChild(inp1); var chk1 = document.createElement('input'); chk1.setAttribute('id','rfinput2'); chk1.setAttribute('name','rfinput2'); chk1.setAttribute('type','checkbox'); fs.appendChild(chk1); var lab2 = document.createElement('label'); lab2.appendChild(document.createTextNode('Invert ')); lab2.setAttribute('for','rfinput2'); fs.appendChild(lab2); var sub1 = document.createElement('input'); sub1.setAttribute('type','button'); sub1.setAttribute('value','filter'); sub1.setAttribute('onclick','filterLogs(false)'); fs.appendChild(sub1) fs.appendChild(document.createTextNode(' ')); var sub2 = document.createElement('input'); sub2.setAttribute('type','button'); sub2.setAttribute('value','hilight'); sub2.setAttribute('onclick','filterLogs(true)'); fs.appendChild(sub2) rf.appendChild(fs); frm.parentNode.insertBefore(rf,frm); } function filterLogs(hilight) { //grab options from form if(rightsLogOnly) var type = document.getElementById('rfselect').selectedIndex; var invert = document.getElementById('rfinput2').checked; var srch = document.getElementById('rfinput1').value; var rx = new RegExp(srch,'ig'); //grab the list of <li> var uls = document.getElementById('bodyContent').getElementsByTagName('ul'); if(uls.length == 0) return var lis = uls[0].getElementsByTagName('li'); //iterate var rightrx = /^.*?User\:.*? from (.*?) to (.*?) \u200E.*?$/i //the regex used to grab the Special:Log/rights changes for(var i=0;i<lis.length;i++) { if(rightsLogOnly) { //Special:Log/rights var oldr = gettext(lis[i]).replace(rightrx,'$1').replace(/\, /g,' '); var newr = gettext(lis[i]).replace(rightrx,'$2').replace(/\, /g,' '); var oldrl = oldr.split(' '); var newrl = newr.split(' '); for (var j=0;j<oldrl.length;j++) { for (var k=0;k<newrl.length;k++) { if(oldrl[j]==newrl[k]) { oldrl[j] = ''; newrl[k] = ''; } } } var remr = oldrl.join(' '); var addr = newrl.join(' '); switch(type) { case 0: var look = addr; break; case 1: var look = remr; break; case 2: var look = remr + ' ' + addr; break; case 3: var look = oldr + ' ' + newr; break; } } else { //Any other Special:Log var look = gettext(lis[i]); } lis[i].style.display = ''; lis[i].style.backgroundColor = ''; if ((look.search(rx)!=-1 && !invert) || (look.search(rx)==-1 && invert)) { if(hilight) lis[i].style.backgroundColor = '#ffff99'; } else { if(!hilight) lis[i].style.display = 'none'; } } } function gettext(object) { if (object.nodeType == 3) return object.nodeValue; var txt = []; var i=0; while(object.childNodes[i]) { txt[txt.length] = gettext(object.childNodes[i]); i++; } return txt.join(''); } jjgal9qo2ljblpgu5s2wtu60ug4vh6t 14828 14827 2008-01-17T14:03:13Z Mike.lifeguard 117 also on contribs (very cool) 14828 javascript text/javascript var rightsLogOnly = (document.location.href.indexOf('type=rights')==-1 && document.location.href.indexOf('Log/rights')==-1) ? false : true if (wgPageName=="Special:CheckUser" || wgPageName=="Special:Contributions") addOnloadHook(filterLogsButton) else if(wgPageName=="Special:Log"){ addOnloadHook(filterLogsButton) } function filterLogsButton() { addPortletLink('p-cactions','javascript:filterLogsForm()','Filter','ca-rxfilter','Open interactive log entry regex filter thingy'); if(window.AutoLoadLogsFilter) filterLogsForm(); } function filterLogsForm() { var instructions = (rightsLogOnly) ? 'Regex filter the space-delimited list of rights.' : 'Regex filter the plain text representation of these log entries.' //generate the form document.getElementById('ca-rxfilter').style.display = 'none'; var frm = document.getElementsByTagName('form')[0]; var rf = document.createElement('form'); rf.setAttribute('action','javascript:void(0)'); rf.setAttribute('id','rfform'); var fs = document.createElement('fieldset'); var is = document.createElement('p'); is.appendChild(document.createTextNode(instructions)); fs.appendChild(is); var lg = document.createElement('legend'); lg.appendChild(document.createTextNode('Filter logs (javascript)')); fs.appendChild(lg); if(rightsLogOnly) { var sel = document.createElement('select'); sel.setAttribute('id','rfselect'); var op1 = document.createElement('option'); op1.appendChild(document.createTextNode('added rights')); sel.appendChild(op1); var op2 = document.createElement('option'); op2.appendChild(document.createTextNode('removed rights')); sel.appendChild(op2); var op3 = document.createElement('option'); op3.appendChild(document.createTextNode('added OR removed')); sel.appendChild(op3); var op4 = document.createElement('option'); op4.appendChild(document.createTextNode('added/removed/static')); sel.appendChild(op4); fs.appendChild(sel); } var lab1 = document.createElement('label'); lab1.appendChild(document.createTextNode(' Regex string: ')); lab1.setAttribute('for','rfinput1'); fs.appendChild(lab1); fs.appendChild(document.createTextNode(' ')); var inp1 = document.createElement('input'); inp1.setAttribute('id','rfinput1'); inp1.setAttribute('name','rfinput1'); inp1.setAttribute('type','text'); fs.appendChild(inp1); var chk1 = document.createElement('input'); chk1.setAttribute('id','rfinput2'); chk1.setAttribute('name','rfinput2'); chk1.setAttribute('type','checkbox'); fs.appendChild(chk1); var lab2 = document.createElement('label'); lab2.appendChild(document.createTextNode('Invert ')); lab2.setAttribute('for','rfinput2'); fs.appendChild(lab2); var sub1 = document.createElement('input'); sub1.setAttribute('type','button'); sub1.setAttribute('value','filter'); sub1.setAttribute('onclick','filterLogs(false)'); fs.appendChild(sub1) fs.appendChild(document.createTextNode(' ')); var sub2 = document.createElement('input'); sub2.setAttribute('type','button'); sub2.setAttribute('value','hilight'); sub2.setAttribute('onclick','filterLogs(true)'); fs.appendChild(sub2) rf.appendChild(fs); frm.parentNode.insertBefore(rf,frm); } function filterLogs(hilight) { //grab options from form if(rightsLogOnly) var type = document.getElementById('rfselect').selectedIndex; var invert = document.getElementById('rfinput2').checked; var srch = document.getElementById('rfinput1').value; var rx = new RegExp(srch,'ig'); //grab the list of <li> var uls = document.getElementById('bodyContent').getElementsByTagName('ul'); if(uls.length == 0) return var lis = uls[0].getElementsByTagName('li'); //iterate var rightrx = /^.*?User\:.*? from (.*?) to (.*?) \u200E.*?$/i //the regex used to grab the Special:Log/rights changes for(var i=0;i<lis.length;i++) { if(rightsLogOnly) { //Special:Log/rights var oldr = gettext(lis[i]).replace(rightrx,'$1').replace(/\, /g,' '); var newr = gettext(lis[i]).replace(rightrx,'$2').replace(/\, /g,' '); var oldrl = oldr.split(' '); var newrl = newr.split(' '); for (var j=0;j<oldrl.length;j++) { for (var k=0;k<newrl.length;k++) { if(oldrl[j]==newrl[k]) { oldrl[j] = ''; newrl[k] = ''; } } } var remr = oldrl.join(' '); var addr = newrl.join(' '); switch(type) { case 0: var look = addr; break; case 1: var look = remr; break; case 2: var look = remr + ' ' + addr; break; case 3: var look = oldr + ' ' + newr; break; } } else { //Any other Special:Log var look = gettext(lis[i]); } lis[i].style.display = ''; lis[i].style.backgroundColor = ''; if ((look.search(rx)!=-1 && !invert) || (look.search(rx)==-1 && invert)) { if(hilight) lis[i].style.backgroundColor = '#ffff99'; } else { if(!hilight) lis[i].style.display = 'none'; } } } function gettext(object) { if (object.nodeType == 3) return object.nodeValue; var txt = []; var i=0; while(object.childNodes[i]) { txt[txt.length] = gettext(object.childNodes[i]); i++; } return txt.join(''); } mae17csidsz38bgtn43ltfxg5lpx5ft 14829 14828 2008-03-08T01:41:57Z Mike.lifeguard 117 update from en.wp 14829 javascript text/javascript /* <li> element Filter Script, version [0.1.1] Should currently work on all known skins (with a #contentSub or #topbar) */ var rightsLogOnly = (document.location.href.indexOf('type=rights')==-1 && document.location.href.indexOf('Log/rights')==-1) ? false : true if(wgCanonicalSpecialPageName == 'Log' || wgCanonicalSpecialPageName == 'Linksearch' || wgCanonicalSpecialPageName == 'Contributions' || queryString('lifilter')) addOnloadHook(filterLiButton) function filterLiButton() { if(document.getElementById('p-cactions')) { addPortletLink('p-cactions','javascript:filterLiForm()','Filter','ca-rxfilter','Open interactive log entry regex filter thingy'); if(window.AutoLoadLogsFilter || queryString('lifilter')) filterLiForm(); } else { filterLiForm(); //not a portlet skin, so add the filter anyway. } } function filterLiForm() { var instructions = (rightsLogOnly) ? 'Regex filter the space-delimited list of rights.' : 'Regex filter the plain text representation of this list.' //generate the form try { document.getElementById('ca-rxfilter').style.display = 'none' } catch(e) {} var obj = (document.getElementById('contentSub')) ? document.getElementById('contentSub') : document.getElementById('topbar') if(!obj) return; var rf = document.createElement('div'); rf.setAttribute('id','rfform'); rf.style.color = 'black'; var fs = document.createElement('fieldset'); var is = document.createElement('p'); is.appendChild(document.createTextNode(instructions)); fs.appendChild(is); var lg = document.createElement('legend'); lg.appendChild(document.createTextNode('Filter <li> list (javascript)')); fs.appendChild(lg); if(rightsLogOnly) { var sel = document.createElement('select'); sel.setAttribute('id','rfselect'); var op1 = document.createElement('option'); op1.appendChild(document.createTextNode('added rights')); sel.appendChild(op1); var op2 = document.createElement('option'); op2.appendChild(document.createTextNode('removed rights')); sel.appendChild(op2); var op3 = document.createElement('option'); op3.appendChild(document.createTextNode('added OR removed')); sel.appendChild(op3); var op4 = document.createElement('option'); op4.appendChild(document.createTextNode('added/removed/static')); sel.appendChild(op4); fs.appendChild(sel); } var lab1 = document.createElement('label'); lab1.appendChild(document.createTextNode(' Regex string: ')); lab1.setAttribute('for','rfinput1'); fs.appendChild(lab1); fs.appendChild(document.createTextNode(' ')); var inp1 = document.createElement('input'); inp1.setAttribute('id','rfinput1'); inp1.setAttribute('name','rfinput1'); inp1.setAttribute('type','text'); fs.appendChild(inp1); var chk1 = document.createElement('input'); chk1.setAttribute('id','rfinput2'); chk1.setAttribute('name','rfinput2'); chk1.setAttribute('type','checkbox'); fs.appendChild(chk1); var lab2 = document.createElement('label'); lab2.appendChild(document.createTextNode('Invert ')); lab2.setAttribute('for','rfinput2'); fs.appendChild(lab2); var sub1 = document.createElement('input'); sub1.setAttribute('type','button'); sub1.setAttribute('value','filter'); addClickHandler(sub1,function() { filterLi(false) }); sub1.setAttribute('onclick',''); fs.appendChild(sub1) fs.appendChild(document.createTextNode(' ')); var sub2 = document.createElement('input'); sub2.setAttribute('type','button'); sub2.setAttribute('value','hilight'); addClickHandler(sub2,function() { filterLi(true) }); fs.appendChild(sub2) rf.appendChild(fs); obj.appendChild(rf); } function filterLi(hilight) { //grab options from form if(rightsLogOnly) var type = document.getElementById('rfselect').selectedIndex; var invert = document.getElementById('rfinput2').checked; var srch = document.getElementById('rfinput1').value; var rx = new RegExp(srch,'ig'); //grab the list of all <li> in the content var bod = (document.getElementById('bodyContent')) ? document.getElementById('bodyContent') : document.getElementsByTagName('body')[0] var lis = bod.getElementsByTagName('li'); if(lis.length==0) return; //iterate var rightrx = /^.*?User\:.*? from (.*?) to (.*?) \u200E.*?$/i //the regex used to grab the Special:Log/rights changes for(var i=0;i<lis.length;i++) { if(rightsLogOnly) { //Special:Log/rights var oldr = gettext(lis[i]).replace(rightrx,'$1').replace(/\, /g,' '); var newr = gettext(lis[i]).replace(rightrx,'$2').replace(/\, /g,' '); var oldrl = oldr.split(' '); var newrl = newr.split(' '); for (var j=0;j<oldrl.length;j++) { for (var k=0;k<newrl.length;k++) { if(oldrl[j]==newrl[k]) { oldrl[j] = ''; newrl[k] = ''; } } } var remr = oldrl.join(' '); var addr = newrl.join(' '); switch(type) { case 0: var look = addr; break; case 1: var look = remr; break; case 2: var look = remr + ' ' + addr; break; case 3: var look = oldr + ' ' + newr; break; } } else { //Any other list of <li> objects var look = gettext(lis[i]); } lis[i].style.display = ''; lis[i].style.backgroundColor = ''; if ((look.search(rx)!=-1 && !invert) || (look.search(rx)==-1 && invert)) { if(hilight) lis[i].style.backgroundColor = '#ffff99'; } else { if(!hilight) lis[i].style.display = 'none'; } } } function gettext(object) { if (object.nodeType == 3) return object.nodeValue; var txt = []; var i=0; while(object.childNodes[i]) { txt[txt.length] = gettext(object.childNodes[i]); i++; } return txt.join(''); } function queryString(p) { var re = RegExp('[&?]' + p + '=([^&]*)'); var matches; if (matches = re.exec(document.location)) { try { return decodeURI(matches[1]); } catch (e) { } } return null; } 5v2rr3z89komrrs45qeghsh0ellk1bx 14830 14829 2008-03-19T05:34:59Z Mike.lifeguard 117 or if Ipblocklist 14830 javascript text/javascript /* <li> element Filter Script, version [0.1.1] Should currently work on all known skins (with a #contentSub or #topbar) */ var rightsLogOnly = (document.location.href.indexOf('type=rights')==-1 && document.location.href.indexOf('Log/rights')==-1) ? false : true if(wgCanonicalSpecialPageName == 'Log' || wgCanonicalSpecialPageName == 'Linksearch' || wgCanonicalSpecialPageName == 'Contributions' wgCanonicalSpecialPageName == 'Ipblocklist' || queryString('lifilter')) addOnloadHook(filterLiButton) function filterLiButton() { if(document.getElementById('p-cactions')) { addPortletLink('p-cactions','javascript:filterLiForm()','Filter','ca-rxfilter','Open interactive log entry regex filter thingy'); if(window.AutoLoadLogsFilter || queryString('lifilter')) filterLiForm(); } else { filterLiForm(); //not a portlet skin, so add the filter anyway. } } function filterLiForm() { var instructions = (rightsLogOnly) ? 'Regex filter the space-delimited list of rights.' : 'Regex filter the plain text representation of this list.' //generate the form try { document.getElementById('ca-rxfilter').style.display = 'none' } catch(e) {} var obj = (document.getElementById('contentSub')) ? document.getElementById('contentSub') : document.getElementById('topbar') if(!obj) return; var rf = document.createElement('div'); rf.setAttribute('id','rfform'); rf.style.color = 'black'; var fs = document.createElement('fieldset'); var is = document.createElement('p'); is.appendChild(document.createTextNode(instructions)); fs.appendChild(is); var lg = document.createElement('legend'); lg.appendChild(document.createTextNode('Filter <li> list (javascript)')); fs.appendChild(lg); if(rightsLogOnly) { var sel = document.createElement('select'); sel.setAttribute('id','rfselect'); var op1 = document.createElement('option'); op1.appendChild(document.createTextNode('added rights')); sel.appendChild(op1); var op2 = document.createElement('option'); op2.appendChild(document.createTextNode('removed rights')); sel.appendChild(op2); var op3 = document.createElement('option'); op3.appendChild(document.createTextNode('added OR removed')); sel.appendChild(op3); var op4 = document.createElement('option'); op4.appendChild(document.createTextNode('added/removed/static')); sel.appendChild(op4); fs.appendChild(sel); } var lab1 = document.createElement('label'); lab1.appendChild(document.createTextNode(' Regex string: ')); lab1.setAttribute('for','rfinput1'); fs.appendChild(lab1); fs.appendChild(document.createTextNode(' ')); var inp1 = document.createElement('input'); inp1.setAttribute('id','rfinput1'); inp1.setAttribute('name','rfinput1'); inp1.setAttribute('type','text'); fs.appendChild(inp1); var chk1 = document.createElement('input'); chk1.setAttribute('id','rfinput2'); chk1.setAttribute('name','rfinput2'); chk1.setAttribute('type','checkbox'); fs.appendChild(chk1); var lab2 = document.createElement('label'); lab2.appendChild(document.createTextNode('Invert ')); lab2.setAttribute('for','rfinput2'); fs.appendChild(lab2); var sub1 = document.createElement('input'); sub1.setAttribute('type','button'); sub1.setAttribute('value','filter'); addClickHandler(sub1,function() { filterLi(false) }); sub1.setAttribute('onclick',''); fs.appendChild(sub1) fs.appendChild(document.createTextNode(' ')); var sub2 = document.createElement('input'); sub2.setAttribute('type','button'); sub2.setAttribute('value','hilight'); addClickHandler(sub2,function() { filterLi(true) }); fs.appendChild(sub2) rf.appendChild(fs); obj.appendChild(rf); } function filterLi(hilight) { //grab options from form if(rightsLogOnly) var type = document.getElementById('rfselect').selectedIndex; var invert = document.getElementById('rfinput2').checked; var srch = document.getElementById('rfinput1').value; var rx = new RegExp(srch,'ig'); //grab the list of all <li> in the content var bod = (document.getElementById('bodyContent')) ? document.getElementById('bodyContent') : document.getElementsByTagName('body')[0] var lis = bod.getElementsByTagName('li'); if(lis.length==0) return; //iterate var rightrx = /^.*?User\:.*? from (.*?) to (.*?) \u200E.*?$/i //the regex used to grab the Special:Log/rights changes for(var i=0;i<lis.length;i++) { if(rightsLogOnly) { //Special:Log/rights var oldr = gettext(lis[i]).replace(rightrx,'$1').replace(/\, /g,' '); var newr = gettext(lis[i]).replace(rightrx,'$2').replace(/\, /g,' '); var oldrl = oldr.split(' '); var newrl = newr.split(' '); for (var j=0;j<oldrl.length;j++) { for (var k=0;k<newrl.length;k++) { if(oldrl[j]==newrl[k]) { oldrl[j] = ''; newrl[k] = ''; } } } var remr = oldrl.join(' '); var addr = newrl.join(' '); switch(type) { case 0: var look = addr; break; case 1: var look = remr; break; case 2: var look = remr + ' ' + addr; break; case 3: var look = oldr + ' ' + newr; break; } } else { //Any other list of <li> objects var look = gettext(lis[i]); } lis[i].style.display = ''; lis[i].style.backgroundColor = ''; if ((look.search(rx)!=-1 && !invert) || (look.search(rx)==-1 && invert)) { if(hilight) lis[i].style.backgroundColor = '#ffff99'; } else { if(!hilight) lis[i].style.display = 'none'; } } } function gettext(object) { if (object.nodeType == 3) return object.nodeValue; var txt = []; var i=0; while(object.childNodes[i]) { txt[txt.length] = gettext(object.childNodes[i]); i++; } return txt.join(''); } function queryString(p) { var re = RegExp('[&?]' + p + '=([^&]*)'); var matches; if (matches = re.exec(document.location)) { try { return decodeURI(matches[1]); } catch (e) { } } return null; } rmrqnf4j2loyc9e5im5uukfb62r56o8 14831 14830 2008-03-19T05:35:49Z Mike.lifeguard 117 whoops 14831 javascript text/javascript /* <li> element Filter Script, version [0.1.1] Should currently work on all known skins (with a #contentSub or #topbar) */ var rightsLogOnly = (document.location.href.indexOf('type=rights')==-1 && document.location.href.indexOf('Log/rights')==-1) ? false : true if(wgCanonicalSpecialPageName == 'Log' || wgCanonicalSpecialPageName == 'Linksearch' || wgCanonicalSpecialPageName == 'Contributions' || wgCanonicalSpecialPageName == 'Ipblocklist' || queryString('lifilter')) addOnloadHook(filterLiButton) function filterLiButton() { if(document.getElementById('p-cactions')) { addPortletLink('p-cactions','javascript:filterLiForm()','Filter','ca-rxfilter','Open interactive log entry regex filter thingy'); if(window.AutoLoadLogsFilter || queryString('lifilter')) filterLiForm(); } else { filterLiForm(); //not a portlet skin, so add the filter anyway. } } function filterLiForm() { var instructions = (rightsLogOnly) ? 'Regex filter the space-delimited list of rights.' : 'Regex filter the plain text representation of this list.' //generate the form try { document.getElementById('ca-rxfilter').style.display = 'none' } catch(e) {} var obj = (document.getElementById('contentSub')) ? document.getElementById('contentSub') : document.getElementById('topbar') if(!obj) return; var rf = document.createElement('div'); rf.setAttribute('id','rfform'); rf.style.color = 'black'; var fs = document.createElement('fieldset'); var is = document.createElement('p'); is.appendChild(document.createTextNode(instructions)); fs.appendChild(is); var lg = document.createElement('legend'); lg.appendChild(document.createTextNode('Filter <li> list (javascript)')); fs.appendChild(lg); if(rightsLogOnly) { var sel = document.createElement('select'); sel.setAttribute('id','rfselect'); var op1 = document.createElement('option'); op1.appendChild(document.createTextNode('added rights')); sel.appendChild(op1); var op2 = document.createElement('option'); op2.appendChild(document.createTextNode('removed rights')); sel.appendChild(op2); var op3 = document.createElement('option'); op3.appendChild(document.createTextNode('added OR removed')); sel.appendChild(op3); var op4 = document.createElement('option'); op4.appendChild(document.createTextNode('added/removed/static')); sel.appendChild(op4); fs.appendChild(sel); } var lab1 = document.createElement('label'); lab1.appendChild(document.createTextNode(' Regex string: ')); lab1.setAttribute('for','rfinput1'); fs.appendChild(lab1); fs.appendChild(document.createTextNode(' ')); var inp1 = document.createElement('input'); inp1.setAttribute('id','rfinput1'); inp1.setAttribute('name','rfinput1'); inp1.setAttribute('type','text'); fs.appendChild(inp1); var chk1 = document.createElement('input'); chk1.setAttribute('id','rfinput2'); chk1.setAttribute('name','rfinput2'); chk1.setAttribute('type','checkbox'); fs.appendChild(chk1); var lab2 = document.createElement('label'); lab2.appendChild(document.createTextNode('Invert ')); lab2.setAttribute('for','rfinput2'); fs.appendChild(lab2); var sub1 = document.createElement('input'); sub1.setAttribute('type','button'); sub1.setAttribute('value','filter'); addClickHandler(sub1,function() { filterLi(false) }); sub1.setAttribute('onclick',''); fs.appendChild(sub1) fs.appendChild(document.createTextNode(' ')); var sub2 = document.createElement('input'); sub2.setAttribute('type','button'); sub2.setAttribute('value','hilight'); addClickHandler(sub2,function() { filterLi(true) }); fs.appendChild(sub2) rf.appendChild(fs); obj.appendChild(rf); } function filterLi(hilight) { //grab options from form if(rightsLogOnly) var type = document.getElementById('rfselect').selectedIndex; var invert = document.getElementById('rfinput2').checked; var srch = document.getElementById('rfinput1').value; var rx = new RegExp(srch,'ig'); //grab the list of all <li> in the content var bod = (document.getElementById('bodyContent')) ? document.getElementById('bodyContent') : document.getElementsByTagName('body')[0] var lis = bod.getElementsByTagName('li'); if(lis.length==0) return; //iterate var rightrx = /^.*?User\:.*? from (.*?) to (.*?) \u200E.*?$/i //the regex used to grab the Special:Log/rights changes for(var i=0;i<lis.length;i++) { if(rightsLogOnly) { //Special:Log/rights var oldr = gettext(lis[i]).replace(rightrx,'$1').replace(/\, /g,' '); var newr = gettext(lis[i]).replace(rightrx,'$2').replace(/\, /g,' '); var oldrl = oldr.split(' '); var newrl = newr.split(' '); for (var j=0;j<oldrl.length;j++) { for (var k=0;k<newrl.length;k++) { if(oldrl[j]==newrl[k]) { oldrl[j] = ''; newrl[k] = ''; } } } var remr = oldrl.join(' '); var addr = newrl.join(' '); switch(type) { case 0: var look = addr; break; case 1: var look = remr; break; case 2: var look = remr + ' ' + addr; break; case 3: var look = oldr + ' ' + newr; break; } } else { //Any other list of <li> objects var look = gettext(lis[i]); } lis[i].style.display = ''; lis[i].style.backgroundColor = ''; if ((look.search(rx)!=-1 && !invert) || (look.search(rx)==-1 && invert)) { if(hilight) lis[i].style.backgroundColor = '#ffff99'; } else { if(!hilight) lis[i].style.display = 'none'; } } } function gettext(object) { if (object.nodeType == 3) return object.nodeValue; var txt = []; var i=0; while(object.childNodes[i]) { txt[txt.length] = gettext(object.childNodes[i]); i++; } return txt.join(''); } function queryString(p) { var re = RegExp('[&?]' + p + '=([^&]*)'); var matches; if (matches = re.exec(document.location)) { try { return decodeURI(matches[1]); } catch (e) { } } return null; } deduwlj3a98os5tgseloyzdwgpqfi4e 14832 14831 2008-03-25T19:27:29Z Mike.lifeguard 117 also on checkuser 14832 javascript text/javascript /* <li> element Filter Script, version [0.1.1] Should currently work on all known skins (with a #contentSub or #topbar) */ var rightsLogOnly = (document.location.href.indexOf('type=rights')==-1 && document.location.href.indexOf('Log/rights')==-1) ? false : true if(wgCanonicalSpecialPageName == 'Log' || wgCanonicalSpecialPageName == 'Checkuser' || wgCanonicalSpecialPageName == 'Linksearch' || wgCanonicalSpecialPageName == 'Contributions' || wgCanonicalSpecialPageName == 'Ipblocklist' || queryString('lifilter')) addOnloadHook(filterLiButton) function filterLiButton() { if(document.getElementById('p-cactions')) { addPortletLink('p-cactions','javascript:filterLiForm()','Filter','ca-rxfilter','Open interactive log entry regex filter thingy'); if(window.AutoLoadLogsFilter || queryString('lifilter')) filterLiForm(); } else { filterLiForm(); //not a portlet skin, so add the filter anyway. } } function filterLiForm() { var instructions = (rightsLogOnly) ? 'Regex filter the space-delimited list of rights.' : 'Regex filter the plain text representation of this list.' //generate the form try { document.getElementById('ca-rxfilter').style.display = 'none' } catch(e) {} var obj = (document.getElementById('contentSub')) ? document.getElementById('contentSub') : document.getElementById('topbar') if(!obj) return; var rf = document.createElement('div'); rf.setAttribute('id','rfform'); rf.style.color = 'black'; var fs = document.createElement('fieldset'); var is = document.createElement('p'); is.appendChild(document.createTextNode(instructions)); fs.appendChild(is); var lg = document.createElement('legend'); lg.appendChild(document.createTextNode('Filter <li> list (javascript)')); fs.appendChild(lg); if(rightsLogOnly) { var sel = document.createElement('select'); sel.setAttribute('id','rfselect'); var op1 = document.createElement('option'); op1.appendChild(document.createTextNode('added rights')); sel.appendChild(op1); var op2 = document.createElement('option'); op2.appendChild(document.createTextNode('removed rights')); sel.appendChild(op2); var op3 = document.createElement('option'); op3.appendChild(document.createTextNode('added OR removed')); sel.appendChild(op3); var op4 = document.createElement('option'); op4.appendChild(document.createTextNode('added/removed/static')); sel.appendChild(op4); fs.appendChild(sel); } var lab1 = document.createElement('label'); lab1.appendChild(document.createTextNode(' Regex string: ')); lab1.setAttribute('for','rfinput1'); fs.appendChild(lab1); fs.appendChild(document.createTextNode(' ')); var inp1 = document.createElement('input'); inp1.setAttribute('id','rfinput1'); inp1.setAttribute('name','rfinput1'); inp1.setAttribute('type','text'); fs.appendChild(inp1); var chk1 = document.createElement('input'); chk1.setAttribute('id','rfinput2'); chk1.setAttribute('name','rfinput2'); chk1.setAttribute('type','checkbox'); fs.appendChild(chk1); var lab2 = document.createElement('label'); lab2.appendChild(document.createTextNode('Invert ')); lab2.setAttribute('for','rfinput2'); fs.appendChild(lab2); var sub1 = document.createElement('input'); sub1.setAttribute('type','button'); sub1.setAttribute('value','filter'); addClickHandler(sub1,function() { filterLi(false) }); sub1.setAttribute('onclick',''); fs.appendChild(sub1) fs.appendChild(document.createTextNode(' ')); var sub2 = document.createElement('input'); sub2.setAttribute('type','button'); sub2.setAttribute('value','hilight'); addClickHandler(sub2,function() { filterLi(true) }); fs.appendChild(sub2) rf.appendChild(fs); obj.appendChild(rf); } function filterLi(hilight) { //grab options from form if(rightsLogOnly) var type = document.getElementById('rfselect').selectedIndex; var invert = document.getElementById('rfinput2').checked; var srch = document.getElementById('rfinput1').value; var rx = new RegExp(srch,'ig'); //grab the list of all <li> in the content var bod = (document.getElementById('bodyContent')) ? document.getElementById('bodyContent') : document.getElementsByTagName('body')[0] var lis = bod.getElementsByTagName('li'); if(lis.length==0) return; //iterate var rightrx = /^.*?User\:.*? from (.*?) to (.*?) \u200E.*?$/i //the regex used to grab the Special:Log/rights changes for(var i=0;i<lis.length;i++) { if(rightsLogOnly) { //Special:Log/rights var oldr = gettext(lis[i]).replace(rightrx,'$1').replace(/\, /g,' '); var newr = gettext(lis[i]).replace(rightrx,'$2').replace(/\, /g,' '); var oldrl = oldr.split(' '); var newrl = newr.split(' '); for (var j=0;j<oldrl.length;j++) { for (var k=0;k<newrl.length;k++) { if(oldrl[j]==newrl[k]) { oldrl[j] = ''; newrl[k] = ''; } } } var remr = oldrl.join(' '); var addr = newrl.join(' '); switch(type) { case 0: var look = addr; break; case 1: var look = remr; break; case 2: var look = remr + ' ' + addr; break; case 3: var look = oldr + ' ' + newr; break; } } else { //Any other list of <li> objects var look = gettext(lis[i]); } lis[i].style.display = ''; lis[i].style.backgroundColor = ''; if ((look.search(rx)!=-1 && !invert) || (look.search(rx)==-1 && invert)) { if(hilight) lis[i].style.backgroundColor = '#ffff99'; } else { if(!hilight) lis[i].style.display = 'none'; } } } function gettext(object) { if (object.nodeType == 3) return object.nodeValue; var txt = []; var i=0; while(object.childNodes[i]) { txt[txt.length] = gettext(object.childNodes[i]); i++; } return txt.join(''); } function queryString(p) { var re = RegExp('[&?]' + p + '=([^&]*)'); var matches; if (matches = re.exec(document.location)) { try { return decodeURI(matches[1]); } catch (e) { } } return null; } 5dklnxo2nwauq2zxgimz8zipkdng1vd 14833 14832 2008-03-25T19:28:16Z Mike.lifeguard 117 camelcase 14833 javascript text/javascript /* <li> element Filter Script, version [0.1.1] Should currently work on all known skins (with a #contentSub or #topbar) */ var rightsLogOnly = (document.location.href.indexOf('type=rights')==-1 && document.location.href.indexOf('Log/rights')==-1) ? false : true if(wgCanonicalSpecialPageName == 'Log' || wgCanonicalSpecialPageName == 'CheckUser' || wgCanonicalSpecialPageName == 'Linksearch' || wgCanonicalSpecialPageName == 'Contributions' || wgCanonicalSpecialPageName == 'Ipblocklist' || queryString('lifilter')) addOnloadHook(filterLiButton) function filterLiButton() { if(document.getElementById('p-cactions')) { addPortletLink('p-cactions','javascript:filterLiForm()','Filter','ca-rxfilter','Open interactive log entry regex filter thingy'); if(window.AutoLoadLogsFilter || queryString('lifilter')) filterLiForm(); } else { filterLiForm(); //not a portlet skin, so add the filter anyway. } } function filterLiForm() { var instructions = (rightsLogOnly) ? 'Regex filter the space-delimited list of rights.' : 'Regex filter the plain text representation of this list.' //generate the form try { document.getElementById('ca-rxfilter').style.display = 'none' } catch(e) {} var obj = (document.getElementById('contentSub')) ? document.getElementById('contentSub') : document.getElementById('topbar') if(!obj) return; var rf = document.createElement('div'); rf.setAttribute('id','rfform'); rf.style.color = 'black'; var fs = document.createElement('fieldset'); var is = document.createElement('p'); is.appendChild(document.createTextNode(instructions)); fs.appendChild(is); var lg = document.createElement('legend'); lg.appendChild(document.createTextNode('Filter <li> list (javascript)')); fs.appendChild(lg); if(rightsLogOnly) { var sel = document.createElement('select'); sel.setAttribute('id','rfselect'); var op1 = document.createElement('option'); op1.appendChild(document.createTextNode('added rights')); sel.appendChild(op1); var op2 = document.createElement('option'); op2.appendChild(document.createTextNode('removed rights')); sel.appendChild(op2); var op3 = document.createElement('option'); op3.appendChild(document.createTextNode('added OR removed')); sel.appendChild(op3); var op4 = document.createElement('option'); op4.appendChild(document.createTextNode('added/removed/static')); sel.appendChild(op4); fs.appendChild(sel); } var lab1 = document.createElement('label'); lab1.appendChild(document.createTextNode(' Regex string: ')); lab1.setAttribute('for','rfinput1'); fs.appendChild(lab1); fs.appendChild(document.createTextNode(' ')); var inp1 = document.createElement('input'); inp1.setAttribute('id','rfinput1'); inp1.setAttribute('name','rfinput1'); inp1.setAttribute('type','text'); fs.appendChild(inp1); var chk1 = document.createElement('input'); chk1.setAttribute('id','rfinput2'); chk1.setAttribute('name','rfinput2'); chk1.setAttribute('type','checkbox'); fs.appendChild(chk1); var lab2 = document.createElement('label'); lab2.appendChild(document.createTextNode('Invert ')); lab2.setAttribute('for','rfinput2'); fs.appendChild(lab2); var sub1 = document.createElement('input'); sub1.setAttribute('type','button'); sub1.setAttribute('value','filter'); addClickHandler(sub1,function() { filterLi(false) }); sub1.setAttribute('onclick',''); fs.appendChild(sub1) fs.appendChild(document.createTextNode(' ')); var sub2 = document.createElement('input'); sub2.setAttribute('type','button'); sub2.setAttribute('value','hilight'); addClickHandler(sub2,function() { filterLi(true) }); fs.appendChild(sub2) rf.appendChild(fs); obj.appendChild(rf); } function filterLi(hilight) { //grab options from form if(rightsLogOnly) var type = document.getElementById('rfselect').selectedIndex; var invert = document.getElementById('rfinput2').checked; var srch = document.getElementById('rfinput1').value; var rx = new RegExp(srch,'ig'); //grab the list of all <li> in the content var bod = (document.getElementById('bodyContent')) ? document.getElementById('bodyContent') : document.getElementsByTagName('body')[0] var lis = bod.getElementsByTagName('li'); if(lis.length==0) return; //iterate var rightrx = /^.*?User\:.*? from (.*?) to (.*?) \u200E.*?$/i //the regex used to grab the Special:Log/rights changes for(var i=0;i<lis.length;i++) { if(rightsLogOnly) { //Special:Log/rights var oldr = gettext(lis[i]).replace(rightrx,'$1').replace(/\, /g,' '); var newr = gettext(lis[i]).replace(rightrx,'$2').replace(/\, /g,' '); var oldrl = oldr.split(' '); var newrl = newr.split(' '); for (var j=0;j<oldrl.length;j++) { for (var k=0;k<newrl.length;k++) { if(oldrl[j]==newrl[k]) { oldrl[j] = ''; newrl[k] = ''; } } } var remr = oldrl.join(' '); var addr = newrl.join(' '); switch(type) { case 0: var look = addr; break; case 1: var look = remr; break; case 2: var look = remr + ' ' + addr; break; case 3: var look = oldr + ' ' + newr; break; } } else { //Any other list of <li> objects var look = gettext(lis[i]); } lis[i].style.display = ''; lis[i].style.backgroundColor = ''; if ((look.search(rx)!=-1 && !invert) || (look.search(rx)==-1 && invert)) { if(hilight) lis[i].style.backgroundColor = '#ffff99'; } else { if(!hilight) lis[i].style.display = 'none'; } } } function gettext(object) { if (object.nodeType == 3) return object.nodeValue; var txt = []; var i=0; while(object.childNodes[i]) { txt[txt.length] = gettext(object.childNodes[i]); i++; } return txt.join(''); } function queryString(p) { var re = RegExp('[&?]' + p + '=([^&]*)'); var matches; if (matches = re.exec(document.location)) { try { return decodeURI(matches[1]); } catch (e) { } } return null; } 78g5yee1dvadmusrgivgwa5taw47hrb 14834 14833 2008-10-04T03:26:11Z Mike.lifeguard 117 camelcase 14834 javascript text/javascript /* <li> element Filter Script, version [0.1.1] Should currently work on all known skins (with a #contentSub or #topbar) */ var rightsLogOnly = (document.location.href.indexOf('type=rights')==-1 && document.location.href.indexOf('Log/rights')==-1) ? false : true if(wgCanonicalSpecialPageName == 'Log' || wgCanonicalSpecialPageName == 'CheckUser' || wgCanonicalSpecialPageName == 'LinkSearch' || wgCanonicalSpecialPageName == 'Contributions' || wgCanonicalSpecialPageName == 'IPBlockList' || queryString('lifilter')) addOnloadHook(filterLiButton) function filterLiButton() { if(document.getElementById('p-cactions')) { addPortletLink('p-cactions','javascript:filterLiForm()','Filter','ca-rxfilter','Open interactive log entry regex filter thingy'); if(window.AutoLoadLogsFilter || queryString('lifilter')) filterLiForm(); } else { filterLiForm(); //not a portlet skin, so add the filter anyway. } } function filterLiForm() { var instructions = (rightsLogOnly) ? 'Regex filter the space-delimited list of rights.' : 'Regex filter the plain text representation of this list.' //generate the form try { document.getElementById('ca-rxfilter').style.display = 'none' } catch(e) {} var obj = (document.getElementById('contentSub')) ? document.getElementById('contentSub') : document.getElementById('topbar') if(!obj) return; var rf = document.createElement('div'); rf.setAttribute('id','rfform'); rf.style.color = 'black'; var fs = document.createElement('fieldset'); var is = document.createElement('p'); is.appendChild(document.createTextNode(instructions)); fs.appendChild(is); var lg = document.createElement('legend'); lg.appendChild(document.createTextNode('Filter <li> list (javascript)')); fs.appendChild(lg); if(rightsLogOnly) { var sel = document.createElement('select'); sel.setAttribute('id','rfselect'); var op1 = document.createElement('option'); op1.appendChild(document.createTextNode('added rights')); sel.appendChild(op1); var op2 = document.createElement('option'); op2.appendChild(document.createTextNode('removed rights')); sel.appendChild(op2); var op3 = document.createElement('option'); op3.appendChild(document.createTextNode('added OR removed')); sel.appendChild(op3); var op4 = document.createElement('option'); op4.appendChild(document.createTextNode('added/removed/static')); sel.appendChild(op4); fs.appendChild(sel); } var lab1 = document.createElement('label'); lab1.appendChild(document.createTextNode(' Regex string: ')); lab1.setAttribute('for','rfinput1'); fs.appendChild(lab1); fs.appendChild(document.createTextNode(' ')); var inp1 = document.createElement('input'); inp1.setAttribute('id','rfinput1'); inp1.setAttribute('name','rfinput1'); inp1.setAttribute('type','text'); fs.appendChild(inp1); var chk1 = document.createElement('input'); chk1.setAttribute('id','rfinput2'); chk1.setAttribute('name','rfinput2'); chk1.setAttribute('type','checkbox'); fs.appendChild(chk1); var lab2 = document.createElement('label'); lab2.appendChild(document.createTextNode('Invert ')); lab2.setAttribute('for','rfinput2'); fs.appendChild(lab2); var sub1 = document.createElement('input'); sub1.setAttribute('type','button'); sub1.setAttribute('value','filter'); addClickHandler(sub1,function() { filterLi(false) }); sub1.setAttribute('onclick',''); fs.appendChild(sub1) fs.appendChild(document.createTextNode(' ')); var sub2 = document.createElement('input'); sub2.setAttribute('type','button'); sub2.setAttribute('value','hilight'); addClickHandler(sub2,function() { filterLi(true) }); fs.appendChild(sub2) rf.appendChild(fs); obj.appendChild(rf); } function filterLi(hilight) { //grab options from form if(rightsLogOnly) var type = document.getElementById('rfselect').selectedIndex; var invert = document.getElementById('rfinput2').checked; var srch = document.getElementById('rfinput1').value; var rx = new RegExp(srch,'ig'); //grab the list of all <li> in the content var bod = (document.getElementById('bodyContent')) ? document.getElementById('bodyContent') : document.getElementsByTagName('body')[0] var lis = bod.getElementsByTagName('li'); if(lis.length==0) return; //iterate var rightrx = /^.*?User\:.*? from (.*?) to (.*?) \u200E.*?$/i //the regex used to grab the Special:Log/rights changes for(var i=0;i<lis.length;i++) { if(rightsLogOnly) { //Special:Log/rights var oldr = gettext(lis[i]).replace(rightrx,'$1').replace(/\, /g,' '); var newr = gettext(lis[i]).replace(rightrx,'$2').replace(/\, /g,' '); var oldrl = oldr.split(' '); var newrl = newr.split(' '); for (var j=0;j<oldrl.length;j++) { for (var k=0;k<newrl.length;k++) { if(oldrl[j]==newrl[k]) { oldrl[j] = ''; newrl[k] = ''; } } } var remr = oldrl.join(' '); var addr = newrl.join(' '); switch(type) { case 0: var look = addr; break; case 1: var look = remr; break; case 2: var look = remr + ' ' + addr; break; case 3: var look = oldr + ' ' + newr; break; } } else { //Any other list of <li> objects var look = gettext(lis[i]); } lis[i].style.display = ''; lis[i].style.backgroundColor = ''; if ((look.search(rx)!=-1 && !invert) || (look.search(rx)==-1 && invert)) { if(hilight) lis[i].style.backgroundColor = '#ffff99'; } else { if(!hilight) lis[i].style.display = 'none'; } } } function gettext(object) { if (object.nodeType == 3) return object.nodeValue; var txt = []; var i=0; while(object.childNodes[i]) { txt[txt.length] = gettext(object.childNodes[i]); i++; } return txt.join(''); } function queryString(p) { var re = RegExp('[&?]' + p + '=([^&]*)'); var matches; if (matches = re.exec(document.location)) { try { return decodeURI(matches[1]); } catch (e) { } } return null; } cymhdjpwwiwkhe13p171p4dlfvctk7m 14835 14834 2008-10-05T21:37:40Z Mike.lifeguard 117 sync to meta 14835 javascript text/javascript // Log filter script // Created by [[w:User:Splarka|Splarka]] & amended [[b:User:Mike.lifeguard]] /* <li> element Filter Script, version [0.1.1] Should currently work on all known skins (with a #contentSub or #topbar) */ var rightsLogOnly = (document.location.href.indexOf('type=rights')==-1 && document.location.href.indexOf('Log/rights')==-1) ? false : true if(wgAction == 'history' || wgCanonicalSpecialPageName == 'Search' || wgCanonicalSpecialPageName == 'Log' || wgCanonicalSpecialPageName == 'CheckUser' || wgCanonicalSpecialPageName == 'LinkSearch' || wgCanonicalSpecialPageName == 'Contributions' || wgCanonicalSpecialPageName == 'IPBlockList' || queryString('lifilter')) addOnloadHook(filterLiButton) function filterLiButton() { if(document.getElementById('p-cactions')) { addPortletLink('p-cactions','javascript:filterLiForm()','Filter','ca-rxfilter','Open interactive log entry regex filter thingy'); if(window.AutoLoadLogsFilter || queryString('lifilter')) filterLiForm(); } else { filterLiForm(); //not a portlet skin, so add the filter anyway. } } function filterLiForm() { var instructions = (rightsLogOnly) ? 'Regex filter the space-delimited list of rights.' : 'Regex filter the plain text representation of this list.' //generate the form try { document.getElementById('ca-rxfilter').style.display = 'none' } catch(e) {} var obj = (document.getElementById('contentSub')) ? document.getElementById('contentSub') : document.getElementById('topbar') if(!obj) return; var rf = document.createElement('div'); rf.setAttribute('id','rfform'); rf.style.color = 'black'; var fs = document.createElement('fieldset'); var is = document.createElement('p'); is.appendChild(document.createTextNode(instructions)); fs.appendChild(is); var lg = document.createElement('legend'); lg.appendChild(document.createTextNode('Filter <li> list (javascript)')); fs.appendChild(lg); if(rightsLogOnly) { var sel = document.createElement('select'); sel.setAttribute('id','rfselect'); var op1 = document.createElement('option'); op1.appendChild(document.createTextNode('added rights')); sel.appendChild(op1); var op2 = document.createElement('option'); op2.appendChild(document.createTextNode('removed rights')); sel.appendChild(op2); var op3 = document.createElement('option'); op3.appendChild(document.createTextNode('added OR removed')); sel.appendChild(op3); var op4 = document.createElement('option'); op4.appendChild(document.createTextNode('added/removed/static')); sel.appendChild(op4); fs.appendChild(sel); } var lab1 = document.createElement('label'); lab1.appendChild(document.createTextNode(' Regex string: ')); lab1.setAttribute('for','rfinput1'); fs.appendChild(lab1); fs.appendChild(document.createTextNode(' ')); var inp1 = document.createElement('input'); inp1.setAttribute('id','rfinput1'); inp1.setAttribute('name','rfinput1'); inp1.setAttribute('type','text'); fs.appendChild(inp1); var chk1 = document.createElement('input'); chk1.setAttribute('id','rfinput2'); chk1.setAttribute('name','rfinput2'); chk1.setAttribute('type','checkbox'); fs.appendChild(chk1); var lab2 = document.createElement('label'); lab2.appendChild(document.createTextNode('Invert ')); lab2.setAttribute('for','rfinput2'); fs.appendChild(lab2); var sub1 = document.createElement('input'); sub1.setAttribute('type','button'); sub1.setAttribute('value','filter'); addClickHandler(sub1,function() { filterLi(false) }); sub1.setAttribute('onclick',''); fs.appendChild(sub1) fs.appendChild(document.createTextNode(' ')); var sub2 = document.createElement('input'); sub2.setAttribute('type','button'); sub2.setAttribute('value','hilight'); addClickHandler(sub2,function() { filterLi(true) }); fs.appendChild(sub2) rf.appendChild(fs); obj.appendChild(rf); } function filterLi(hilight) { //grab options from form if(rightsLogOnly) var type = document.getElementById('rfselect').selectedIndex; var invert = document.getElementById('rfinput2').checked; var srch = document.getElementById('rfinput1').value; var rx = new RegExp(srch,'ig'); //grab the list of all <li> in the content var bod = (document.getElementById('bodyContent')) ? document.getElementById('bodyContent') : document.getElementsByTagName('body')[0] var lis = bod.getElementsByTagName('li'); if(lis.length==0) return; //iterate var rightrx = /^.*?User\:.*? from (.*?) to (.*?) \u200E.*?$/i //the regex used to grab the Special:Log/rights changes for(var i=0;i<lis.length;i++) { if(rightsLogOnly) { //Special:Log/rights var oldr = gettext(lis[i]).replace(rightrx,'$1').replace(/\, /g,' '); var newr = gettext(lis[i]).replace(rightrx,'$2').replace(/\, /g,' '); var oldrl = oldr.split(' '); var newrl = newr.split(' '); for (var j=0;j<oldrl.length;j++) { for (var k=0;k<newrl.length;k++) { if(oldrl[j]==newrl[k]) { oldrl[j] = ''; newrl[k] = ''; } } } var remr = oldrl.join(' '); var addr = newrl.join(' '); switch(type) { case 0: var look = addr; break; case 1: var look = remr; break; case 2: var look = remr + ' ' + addr; break; case 3: var look = oldr + ' ' + newr; break; } } else { //Any other list of <li> objects var look = gettext(lis[i]); } lis[i].style.display = ''; lis[i].style.backgroundColor = ''; if ((look.search(rx)!=-1 && !invert) || (look.search(rx)==-1 && invert)) { if(hilight) lis[i].style.backgroundColor = '#ffff99'; } else { if(!hilight) lis[i].style.display = 'none'; } } } function gettext(object) { if (object.nodeType == 3) return object.nodeValue; var txt = []; var i=0; while(object.childNodes[i]) { txt[txt.length] = gettext(object.childNodes[i]); i++; } return txt.join(''); } function queryString(p) { var re = RegExp('[&?]' + p + '=([^&]*)'); var matches; if (matches = re.exec(document.location)) { try { return decodeURI(matches[1]); } catch (e) { } } return null; } omofxtasio28m3756g1i33u238tpdfj 14836 14835 2010-12-08T18:45:32Z Darklama 2894 used jquery 14836 javascript text/javascript // <source lang="javascript"> // Log and <li> filter script, version [0.1.1] // Created by [[w:User:Splarka|Splarka]] & amended [[User:Mike.lifeguard]] var rightsLogOnly = (QueryString('type') == 'rights' || document.location.href.indexOf('Log/rights') != -1 ); if ( wgAction == 'history' || wgCanonicalSpecialPageName == 'Search' || wgCanonicalSpecialPageName == 'Log' || wgCanonicalSpecialPageName == 'CheckUser' || wgCanonicalSpecialPageName == 'LinkSearch' || wgCanonicalSpecialPageName == 'Contributions' || wgCanonicalSpecialPageName == 'IPBlockList' || QueryString('lifilter')) { $j(document).ready( function() { if (document.getElementById('p-cactions')) { addPortletLink('p-cactions', 'javascript:filterLiForm()' , 'Filter', 'ca-rxfilter', 'Open interactive log filter'); if (window.AutoLoadLogsFilter || QueryString('lifilter')) { filterLiForm(); } } else { filterLiForm(); // not a portlet skin, so add the filter anyway. } } } function filterLiForm() { var obj = document.getElementById('contentSub') || document.getElementById('topbar'); if ( !obj ) { return; } var instructions = (rightsLogOnly) ? 'Filter by space-delimited list of rights.' : 'Filter the plain text representation of this list.' // generate the form $j('#ca-rxfilter).css('display', 'none); var form = '<div id="rfform" style="color:black;"></div>'; var field += '<fieldset>'; field += '<p>'+instructions+'</p>'; field += '<legend>Filter list</legend>'; if (rightsLogOnly) { field += '<select id="rfselect"><option>+ rights</option><option>- rights</option>'; field += '<option>either</option><option>all</option></select>'; } field += '<label for="rfinput1">Match:</label> <input id="rfinput1" type="text" />'; field += '<input id="rfinput2" type="checkbox" /> <label for="rfinput2">Invert</label>'; field += '</fieldset>'; $j(obj).append( $j(form).append( $j(field).append( $j('<input type="button" value="filter" />').click( function() { filterLi(false); } ) ) .append( $j('<input type="button" value="highlight" />').click( function() { filterLi(true); } ) ) ); ); return; } function filterLi(hilight) { // grab options from form if (rightsLogOnly) var type = document.getElementById('rfselect').selectedIndex; var invert = document.getElementById('rfinput2').checked; var srch = document.getElementById('rfinput1').value; var rx = new RegExp(srch,'ig'); var rightrx = /^.*?User\:.*? from (.*?) to (.*?) \u200E.*?$/i // the regex used to grab the Special:Log/rights changes // grab the list of all <li> in the content var bod = document.getElementById('bodyContent') || document.getElementsByTagName('body')[0]; $j('li', bod).each( function() { var look = ''; if (rightsLogOnly) { // Special:Log/rights var text = $(this).text(); var oldr = text.replace(rightrx,'$1').replace(/\, /g,' '); var newr = text.replace(rightrx,'$2').replace(/\, /g,' '); var oldrl = oldr.split(' '); var newrl = newr.split(' '); for (var j=0; j<oldrl.length; ++j) { for (var k=0; k<newrl.length; ++k) { if (oldrl[j]==newrl[k]) { oldrl[j] = ''; newrl[k] = ''; } } } var remr = oldrl.join(' '); var addr = newrl.join(' '); switch (type) { case 0: look = addr; break; case 1: look = remr; break; case 2: look = remr + ' ' + addr; break; case 3: look = oldr + ' ' + newr; break; } } else { look = $j(this).text(); } $j(this).css( { display: '', 'backgroundColor': '' } ); if ( (look.search(rx) != -1 && !invert) || (look.search(rx) == -1 && invert) ) { if (hilight) $j(this).css('backgroundColor', '#ffff99'); } else { if (!hilight) $j(this).css('display', 'none'); } } } function QueryString(p) { var re = RegExp('[&?]' + p + '=([^&]*)'); var matches; if (matches = re.exec(document.location)) { try { return decodeURI(matches[1]); } catch (e) {} } return null; } // </source> ppp8aqtrlxe3l4pbdn0cdc6yhznpvey 14837 14836 2010-12-08T19:45:13Z Darklama 2894 14837 javascript text/javascript // <source lang="javascript"> // Log and <li> filter script, version [0.1.1] // Created by [[w:User:Splarka|Splarka]] & amended [[User:Mike.lifeguard]] var rightsLogOnly = (QueryString('type') == 'rights' || document.location.href.indexOf('Log/rights') != -1 ); if ( wgAction == 'history' || wgCanonicalSpecialPageName == 'Search' || wgCanonicalSpecialPageName == 'Log' || wgCanonicalSpecialPageName == 'CheckUser' || wgCanonicalSpecialPageName == 'LinkSearch' || wgCanonicalSpecialPageName == 'Contributions' || wgCanonicalSpecialPageName == 'IPBlockList' || QueryString('lifilter')) { $j(document).ready( function() { if (document.getElementById('p-cactions')) { addPortletLink('p-cactions', 'javascript:filterLiForm()' , 'Filter', 'ca-rxfilter', 'Open interactive log filter'); if (window.AutoLoadLogsFilter || QueryString('lifilter')) { filterLiForm(); } } else { filterLiForm(); // not a portlet skin, so add the filter anyway. } }); } function filterLiForm() { var obj = document.getElementById('contentSub') || document.getElementById('topbar'); if ( !obj ) { return; } var instructions = (rightsLogOnly) ? 'Filter by space-delimited list of rights.' : 'Filter the plain text representation of this list.' // generate the form $j('#ca-rxfilter).css('display', 'none); var form = '<div id="rfform" style="color:black;"></div>'; var field += '<fieldset>'; field += '<p>'+instructions+'</p>'; field += '<legend>Filter list</legend>'; if (rightsLogOnly) { field += '<select id="rfselect"><option>+ rights</option><option>- rights</option>'; field += '<option>either</option><option>all</option></select>'; } field += '<label for="rfinput1">Match:</label> <input id="rfinput1" type="text" />'; field += '<input id="rfinput2" type="checkbox" /> <label for="rfinput2">Invert</label>'; field += '</fieldset>'; $j(obj).append( $j(form).append( $j(field).append( $j('<input type="button" value="filter" />').click( function() { filterLi(false); } ) ) .append( $j('<input type="button" value="highlight" />').click( function() { filterLi(true); } ) ) ); ); return; } function filterLi(hilight) { // grab options from form if (rightsLogOnly) var type = document.getElementById('rfselect').selectedIndex; var invert = document.getElementById('rfinput2').checked; var srch = document.getElementById('rfinput1').value; var rx = new RegExp(srch,'ig'); var rightrx = /^.*?User\:.*? from (.*?) to (.*?) \u200E.*?$/i // the regex used to grab the Special:Log/rights changes // grab the list of all <li> in the content var bod = document.getElementById('bodyContent') || document.getElementsByTagName('body')[0]; $j('li', bod).each( function() { var look = ''; if (rightsLogOnly) { // Special:Log/rights var text = $(this).text(); var oldr = text.replace(rightrx,'$1').replace(/\, /g,' '); var newr = text.replace(rightrx,'$2').replace(/\, /g,' '); var oldrl = oldr.split(' '); var newrl = newr.split(' '); for (var j=0; j<oldrl.length; ++j) { for (var k=0; k<newrl.length; ++k) { if (oldrl[j]==newrl[k]) { oldrl[j] = ''; newrl[k] = ''; } } } var remr = oldrl.join(' '); var addr = newrl.join(' '); switch (type) { case 0: look = addr; break; case 1: look = remr; break; case 2: look = remr + ' ' + addr; break; case 3: look = oldr + ' ' + newr; break; } } else { look = $j(this).text(); } $j(this).css( { display: '', 'backgroundColor': '' } ); if ( (look.search(rx) != -1 && !invert) || (look.search(rx) == -1 && invert) ) { if (hilight) $j(this).css('backgroundColor', '#ffff99'); } else { if (!hilight) $j(this).css('display', 'none'); } }); } function QueryString(p) { var re = RegExp('[&?]' + p + '=([^&]*)'); var matches; if (matches = re.exec(document.location)) { try { return decodeURI(matches[1]); } catch (e) {} } return null; } // </source> 94tmwey33vevhnt7y3a00vwm8o83ozj 14838 14837 2010-12-08T19:50:38Z Darklama 2894 14838 javascript text/javascript // <source lang="javascript"> // Log and <li> filter script, version [0.1.1] // Created by [[w:User:Splarka|Splarka]] & amended [[User:Mike.lifeguard]] var rightsLogOnly = (QueryString('type') == 'rights' || document.location.href.indexOf('Log/rights') != -1 ); if ( wgAction == 'history' || wgCanonicalSpecialPageName == 'Search' || wgCanonicalSpecialPageName == 'Log' || wgCanonicalSpecialPageName == 'CheckUser' || wgCanonicalSpecialPageName == 'LinkSearch' || wgCanonicalSpecialPageName == 'Contributions' || wgCanonicalSpecialPageName == 'IPBlockList' || QueryString('lifilter')) { $j(document).ready( function() { if (document.getElementById('p-cactions')) { addPortletLink('p-cactions', 'javascript:filterLiForm()' , 'Filter', 'ca-rxfilter', 'Open interactive log filter'); if (window.AutoLoadLogsFilter || QueryString('lifilter')) { filterLiForm(); } } else { filterLiForm(); // not a portlet skin, so add the filter anyway. } }); } function filterLiForm() { var obj = document.getElementById('contentSub') || document.getElementById('topbar'); if ( !obj ) { return; } var instructions = (rightsLogOnly) ? 'Filter by space-delimited list of rights.' : 'Filter the plain text representation of this list.' // generate the form $j('#ca-rxfilter).css('display', 'none); var form = '<div id="rfform" style="color:black;"></div>'; var field = '<fieldset>'; field += '<p>'+instructions+'</p>'; field += '<legend>Filter list</legend>'; if (rightsLogOnly) { field += '<select id="rfselect"><option>+ rights</option><option>- rights</option>'; field += '<option>either</option><option>all</option></select>'; } field += '<label for="rfinput1">Match:</label> <input id="rfinput1" type="text" />'; field += '<input id="rfinput2" type="checkbox" /> <label for="rfinput2">Invert</label>'; field += '</fieldset>'; $j(obj).append( $j(form).append( $j(field).append( $j('<input type="button" value="filter" />').click( function() { filterLi(false); } ) ) .append( $j('<input type="button" value="highlight" />').click( function() { filterLi(true); } ) ) ); ); return; } function filterLi(hilight) { // grab options from form if (rightsLogOnly) var type = document.getElementById('rfselect').selectedIndex; var invert = document.getElementById('rfinput2').checked; var srch = document.getElementById('rfinput1').value; var rx = new RegExp(srch,'ig'); var rightrx = /^.*?User\:.*? from (.*?) to (.*?) \u200E.*?$/i; // the regex used to grab the Special:Log/rights changes // grab the list of all <li> in the content var bod = document.getElementById('bodyContent') || document.getElementsByTagName('body')[0]; $j('li', bod).each( function() { var look = ''; if (rightsLogOnly) { // Special:Log/rights var text = $(this).text(); var oldr = text.replace(rightrx,'$1').replace(/\, /g,' '); var newr = text.replace(rightrx,'$2').replace(/\, /g,' '); var oldrl = oldr.split(' '); var newrl = newr.split(' '); for (var j=0; j<oldrl.length; ++j) { for (var k=0; k<newrl.length; ++k) { if (oldrl[j]==newrl[k]) { oldrl[j] = ''; newrl[k] = ''; } } } var remr = oldrl.join(' '); var addr = newrl.join(' '); switch (type) { case 0: look = addr; break; case 1: look = remr; break; case 2: look = remr + ' ' + addr; break; case 3: look = oldr + ' ' + newr; break; } } else { look = $j(this).text(); } $j(this).css( { display: '', 'backgroundColor': '' } ); if ( (look.search(rx) != -1 && !invert) || (look.search(rx) == -1 && invert) ) { if (hilight) $j(this).css('backgroundColor', '#ffff99'); } else { if (!hilight) $j(this).css('display', 'none'); } }); } function QueryString(p) { var re = RegExp('[&?]' + p + '=([^&]*)'); var matches; if (matches = re.exec(document.location)) { try { return decodeURI(matches[1]); } catch (e) {} } return null; } // </source> lkasb89pnjb3wsbbq76h8iggz0bw8zi 14839 14838 2010-12-08T19:57:44Z Darklama 2894 semicolons 14839 javascript text/javascript // <source lang="javascript"> // Log and <li> filter script, version [0.1.1] // Created by [[w:User:Splarka|Splarka]] & amended [[User:Mike.lifeguard]] var rightsLogOnly = (QueryString('type') == 'rights' || document.location.href.indexOf('Log/rights') != -1 ); if ( wgAction == 'history' || wgCanonicalSpecialPageName == 'Search' || wgCanonicalSpecialPageName == 'Log' || wgCanonicalSpecialPageName == 'CheckUser' || wgCanonicalSpecialPageName == 'LinkSearch' || wgCanonicalSpecialPageName == 'Contributions' || wgCanonicalSpecialPageName == 'IPBlockList' || QueryString('lifilter')) { $j(document).ready( function() { if (document.getElementById('p-cactions')) { addPortletLink('p-cactions', 'javascript:filterLiForm()' , 'Filter', 'ca-rxfilter', 'Open interactive log filter'); if (window.AutoLoadLogsFilter || QueryString('lifilter')) { filterLiForm(); } } else { filterLiForm(); // not a portlet skin, so add the filter anyway. } }); } function filterLiForm() { var obj = document.getElementById('contentSub') || document.getElementById('topbar'); if ( !obj ) { return; } var instructions = (rightsLogOnly) ? 'Filter by space-delimited list of rights.' : 'Filter the plain text representation of this list.'; // generate the form $j('#ca-rxfilter).css('display', 'none); var form = '<div id="rfform" style="color:black;"></div>'; var field = '<fieldset>'; field += '<p>'+instructions+'</p>'; field += '<legend>Filter list</legend>'; if (rightsLogOnly) { field += '<select id="rfselect"><option>+ rights</option><option>- rights</option>'; field += '<option>either</option><option>all</option></select>'; } field += '<label for="rfinput1">Match:</label> <input id="rfinput1" type="text" />'; field += '<input id="rfinput2" type="checkbox" /> <label for="rfinput2">Invert</label>'; field += '</fieldset>'; $j(obj).append( $j(form).append( $j(field).append( $j('<input type="button" value="filter" />').click( function() { filterLi(false); } ) ) .append( $j('<input type="button" value="highlight" />').click( function() { filterLi(true); } ) ) ) ); return; } function filterLi(hilight) { // grab options from form if (rightsLogOnly) var type = document.getElementById('rfselect').selectedIndex; var invert = document.getElementById('rfinput2').checked; var srch = document.getElementById('rfinput1').value; var rx = new RegExp(srch,'ig'); var rightrx = /^.*?User\:.*? from (.*?) to (.*?) \u200E.*?$/i; // the regex used to grab the Special:Log/rights changes // grab the list of all <li> in the content var bod = document.getElementById('bodyContent') || document.getElementsByTagName('body')[0]; $j('li', bod).each( function() { var look = ''; if (rightsLogOnly) { // Special:Log/rights var text = $(this).text(); var oldr = text.replace(rightrx,'$1').replace(/\, /g,' '); var newr = text.replace(rightrx,'$2').replace(/\, /g,' '); var oldrl = oldr.split(' '); var newrl = newr.split(' '); for (var j=0; j<oldrl.length; ++j) { for (var k=0; k<newrl.length; ++k) { if (oldrl[j]==newrl[k]) { oldrl[j] = ''; newrl[k] = ''; } } } var remr = oldrl.join(' '); var addr = newrl.join(' '); switch (type) { case 0: look = addr; break; case 1: look = remr; break; case 2: look = remr + ' ' + addr; break; case 3: look = oldr + ' ' + newr; break; } } else { look = $j(this).text(); } $j(this).css( { display: '', 'backgroundColor': '' } ); if ( (look.search(rx) != -1 && !invert) || (look.search(rx) == -1 && invert) ) { if (hilight) $j(this).css('backgroundColor', '#ffff99'); } else { if (!hilight) $j(this).css('display', 'none'); } }); } function QueryString(p) { var re = RegExp('[&?]' + p + '=([^&]*)'); var matches; if (matches = re.exec(document.location)) { try { return decodeURI(matches[1]); } catch (e) {} } return null; } // </source> g2eas9ov0ieso0srtil8xera2gc2ju1 14840 14839 2010-12-08T20:06:39Z Darklama 2894 missing ' 14840 javascript text/javascript // <source lang="javascript"> // Log and <li> filter script, version [0.1.1] // Created by [[w:User:Splarka|Splarka]] & amended [[User:Mike.lifeguard]] var rightsLogOnly = (QueryString('type') == 'rights' || document.location.href.indexOf('Log/rights') != -1 ); if ( wgAction == 'history' || wgCanonicalSpecialPageName == 'Search' || wgCanonicalSpecialPageName == 'Log' || wgCanonicalSpecialPageName == 'CheckUser' || wgCanonicalSpecialPageName == 'LinkSearch' || wgCanonicalSpecialPageName == 'Contributions' || wgCanonicalSpecialPageName == 'IPBlockList' || QueryString('lifilter')) { $j(document).ready( function() { if (document.getElementById('p-cactions')) { addPortletLink('p-cactions', 'javascript:filterLiForm()' , 'Filter', 'ca-rxfilter', 'Open interactive log filter'); if (window.AutoLoadLogsFilter || QueryString('lifilter')) { filterLiForm(); } } else { filterLiForm(); // not a portlet skin, so add the filter anyway. } }); } function filterLiForm() { var obj = document.getElementById('contentSub') || document.getElementById('topbar'); if ( !obj ) { return; } var instructions = (rightsLogOnly) ? 'Filter by space-delimited list of rights.' : 'Filter the plain text representation of this list.'; // generate the form $j('#ca-rxfilter').css('display', 'none'); var form = '<div id="rfform" style="color:black;"></div>'; var field = '<fieldset>'; field += '<p>'+instructions+'</p>'; field += '<legend>Filter list</legend>'; if (rightsLogOnly) { field += '<select id="rfselect"><option>+ rights</option><option>- rights</option>'; field += '<option>either</option><option>all</option></select>'; } field += '<label for="rfinput1">Match:</label> <input id="rfinput1" type="text" />'; field += '<input id="rfinput2" type="checkbox" /> <label for="rfinput2">Invert</label>'; field += '</fieldset>'; $j(obj).append( $j(form).append( $j(field).append( $j('<input type="button" value="filter" />').click( function() { filterLi(false); } ) ) .append( $j('<input type="button" value="highlight" />').click( function() { filterLi(true); } ) ) ) ); return; } function filterLi(hilight) { // grab options from form if (rightsLogOnly) var type = document.getElementById('rfselect').selectedIndex; var invert = document.getElementById('rfinput2').checked; var srch = document.getElementById('rfinput1').value; var rx = new RegExp(srch,'ig'); var rightrx = /^.*?User\:.*? from (.*?) to (.*?) \u200E.*?$/i; // the regex used to grab the Special:Log/rights changes // grab the list of all <li> in the content var bod = document.getElementById('bodyContent') || document.getElementsByTagName('body')[0]; $j('li', bod).each( function() { var look = ''; if (rightsLogOnly) { // Special:Log/rights var text = $(this).text(); var oldr = text.replace(rightrx,'$1').replace(/\, /g,' '); var newr = text.replace(rightrx,'$2').replace(/\, /g,' '); var oldrl = oldr.split(' '); var newrl = newr.split(' '); for (var j=0; j<oldrl.length; ++j) { for (var k=0; k<newrl.length; ++k) { if (oldrl[j]==newrl[k]) { oldrl[j] = ''; newrl[k] = ''; } } } var remr = oldrl.join(' '); var addr = newrl.join(' '); switch (type) { case 0: look = addr; break; case 1: look = remr; break; case 2: look = remr + ' ' + addr; break; case 3: look = oldr + ' ' + newr; break; } } else { look = $j(this).text(); } $j(this).css( { display: '', 'backgroundColor': '' } ); if ( (look.search(rx) != -1 && !invert) || (look.search(rx) == -1 && invert) ) { if (hilight) $j(this).css('backgroundColor', '#ffff99'); } else { if (!hilight) $j(this).css('display', 'none'); } }); } function QueryString(p) { var re = RegExp('[&?]' + p + '=([^&]*)'); var matches; if (matches = re.exec(document.location)) { try { return decodeURI(matches[1]); } catch (e) {} } return null; } // </source> 61sr5vvut3g0765np9txk08b69huj2t 14841 14840 2010-12-08T20:14:58Z Darklama 2894 form spacing 14841 javascript text/javascript // <source lang="javascript"> // Log and <li> filter script, version [0.1.1] // Created by [[w:User:Splarka|Splarka]] & amended [[User:Mike.lifeguard]] var rightsLogOnly = (QueryString('type') == 'rights' || document.location.href.indexOf('Log/rights') != -1 ); if ( wgAction == 'history' || wgCanonicalSpecialPageName == 'Search' || wgCanonicalSpecialPageName == 'Log' || wgCanonicalSpecialPageName == 'CheckUser' || wgCanonicalSpecialPageName == 'LinkSearch' || wgCanonicalSpecialPageName == 'Contributions' || wgCanonicalSpecialPageName == 'IPBlockList' || QueryString('lifilter')) { $j(document).ready( function() { if (document.getElementById('p-cactions')) { addPortletLink('p-cactions', 'javascript:filterLiForm()' , 'Filter', 'ca-rxfilter', 'Open interactive log filter'); if (window.AutoLoadLogsFilter || QueryString('lifilter')) { filterLiForm(); } } else { filterLiForm(); // not a portlet skin, so add the filter anyway. } }); } function filterLiForm() { var obj = document.getElementById('contentSub') || document.getElementById('topbar'); if ( !obj ) { return; } var instructions = (rightsLogOnly) ? 'Filter by space-delimited list of rights.' : 'Filter the plain text representation of this list.'; // generate the form $j('#ca-rxfilter').css('display', 'none'); var form = '<div id="rfform" style="color:black;"></div>'; var field = '<fieldset>'; field += '<p>'+instructions+'</p>'; field += '<legend>Filter list</legend>'; if (rightsLogOnly) { field += '<select id="rfselect"><option>+ rights</option><option>- rights</option>'; field += '<option>either</option><option>all</option></select> '; } field += '<label for="rfinput1">Match:</label> <input id="rfinput1" type="text" /> '; field += '<input id="rfinput2" type="checkbox" /> <label for="rfinput2">Invert</label> '; field += '</fieldset>'; $j(obj).append( $j(form).append( $j(field).append( $j('<input type="button" value="filter" />').click( function() { filterLi(false); } ) ) .append( $j('<input type="button" value="highlight" />').click( function() { filterLi(true); } ) ) ) ); return; } function filterLi(hilight) { // grab options from form if (rightsLogOnly) var type = document.getElementById('rfselect').selectedIndex; var invert = document.getElementById('rfinput2').checked; var srch = document.getElementById('rfinput1').value; var rx = new RegExp(srch,'ig'); var rightrx = /^.*?User\:.*? from (.*?) to (.*?) \u200E.*?$/i; // the regex used to grab the Special:Log/rights changes // grab the list of all <li> in the content var bod = document.getElementById('bodyContent') || document.getElementsByTagName('body')[0]; $j('li', bod).each( function() { var look = ''; if (rightsLogOnly) { // Special:Log/rights var text = $j(this).text(); var oldr = text.replace(rightrx,'$1').replace(/\, /g,' '); var newr = text.replace(rightrx,'$2').replace(/\, /g,' '); var oldrl = oldr.split(' '); var newrl = newr.split(' '); for (var j=0; j<oldrl.length; ++j) { for (var k=0; k<newrl.length; ++k) { if (oldrl[j]==newrl[k]) { oldrl[j] = ''; newrl[k] = ''; } } } var remr = oldrl.join(' '); var addr = newrl.join(' '); switch (type) { case 0: look = addr; break; case 1: look = remr; break; case 2: look = remr + ' ' + addr; break; case 3: look = oldr + ' ' + newr; break; } } else { look = $j(this).text(); } $j(this).css( { display: '', 'backgroundColor': '' } ); if ( (look.search(rx) != -1 && !invert) || (look.search(rx) == -1 && invert) ) { if (hilight) $j(this).css('backgroundColor', '#ffff99'); } else { if (!hilight) $j(this).css('display', 'none'); } }); } function QueryString(p) { var re = RegExp('[&?]' + p + '=([^&]*)'); var matches; if (matches = re.exec(document.location)) { try { return decodeURI(matches[1]); } catch (e) {} } return null; } // </source> 8cf6ki7ltcux940kzr2wcvx1v0xep8p 14842 14841 2015-02-05T18:20:01Z He7d3r 2069 [[mw:RL/MGU|Migration]]: addPortletLink → mw.util.addPortletLink; wg* → mw.config.get('wg*'); $j → $; -javascript URL 14842 javascript text/javascript // Log and <li> filter script, version [0.1.1] // Created by [[w:User:Splarka|Splarka]] & amended [[User:Mike.lifeguard]] var rightsLogOnly = (QueryString('type') == 'rights' || document.location.href.indexOf('Log/rights') != -1 ); if ( mw.config.get('wgAction') == 'history' || $.inArray(mw.config.get('wgCanonicalSpecialPageName'), ['Search' , 'Log' , 'CheckUser' , 'LinkSearch', 'Contributions' , 'IPBlockList' ]) !== -1 || QueryString('lifilter')) { $(document).ready( function() { if (document.getElementById('p-cactions')) { $( mw.util.addPortletLink( 'p-cactions', '#' , 'Filter', 'ca-rxfilter', 'Open interactive log filter' ) ) .click( function ( e ) { e.preventDefault(); filterLiForm(); } ); if (window.AutoLoadLogsFilter || QueryString('lifilter')) { filterLiForm(); } } else { filterLiForm(); // not a portlet skin, so add the filter anyway. } }); } function filterLiForm() { var obj = document.getElementById('contentSub') || document.getElementById('topbar'); if ( !obj ) { return; } var instructions = (rightsLogOnly) ? 'Filter by space-delimited list of rights.' : 'Filter the plain text representation of this list.'; // generate the form $('#ca-rxfilter').css('display', 'none'); var form = '<div id="rfform" style="color:black;"></div>'; var field = '<fieldset>'; field += '<p>'+instructions+'</p>'; field += '<legend>Filter list</legend>'; if (rightsLogOnly) { field += '<select id="rfselect"><option>+ rights</option><option>- rights</option>'; field += '<option>either</option><option>all</option></select> '; } field += '<label for="rfinput1">Match:</label> <input id="rfinput1" type="text" /> '; field += '<input id="rfinput2" type="checkbox" /> <label for="rfinput2">Invert</label> '; field += '</fieldset>'; $(obj).append( $(form).append( $(field).append( $('<input type="button" value="filter" />').click( function() { filterLi(false); } ) ) .append( $('<input type="button" value="highlight" />').click( function() { filterLi(true); } ) ) ) ); return; } function filterLi(hilight) { // grab options from form if (rightsLogOnly) var type = document.getElementById('rfselect').selectedIndex; var invert = document.getElementById('rfinput2').checked; var srch = document.getElementById('rfinput1').value; var rx = new RegExp(srch,'ig'); var rightrx = /^.*?User\:.*? from (.*?) to (.*?) \u200E.*?$/i; // the regex used to grab the Special:Log/rights changes // grab the list of all <li> in the content var bod = document.getElementById('bodyContent') || document.getElementsByTagName('body')[0]; $('li', bod).each( function() { var look = ''; if (rightsLogOnly) { // Special:Log/rights var text = $(this).text(); var oldr = text.replace(rightrx,'$1').replace(/\, /g,' '); var newr = text.replace(rightrx,'$2').replace(/\, /g,' '); var oldrl = oldr.split(' '); var newrl = newr.split(' '); for (var j=0; j<oldrl.length; ++j) { for (var k=0; k<newrl.length; ++k) { if (oldrl[j]==newrl[k]) { oldrl[j] = ''; newrl[k] = ''; } } } var remr = oldrl.join(' '); var addr = newrl.join(' '); switch (type) { case 0: look = addr; break; case 1: look = remr; break; case 2: look = remr + ' ' + addr; break; case 3: look = oldr + ' ' + newr; break; } } else { look = $(this).text(); } $(this).css( { display: '', 'backgroundColor': '' } ); if ( (look.search(rx) != -1 && !invert) || (look.search(rx) == -1 && invert) ) { if (hilight) $(this).css('backgroundColor', '#ffff99'); } else { if (!hilight) $(this).css('display', 'none'); } }); } function QueryString(p) { var re = RegExp('[&?]' + p + '=([^&]*)'); var matches = re.exec(document.location); if (matches) { try { return decodeURI(matches[1]); } catch (e) {} } return null; } 3xyndgsc1z172fg17jmf4wxtx3l1gjo 14843 14842 2015-08-15T10:18:28Z Az1568 66 Update 14843 javascript text/javascript mw.loader.load( '//commons.wikimedia.org/w/index.php?title=MediaWiki:Gadget-rightsfilter.js&action=raw&ctype=text/javascript' ); c6rbipy1gxffx26gjsfmuac3kg0xi88 14844 14843 2026-08-01T17:25:22Z QueerEcofeminist 1879 [[:en:MediaWiki:Gadget-rightsfilter.js]] पासून १८ आवर्तने आयात केलीत 14843 javascript text/javascript mw.loader.load( '//commons.wikimedia.org/w/index.php?title=MediaWiki:Gadget-rightsfilter.js&action=raw&ctype=text/javascript' ); c6rbipy1gxffx26gjsfmuac3kg0xi88 मिडियाविकी:Gadget-subjects.css 8 4162 14845 2010-11-23T23:10:18Z Darklama 2894 styling for gadget 14845 css text/css /* For subject pages */ .book-level-0 { padding-left:15px; background: url(http://upload.wikimedia.org/wikipedia/commons/8/8f/00%25.png) left center no-repeat; } .book-level-1 { padding-left:15px; background: url(http://upload.wikimedia.org/wikipedia/commons/5/5b/25%25.png) left center no-repeat; } .book-level-2 { padding-left:15px; background: url(http://upload.wikimedia.org/wikipedia/commons/3/3a/50%25.png) left center no-repeat; } .book-level-3 { padding-left:15px; background: url(http://upload.wikimedia.org/wikipedia/commons/c/cd/75%25.png) left center no-repeat; } .book-level-4 { padding-left:15px; background: url(http://upload.wikimedia.org/wikipedia/commons/6/64/100%25.png) left center no-repeat; } .book-level-5 { padding-left:15px; background: url(http://upload.wikimedia.org/wikipedia/commons/e/ec/Bullet_star.png) left center no-repeat; } .book-print { padding-left:24px; background: url(http://upload.wikimedia.org/wikipedia/commons/1/18/GeoGebra_icon_document_print.png) right center no-repeat; } .book-pdf { padding-left:24px; background: url(http://upload.wikimedia.org/wikipedia/commons/8/84/Icon_pdf.gif) right center no-repeat; } .horizontal li { border:0px; padding:0.25em; } .book-level-0 + a { color:#99bbcc; font-size:12px; } .book-level-1 + a { color:#664488; font-size:14px; } .book-level-2 + a { color:#1111cc; font-size:14px; } .book-level-3 + a { color:#0000dd; font-size:14px; } .book-level-4 + a { color:#0000ff; font-size:16px; } .book-level-5 + a { color:#000066; font-size:16px; font-family:cursive; } tmcqfse2i1e01nhr6ufji8s8k01h2k9 14846 14845 2010-11-23T23:11:43Z Darklama 2894 14846 css text/css /* For subject pages */ .book-level-0 { padding-left:15px; background: url(http://upload.wikimedia.org/wikipedia/commons/8/8f/00%25.png) left center no-repeat; } .book-level-1 { padding-left:15px; background: url(http://upload.wikimedia.org/wikipedia/commons/5/5b/25%25.png) left center no-repeat; } .book-level-2 { padding-left:15px; background: url(http://upload.wikimedia.org/wikipedia/commons/3/3a/50%25.png) left center no-repeat; } .book-level-3 { padding-left:15px; background: url(http://upload.wikimedia.org/wikipedia/commons/c/cd/75%25.png) left center no-repeat; } .book-level-4 { padding-left:15px; background: url(http://upload.wikimedia.org/wikipedia/commons/6/64/100%25.png) left center no-repeat; } .book-level-5 { padding-left:15px; background: url(http://upload.wikimedia.org/wikipedia/commons/e/ec/Bullet_star.png) left center no-repeat; } .book-print { padding-left:24px; background: url(http://upload.wikimedia.org/wikipedia/commons/1/18/GeoGebra_icon_document_print.png) right center no-repeat; } .book-pdf { padding-left:24px; background: url(http://upload.wikimedia.org/wikipedia/commons/8/84/Icon_pdf.gif) right center no-repeat; } #booklinks .horizontal li { border:0px; padding:0.25em; } .book-level-0 + a { color:#99bbcc; font-size:12px; } .book-level-1 + a { color:#664488; font-size:14px; } .book-level-2 + a { color:#1111cc; font-size:14px; } .book-level-3 + a { color:#0000dd; font-size:14px; } .book-level-4 + a { color:#0000ff; font-size:16px; } .book-level-5 + a { color:#000066; font-size:16px; font-family:cursive; } ca1qy97xvhcnstrii52ql1u2vhyjw8f 14847 14846 2012-01-20T23:13:53Z Hoo man 668 Bot: Security fix: [[WMFblog:2011/10/03/native-https-support-enabled-for-all-wikimedia-foundation-wikis/|protocol-relative URLs]] per https://meta.wikimedia.org/?oldid=3197161 ([[m:Stewards' noticeboard|questions?]]). 14847 css text/css /* For subject pages */ .book-level-0 { padding-left:15px; background: url(//upload.wikimedia.org/wikipedia/commons/8/8f/00%25.png) left center no-repeat; } .book-level-1 { padding-left:15px; background: url(//upload.wikimedia.org/wikipedia/commons/5/5b/25%25.png) left center no-repeat; } .book-level-2 { padding-left:15px; background: url(//upload.wikimedia.org/wikipedia/commons/3/3a/50%25.png) left center no-repeat; } .book-level-3 { padding-left:15px; background: url(//upload.wikimedia.org/wikipedia/commons/c/cd/75%25.png) left center no-repeat; } .book-level-4 { padding-left:15px; background: url(//upload.wikimedia.org/wikipedia/commons/6/64/100%25.png) left center no-repeat; } .book-level-5 { padding-left:15px; background: url(//upload.wikimedia.org/wikipedia/commons/e/ec/Bullet_star.png) left center no-repeat; } .book-print { padding-left:24px; background: url(//upload.wikimedia.org/wikipedia/commons/1/18/GeoGebra_icon_document_print.png) right center no-repeat; } .book-pdf { padding-left:24px; background: url(//upload.wikimedia.org/wikipedia/commons/8/84/Icon_pdf.gif) right center no-repeat; } #booklinks .horizontal li { border:0px; padding:0.25em; } .book-level-0 + a { color:#99bbcc; font-size:12px; } .book-level-1 + a { color:#664488; font-size:14px; } .book-level-2 + a { color:#1111cc; font-size:14px; } .book-level-3 + a { color:#0000dd; font-size:14px; } .book-level-4 + a { color:#0000ff; font-size:16px; } .book-level-5 + a { color:#000066; font-size:16px; font-family:cursive; } rvzh0b28kt3s74k8rp988nvhzpm2n58 14848 14847 2026-08-01T17:26:06Z QueerEcofeminist 1879 [[:en:MediaWiki:Gadget-subjects.css]] पासून ३ आवर्तने आयात केलीत 14847 css text/css /* For subject pages */ .book-level-0 { padding-left:15px; background: url(//upload.wikimedia.org/wikipedia/commons/8/8f/00%25.png) left center no-repeat; } .book-level-1 { padding-left:15px; background: url(//upload.wikimedia.org/wikipedia/commons/5/5b/25%25.png) left center no-repeat; } .book-level-2 { padding-left:15px; background: url(//upload.wikimedia.org/wikipedia/commons/3/3a/50%25.png) left center no-repeat; } .book-level-3 { padding-left:15px; background: url(//upload.wikimedia.org/wikipedia/commons/c/cd/75%25.png) left center no-repeat; } .book-level-4 { padding-left:15px; background: url(//upload.wikimedia.org/wikipedia/commons/6/64/100%25.png) left center no-repeat; } .book-level-5 { padding-left:15px; background: url(//upload.wikimedia.org/wikipedia/commons/e/ec/Bullet_star.png) left center no-repeat; } .book-print { padding-left:24px; background: url(//upload.wikimedia.org/wikipedia/commons/1/18/GeoGebra_icon_document_print.png) right center no-repeat; } .book-pdf { padding-left:24px; background: url(//upload.wikimedia.org/wikipedia/commons/8/84/Icon_pdf.gif) right center no-repeat; } #booklinks .horizontal li { border:0px; padding:0.25em; } .book-level-0 + a { color:#99bbcc; font-size:12px; } .book-level-1 + a { color:#664488; font-size:14px; } .book-level-2 + a { color:#1111cc; font-size:14px; } .book-level-3 + a { color:#0000dd; font-size:14px; } .book-level-4 + a { color:#0000ff; font-size:16px; } .book-level-5 + a { color:#000066; font-size:16px; font-family:cursive; } rvzh0b28kt3s74k8rp988nvhzpm2n58 मिडियाविकी:Gadget-subjects.js 8 4163 14849 2010-11-13T14:22:10Z Darklama 2894 possible gadget 14849 javascript text/javascript /* A work-in-progress gadget to cut down on repeating books in the subject namespace by placing icons next to each book. */ addOnloadHook( function() { var cats = 'Category:Freshly+started+books|Category:Partly+developed+books|Category:Half-' + 'finished+books|Category:Books+nearing+completion|Category:Completed+books|' + 'Category:Featured+books|Category:Books+with+print+version|Category:Books+with+PDF+version'; var url = wgServer+wgScriptPath+'/api.php?format=json&callback=showSubjectMetadataCB' + '&action=query&prop=categories&clshow=hidden&cllimit=500&&clcategories=&'+cats+'titles='; var links=document.getElementsById('booklinks'), titles=[]; links = links.getElementsByTagName('a') || 0; if (!links) { return; } for (var link in links) { if (links.hasOwnProperty(link)) { titles.push( encodeURIComponent(links[link].title).replace("%20", "+") ); } } titles = titles.join("|"); importScriptURI(url+titles); } function showSubjectMetadataCB(obj) { var pages = obj.query && obj.query.pages || 0, categories, title; if ( !pages ) { return; } for (var page in pages) { if ( !pages.hasOwnProperty(page) ) { continue; } categories = pages[page].categories || 0; if ( !cat ) { continue; } for (var cat in categories) { if ( !categories.hasOwnProperty(cat) ) { continue; } title = categories[cat].title; switch (title) { case 'Category:Freshly started books': case 'Category:Partly developed books': case 'Category:Half-finished books'; case 'Category:Books nearing completion': case 'Category:Completed books': case 'Category:Featured books': case 'Category:Books with print version': case 'Category:Books with PDF version: window.alert(pages[page].title); } } } } sx7p63dzbxxq7b4gib0rpq3rw2wlm5w 14850 14849 2010-11-13T14:24:13Z Darklama 2894 14850 javascript text/javascript /* A work-in-progress gadget to cut down on repeating books in the subject namespace by placing icons next to each book. */ addOnloadHook( function() { var cats = 'Category:Freshly+started+books|Category:Partly+developed+books|Category:Half-' + 'finished+books|Category:Books+nearing+completion|Category:Completed+books|' + 'Category:Featured+books|Category:Books+with+print+version|Category:Books+with+PDF+version'; var url = wgServer+wgScriptPath+'/api.php?format=json&callback=showSubjectMetadataCB' + '&action=query&prop=categories&clshow=hidden&cllimit=500&&clcategories=&'+cats+'titles='; var links=document.getElementById('booklinks'), titles=[]; links = links.getElementsByTagName('a') || 0; if (!links) { return; } for (var link in links) { if (links.hasOwnProperty(link)) { titles.push( encodeURIComponent(links[link].title).replace("%20", "+") ); } } titles = titles.join("|"); importScriptURI(url+titles); } function showSubjectMetadataCB(obj) { var pages = obj.query && obj.query.pages || 0, categories, title; if ( !pages ) { return; } for (var page in pages) { if ( !pages.hasOwnProperty(page) ) { continue; } categories = pages[page].categories || 0; if ( !cat ) { continue; } for (var cat in categories) { if ( !categories.hasOwnProperty(cat) ) { continue; } title = categories[cat].title; switch (title) { case 'Category:Freshly started books': case 'Category:Partly developed books': case 'Category:Half-finished books'; case 'Category:Books nearing completion': case 'Category:Completed books': case 'Category:Featured books': case 'Category:Books with print version': case 'Category:Books with PDF version: window.alert(pages[page].title); } } } } 026w7jt65offgbmd0e1n51m12outwyt 14851 14850 2010-11-13T23:04:51Z Darklama 2894 14851 javascript text/javascript /* A work-in-progress gadget to cut down on repeating books in the subject namespace by placing icons next to each book. */ addOnloadHook( function() { var cats = 'Category:Freshly+started+books|Category:Partly+developed+books|Category:Half-' + 'finished+books|Category:Books+nearing+completion|Category:Completed+books|' + 'Category:Featured+books|Category:Books+with+print+version|Category:Books+with+PDF+version'; var url = wgServer+wgScriptPath+'/api.php?format=json&callback=showSubjectMetadataCB' + '&action=query&prop=categories&clshow=hidden&cllimit=500&&clcategories=&'+cats+'titles='; var links=document.getElementById('booklinks'), titles=[]; links = links.getElementsByTagName('a') || 0; if (!links) { return; } for (var link in links) { if (links.hasOwnProperty(link)) { titles.push( encodeURIComponent(links[link].title).replace("%20", "+") ); } } titles = titles.join("|"); importScriptURI(url+titles); } function showSubjectMetadataCB(obj) { var pages = obj.query && obj.query.pages || 0, categories, title; if ( !pages ) { return; } for (var page in pages) { if ( !pages.hasOwnProperty(page) ) { continue; } categories = pages[page].categories || 0; if ( !cat ) { continue; } for (var cat in categories) { if ( !categories.hasOwnProperty(cat) ) { continue; } title = categories[cat].title; switch (title) { case 'Category:Freshly started books': case 'Category:Partly developed books': case 'Category:Half-finished books'; case 'Category:Books nearing completion': case 'Category:Completed books': case 'Category:Featured books': case 'Category:Books with print version': case 'Category:Books with PDF version': window.alert(pages[page].title); } } } } na0ejaey8xfv10z98ta21zzn575fwb9 14852 14851 2010-11-13T23:30:26Z Darklama 2894 14852 javascript text/javascript /* A work-in-progress gadget to cut down on repeating books in the subject namespace by placing icons next to each book. */ addOnloadHook( function() { var cats = 'Category:Freshly+started+books|Category:Partly+developed+books|Category:Half-' + 'finished+books|Category:Books+nearing+completion|Category:Completed+books|' + 'Category:Featured+books|Category:Books+with+print+version|Category:Books+with+PDF+version'; var url = wgServer+wgScriptPath+'/api.php?format=json&callback=showSubjectMetadataCB' + '&action=query&prop=categories&clshow=hidden&cllimit=500&&clcategories=&'+cats+'titles='; var links=document.getElementById('booklinks'), titles=[]; links = links.getElementsByTagName('a') || 0; if (!links) { return; } for (var link in links) { if (links.hasOwnProperty(link)) { titles.push( encodeURIComponent(links[link].title).replace("%20", "+") ); } } titles = titles.join("|"); importScriptURI(url+titles); } ); function showSubjectMetadataCB(obj) { var pages = obj.query && obj.query.pages || 0, categories, title; if ( !pages ) { return; } for (var page in pages) { if ( !pages.hasOwnProperty(page) ) { continue; } categories = pages[page].categories || 0; if ( !cat ) { continue; } for (var cat in categories) { if ( !categories.hasOwnProperty(cat) ) { continue; } title = categories[cat].title; switch (title) { case 'Category:Freshly started books': case 'Category:Partly developed books': case 'Category:Half-finished books'; case 'Category:Books nearing completion': case 'Category:Completed books': case 'Category:Featured books': case 'Category:Books with print version': case 'Category:Books with PDF version': window.alert(pages[page].title); } } } } 92q4mirbar86y7ezic5z9j5ie872mzm 14853 14852 2010-11-13T23:34:32Z Darklama 2894 typo 14853 javascript text/javascript /* A work-in-progress gadget to cut down on repeating books in the subject namespace by placing icons next to each book. */ addOnloadHook( function() { var cats = 'Category:Freshly+started+books|Category:Partly+developed+books|Category:Half-' + 'finished+books|Category:Books+nearing+completion|Category:Completed+books|' + 'Category:Featured+books|Category:Books+with+print+version|Category:Books+with+PDF+version'; var url = wgServer+wgScriptPath+'/api.php?format=json&callback=showSubjectMetadataCB' + '&action=query&prop=categories&clshow=hidden&cllimit=500&&clcategories=&'+cats+'titles='; var links=document.getElementById('booklinks'), titles=[]; links = links.getElementsByTagName('a') || 0; if (!links) { return; } for (var link in links) { if (links.hasOwnProperty(link)) { titles.push( encodeURIComponent(links[link].title).replace("%20", "+") ); } } titles = titles.join("|"); importScriptURI(url+titles); } ); function showSubjectMetadataCB(obj) { var pages = obj.query && obj.query.pages || 0, categories, title; if ( !pages ) { return; } for (var page in pages) { if ( !pages.hasOwnProperty(page) ) { continue; } categories = pages[page].categories || 0; if ( !cat ) { continue; } for (var cat in categories) { if ( !categories.hasOwnProperty(cat) ) { continue; } title = categories[cat].title; switch (title) { case 'Category:Freshly started books': case 'Category:Partly developed books': case 'Category:Half-finished books': case 'Category:Books nearing completion': case 'Category:Completed books': case 'Category:Featured books': case 'Category:Books with print version': case 'Category:Books with PDF version': window.alert(pages[page].title); } } } } irddbwl1wvc3ki9q3f916fem6s7tnr9 14854 14853 2010-11-13T23:38:03Z Darklama 2894 14854 javascript text/javascript /* A work-in-progress gadget to cut down on repeating books in the subject namespace by placing icons next to each book. */ addOnloadHook( function() { var cats = 'Category:Freshly+started+books|Category:Partly+developed+books|Category:Half-' + 'finished+books|Category:Books+nearing+completion|Category:Completed+books|' + 'Category:Featured+books|Category:Books+with+print+version|Category:Books+with+PDF+version'; var url = wgServer+wgScriptPath+'/api.php?format=json&callback=showSubjectMetadataCB' + '&action=query&prop=categories&clshow=hidden&cllimit=500&&clcategories=&'+cats+'titles='; var links=document.getElementById('booklinks'), titles=[]; links = links && links.getElementsByTagName('a') || 0; if (!links) { return; } for (var link in links) { if (links.hasOwnProperty(link)) { titles.push( encodeURIComponent(links[link].title).replace("%20", "+") ); } } titles = titles.join("|"); importScriptURI(url+titles); } ); function showSubjectMetadataCB(obj) { var pages = obj.query && obj.query.pages || 0, categories, title; if ( !pages ) { return; } for (var page in pages) { if ( !pages.hasOwnProperty(page) ) { continue; } categories = pages[page].categories || 0; if ( !cat ) { continue; } for (var cat in categories) { if ( !categories.hasOwnProperty(cat) ) { continue; } title = categories[cat].title; switch (title) { case 'Category:Freshly started books': case 'Category:Partly developed books': case 'Category:Half-finished books': case 'Category:Books nearing completion': case 'Category:Completed books': case 'Category:Featured books': case 'Category:Books with print version': case 'Category:Books with PDF version': window.alert(pages[page].title); } } } } qk5dfqliq928zdtb0vcts40u1tuyx0b 14855 14854 2010-11-14T00:00:32Z Darklama 2894 14855 javascript text/javascript /* A work-in-progress gadget to cut down on repeating books in the subject namespace by placing icons next to each book. */ addOnloadHook( function() { var cats = 'Category:Freshly+started+books|Category:Partly+developed+books|Category:Half-' + 'finished+books|Category:Books+nearing+completion|Category:Completed+books|' + 'Category:Featured+books|Category:Books+with+print+version|Category:Books+with+PDF+version'; var url = wgServer+wgScriptPath+'/api.php?format=json&callback=showSubjectMetadataCB' + '&action=query&prop=categories&clshow=hidden&cllimit=500&&clcategories='+cats+'&titles='; var links=document.getElementById('booklinks'), titles=[]; links = links && links.getElementsByTagName('a') || 0; if (!links) { return; } for (var link in links) { if (links.hasOwnProperty(link)) { titles.push( encodeURIComponent(links[link].title).replace("%20", "+") ); } } titles = titles.join("|"); importScriptURI(url+titles); } ); function showSubjectMetadataCB(obj) { var pages = obj.query && obj.query.pages || 0, categories, title; if ( !pages ) { return; } for (var page in pages) { if ( !pages.hasOwnProperty(page) ) { continue; } categories = pages[page].categories || 0; if ( !cat ) { continue; } for (var cat in categories) { if ( !categories.hasOwnProperty(cat) ) { continue; } title = categories[cat].title; switch (title) { case 'Category:Freshly started books': case 'Category:Partly developed books': case 'Category:Half-finished books': case 'Category:Books nearing completion': case 'Category:Completed books': case 'Category:Featured books': case 'Category:Books with print version': case 'Category:Books with PDF version': window.alert(pages[page].title); } } } } n1bg6qdxc0w7t0k5vmpb78b8sa7ihqh 14856 14855 2010-11-14T00:13:08Z Darklama 2894 14856 javascript text/javascript /* A work-in-progress gadget to cut down on repeating books in the subject namespace by placing icons next to each book. */ addOnloadHook( function() { var cats = 'Category:Freshly+started+books|Category:Partly+developed+books|Category:Half-' + 'finished+books|Category:Books+nearing+completion|Category:Completed+books|' + 'Category:Featured+books|Category:Books+with+print+version|Category:Books+with+PDF+version'; var url = wgServer+wgScriptPath+'/api.php?format=json&callback=showSubjectMetadataCB' + '&action=query&prop=categories&clshow=hidden&cllimit=500&&clcategories='+cats+'&titles='; var links=document.getElementById('booklinks'), titles=[]; links = links && links.getElementsByTagName('a') || 0; if (!links) { return; } for (var link in links) { if (links.hasOwnProperty(link)) { titles.push( encodeURIComponent(links[link].title).replace("%20", "+") ); } } titles = titles.join("|"); importScriptURI(url+titles); } ); function showSubjectMetadataCB(obj) { var pages = obj.query && obj.query.pages || 0, categories, title; if ( !pages ) { return; } for (var page in pages) { if ( !pages.hasOwnProperty(page) ) { continue; } categories = pages[page].categories || 0; if ( !categories ) { continue; } for (var cat in categories) { if ( !categories.hasOwnProperty(cat) ) { continue; } title = categories[cat].title; switch (title) { case 'Category:Freshly started books': case 'Category:Partly developed books': case 'Category:Half-finished books': case 'Category:Books nearing completion': case 'Category:Completed books': case 'Category:Featured books': case 'Category:Books with print version': case 'Category:Books with PDF version': window.alert(pages[page].title); } } } } hi71h5iaubc81u1lqv25uxg9lrktt5i 14857 14856 2010-11-18T15:15:56Z Darklama 2894 cache 14857 javascript text/javascript /* A work-in-progress gadget to cut down on repeating books in the subject namespace by placing icons next to each book. */ addOnloadHook( (function() { var $_fn = function() { var cats = 'Category:Freshly+started+books|Category:Partly+developed+books|Category:Half-' + 'finished+books|Category:Books+nearing+completion|Category:Completed+books|' + 'Category:Featured+books|Category:Books+with+print+version|Category:Books+with+PDF+version'; var url = wgServer+wgScriptPath+'/api.php?format=json&callback=showSubjectMetadataCB' + '&action=query&prop=categories&clshow=hidden&cllimit=500&&clcategories='+cats+'&titles='; var links=document.getElementById('booklinks'), titles=[]; links = links && links.getElementsByTagName('a') || 0; if (!links) { return; } for (var link in links) { if (links.hasOwnProperty(link)) { titles.push( encodeURIComponent(links[link].title).replace("%20", "+") ); } } titles = titles.join("|"); url += titles; delete cats; delete links; delete titles; $_fn = function() { importScriptURI(url); } $_fn(); }; return function() { $_fn(); }; })() ); function showSubjectMetadataCB(obj) { var pages = obj.query && obj.query.pages || 0, categories, title; if ( !pages ) { return; } for (var page in pages) { if ( !pages.hasOwnProperty(page) ) { continue; } categories = pages[page].categories || 0; if ( !categories ) { continue; } for (var cat in categories) { if ( !categories.hasOwnProperty(cat) ) { continue; } title = categories[cat].title; switch (title) { case 'Category:Freshly started books': case 'Category:Partly developed books': case 'Category:Half-finished books': case 'Category:Books nearing completion': case 'Category:Completed books': case 'Category:Featured books': case 'Category:Books with print version': case 'Category:Books with PDF version': window.alert(pages[page].title); } } } } rmuhpsnhdycyzu2l7pimd48oou7alx5 14858 14857 2010-11-18T15:42:48Z Darklama 2894 add class 14858 javascript text/javascript /* A work-in-progress gadget to cut down on repeating books in the subject namespace by placing icons next to each book. */ addOnloadHook( (function() { var $_fn = function() { var cats = 'Category:Freshly+started+books|Category:Partly+developed+books|Category:Half-' + 'finished+books|Category:Books+nearing+completion|Category:Completed+books|' + 'Category:Featured+books|Category:Books+with+print+version|Category:Books+with+PDF+version'; var url = wgServer+wgScriptPath+'/api.php?format=json&callback=showSubjectMetadataCB' + '&action=query&prop=categories&clshow=hidden&cllimit=500&&clcategories='+cats+'&titles='; var links=document.getElementById('booklinks'), titles=[]; links = links && links.getElementsByTagName('a') || 0; if (!links) { return; } for (var link in links) { if (links.hasOwnProperty(link)) { titles.push( encodeURIComponent(links[link].title).replace("%20", "+") ); } } titles = titles.join("|"); url += titles; delete cats; delete links; delete titles; $_fn = function() { importScriptURI(url); } $_fn(); }; return function() { $_fn(); }; })() ); function showSubjectMetadataCB(obj) { var pages = obj.query && obj.query.pages || 0, categories, title, links, link; if ( !pages ) { return; } links = document.getElementById('booklinks'); for (var page in pages) { if ( !pages.hasOwnProperty(page) ) { continue; } categories = pages[page].categories || 0; if ( !categories ) { continue; } link = links[page]; for (var cat in categories) { if ( !categories.hasOwnProperty(cat) ) { continue; } title = categories[cat].title; switch (title) { case 'Category:Freshly started books': link.className += ' book-level-0'; break; case 'Category:Partly developed books': link.className += ' book-level-1'; break; case 'Category:Half-finished books': link.className += ' book-level-2'; break; case 'Category:Books nearing completion': link.className += ' book-level-3'; break; case 'Category:Completed books': link.className += ' book-level-4'; break; case 'Category:Featured books': link.className += ' book-level-5'; break; case 'Category:Books with print version': link.className += ' book-print'; break; case 'Category:Books with PDF version': link.className += ' book-pdf'; break; } } } } o6jkuj3a0870chr7db6ucuw5rvukjrl 14859 14858 2010-11-18T15:46:33Z Darklama 2894 14859 javascript text/javascript /* A work-in-progress gadget to cut down on repeating books in the subject namespace by placing icons next to each book. */ addOnloadHook( (function() { var $_fn = function() { var cats = 'Category:Freshly+started+books|Category:Partly+developed+books|Category:Half-' + 'finished+books|Category:Books+nearing+completion|Category:Completed+books|' + 'Category:Featured+books|Category:Books+with+print+version|Category:Books+with+PDF+version'; var url = wgServer+wgScriptPath+'/api.php?format=json&callback=showSubjectMetadataCB' + '&action=query&prop=categories&clshow=hidden&cllimit=500&&clcategories='+cats+'&titles='; var links=document.getElementById('booklinks'), titles=[]; links = links && links.getElementsByTagName('a') || 0; if (!links) { return; } for (var link in links) { if (links.hasOwnProperty(link)) { titles.push( encodeURIComponent(links[link].title).replace("%20", "+") ); } } titles = titles.join("|"); url += titles; delete cats; delete links; delete titles; $_fn = function() { importScriptURI(url); } $_fn(); }; return function() { $_fn(); }; })() ); function showSubjectMetadataCB(obj) { var pages = obj.query && obj.query.pages || 0, categories, title, links, link; if ( !pages ) { return; } links = document.getElementById('booklinks').getElementsByTagName('a'); for (var page in pages) { if ( !pages.hasOwnProperty(page) ) { continue; } categories = pages[page].categories || 0; if ( !categories ) { continue; } link = links[page]; for (var cat in categories) { if ( !categories.hasOwnProperty(cat) ) { continue; } title = categories[cat].title; switch (title) { case 'Category:Freshly started books': link.className += ' book-level-0'; break; case 'Category:Partly developed books': link.className += ' book-level-1'; break; case 'Category:Half-finished books': link.className += ' book-level-2'; break; case 'Category:Books nearing completion': link.className += ' book-level-3'; break; case 'Category:Completed books': link.className += ' book-level-4'; break; case 'Category:Featured books': link.className += ' book-level-5'; break; case 'Category:Books with print version': link.className += ' book-print'; break; case 'Category:Books with PDF version': link.className += ' book-pdf'; break; } } } } la4pd77anxdi47e5qnhzy1qxhynn7g0 14860 14859 2010-11-18T15:55:05Z Darklama 2894 14860 javascript text/javascript /* A work-in-progress gadget to cut down on repeating books in the subject namespace by placing icons next to each book. */ addOnloadHook( (function() { var $_fn = function() { var cats = 'Category:Freshly+started+books|Category:Partly+developed+books|Category:Half-' + 'finished+books|Category:Books+nearing+completion|Category:Completed+books|' + 'Category:Featured+books|Category:Books+with+print+version|Category:Books+with+PDF+version'; var url = wgServer+wgScriptPath+'/api.php?format=json&callback=showSubjectMetadataCB' + '&action=query&prop=categories&clshow=hidden&cllimit=500&&clcategories='+cats+'&titles='; var links=document.getElementById('booklinks'), titles=[]; links = links && links.getElementsByTagName('a') || 0; if (!links) { return; } for (var link in links) { if (links.hasOwnProperty(link)) { titles.push( encodeURIComponent(links[link].title).replace("%20", "+") ); } } titles = titles.join("|"); url += titles; delete cats; delete links; delete titles; $_fn = function() { importScriptURI(url); } $_fn(); }; return function() { $_fn(); }; })() ); function showSubjectMetadataCB(obj) { var pages = obj.query && obj.query.pages || 0, categories, title, links, link, i=0; if ( !pages ) { return; } links = document.getElementById('booklinks').getElementsByTagName('a'); for (var page in pages) { if ( !pages.hasOwnProperty(page) ) { continue; } link = links[i++]; categories = pages[page].categories || 0; if ( !categories ) { continue; } for (var cat in categories) { if ( !categories.hasOwnProperty(cat) ) { continue; } title = categories[cat].title; switch (title) { case 'Category:Freshly started books': link.className += ' book-level-0'; break; case 'Category:Partly developed books': link.className += ' book-level-1'; break; case 'Category:Half-finished books': link.className += ' book-level-2'; break; case 'Category:Books nearing completion': link.className += ' book-level-3'; break; case 'Category:Completed books': link.className += ' book-level-4'; break; case 'Category:Featured books': link.className += ' book-level-5'; break; case 'Category:Books with print version': link.className += ' book-print'; break; case 'Category:Books with PDF version': link.className += ' book-pdf'; break; } } } } bz1n88vc23ksw7z6rhf4sx413dvfzka 14861 14860 2010-11-18T21:27:45Z Darklama 2894 14861 javascript text/javascript /* A work-in-progress gadget to cut down on repeating books in the subject namespace by placing icons next to each book. */ addOnloadHook( (function() { var $_fn = function() { var cats = 'Category:Freshly+started+books|Category:Partly+developed+books|Category:Half-' + 'finished+books|Category:Books+nearing+completion|Category:Completed+books|' + 'Category:Featured+books|Category:Books+with+print+version|Category:Books+with+PDF+version'; var url = wgServer+wgScriptPath+'/api.php?format=json&callback=showSubjectMetadataCB' + '&action=query&prop=categories&clshow=hidden&cllimit=500&&clcategories='+cats+'&titles='; var links=document.getElementById('booklinks'), titles=[]; links = links && links.getElementsByTagName('a') || 0; if (!links) { return; } for (var link in links) { if (links.hasOwnProperty(link)) { titles.push( encodeURIComponent(links[link].title).replace("%20", "+") ); } } titles = titles.join("|"); url += titles; delete cats; delete links; delete titles; $_fn = function() { importScriptURI(url); } $_fn(); }; return function() { $_fn(); }; })() ); function showSubjectMetadataCB(obj) { var pages = obj.query && obj.query.pages || 0, categories, title, links, link, i=0; if ( !pages ) { return; } links = document.getElementById('booklinks').getElementsByTagName('a'); for (var page in pages) { if ( !pages.hasOwnProperty(page) ) { continue; } link = links[i++]; categories = pages[page].categories || 0; if ( !categories ) { continue; } for (var cat in categories) { if ( !categories.hasOwnProperty(cat) ) { continue; } title = categories[cat].title; switch (title) { case 'Category:Freshly started books': var span = document.createElement('span'); span.className = 'book-level-0'; link.parentNode.insertBefore(span, link); break; case 'Category:Partly developed books': var span = document.createElement('span'); span.className = 'book-level-1'; link.parentNode.insertBefore(span, link); break; case 'Category:Half-finished books': var span = document.createElement('span'); span.className = 'book-level-2'; link.parentNode.insertBefore(span, link); break; case 'Category:Books nearing completion': var span = document.createElement('span'); span.className = 'book-level-3'; link.parentNode.insertBefore(span, link); break; case 'Category:Completed books': var span = document.createElement('span'); span.className = 'book-level-4'; link.parentNode.insertBefore(span, link); break; case 'Category:Featured books': var span = document.createElement('span'); span.className = 'book-level-5'; link.parentNode.insertBefore(span, link); break; case 'Category:Books with print version': var span = document.createElement('span'); span.className = 'book-print'; link.parentNode.insertBefore(span, link); break; case 'Category:Books with PDF version': var span = document.createElement('span'); span.className = 'book-pdf'; link.parentNode.insertBefore(span, link); break; } } } } tndg126thtmd6b3j2g3hzwiejglb3cb 14862 14861 2010-11-18T21:48:37Z Darklama 2894 14862 javascript text/javascript /* A work-in-progress gadget to cut down on repeating books in the subject namespace by placing icons next to each book. */ addOnloadHook( (function() { var $_fn = function() { var cats = 'Category:Freshly+started+books|Category:Partly+developed+books|Category:Half-' + 'finished+books|Category:Books+nearing+completion|Category:Completed+books|' + 'Category:Featured+books|Category:Books+with+print+version|Category:Books+with+PDF+version'; var url = wgServer+wgScriptPath+'/api.php?format=json&callback=showSubjectMetadataCB' + '&action=query&prop=categories&clshow=hidden&cllimit=500&&clcategories='+cats+'&titles='; var links=document.getElementById('booklinks'), titles=[]; links = links && links.getElementsByTagName('a') || 0; if (!links) { return; } for (var link in links) { if (links.hasOwnProperty(link)) { titles.push( encodeURIComponent(links[link].title).replace("%20", "+") ); } } titles = titles.join("|"); url += titles; delete cats; delete links; delete titles; $_fn = function() { importScriptURI(url); } $_fn(); }; return function() { $_fn(); }; })() ); function showSubjectMetadataCB(obj) { var pages = obj.query && obj.query.pages || 0, categories, title, links, link, i=0; if ( !pages ) { return; } links = document.getElementById('booklinks').getElementsByTagName('a'); for (var page in pages) { if ( !pages.hasOwnProperty(page) ) { continue; } link = links[i++]; categories = pages[page].categories || 0; if ( !categories ) { continue; } for (var cat in categories) { if ( !categories.hasOwnProperty(cat) ) { continue; } title = categories[cat].title; switch (title) { case 'Category:Freshly started books': var span = document.createElement('span'); span.className = 'book-level-0'; link.parentNode.insertBefore(span, link); break; case 'Category:Partly developed books': var span = document.createElement('span'); span.className = 'book-level-1'; link.parentNode.insertBefore(span, link); break; case 'Category:Half-finished books': var span = document.createElement('span'); span.className = 'book-level-2'; link.parentNode.insertBefore(span, link); break; case 'Category:Books nearing completion': var span = document.createElement('span'); span.className = 'book-level-3'; link.parentNode.insertBefore(span, link); break; case 'Category:Completed books': var span = document.createElement('span'); span.className = 'book-level-4'; link.parentNode.insertBefore(span, link); break; case 'Category:Featured books': var span = document.createElement('span'); span.className = 'book-level-5'; link.parentNode.insertBefore(span, link); break; case 'Category:Books with print version': var span = document.createElement('span'); span.className = 'book-print'; link.parentNode.insertBefore(span, link.nextSibling); break; case 'Category:Books with PDF version': var span = document.createElement('span'); span.className = 'book-pdf'; link.parentNode.insertBefore(span, link.nextSibling); break; } } } } gcxszs6c7iw6ya9fo2nmcmnb1dnjnnv 14863 14862 2010-11-19T14:33:39Z Darklama 2894 14863 javascript text/javascript /* A work-in-progress gadget to cut down on repeating books in the subject namespace by placing icons next to each book. */ addOnloadHook( (function() { var $_fn = function() { var cats = 'Category:Freshly+started+books|Category:Partly+developed+books|Category:Half-' + 'finished+books|Category:Books+nearing+completion|Category:Completed+books|' + 'Category:Featured+books|Category:Books+with+print+version|Category:Books+with+PDF+version'; var url = wgServer+wgScriptPath+'/api.php?format=json&callback=showSubjectMetadataCB' + '&action=query&prop=categories&clshow=hidden&cllimit=500&&clcategories='+cats+'&titles='; var links=document.getElementById('booklinks'), titles=[]; links = links && links.getElementsByTagName('a') || 0; if (!links) { return; } for (var link in links) { if (links.hasOwnProperty(link)) { titles.push( encodeURIComponent(links[link].title).replace("%20", "+") ); } } titles = titles.join("|"); url += titles; delete cats; delete links; delete titles; $_fn = function() { importScriptURI(url); } $_fn(); }; return function() { $_fn(); }; })() ); function showSubjectMetadataCB(obj) { var pages = obj.query && obj.query.pages || 0, categories, title, links, link; if ( !pages ) { return; } links = document.getElementById('booklinks').getElementsByTagName('a'); for (var page in pages) { if ( !pages.hasOwnProperty(page) ) { continue; } categories = pages[page].categories || 0; if ( !categories ) { continue; } for (link in links) { if (links.hasOwnProperty(link) && links[link].title == pages[page].title) { title = links[link]; delete links[link]; break; } } if ( !title ) { continue; } link = title; for (var cat in categories) { if ( !categories.hasOwnProperty(cat) ) { continue; } title = categories[cat].title; switch (title) { case 'Category:Freshly started books': var span = document.createElement('span'); span.className = 'book-level-0'; link.parentNode.insertBefore(span, link); break; case 'Category:Partly developed books': var span = document.createElement('span'); span.className = 'book-level-1'; link.parentNode.insertBefore(span, link); break; case 'Category:Half-finished books': var span = document.createElement('span'); span.className = 'book-level-2'; link.parentNode.insertBefore(span, link); break; case 'Category:Books nearing completion': var span = document.createElement('span'); span.className = 'book-level-3'; link.parentNode.insertBefore(span, link); break; case 'Category:Completed books': var span = document.createElement('span'); span.className = 'book-level-4'; link.parentNode.insertBefore(span, link); break; case 'Category:Featured books': var span = document.createElement('span'); span.className = 'book-level-5'; link.parentNode.insertBefore(span, link); break; case 'Category:Books with print version': var span = document.createElement('span'); span.className = 'book-print'; link.parentNode.insertBefore(span, link.nextSibling); break; case 'Category:Books with PDF version': var span = document.createElement('span'); span.className = 'book-pdf'; link.parentNode.insertBefore(span, link.nextSibling); break; } } } } hq0tq7zsyqbvk2bwtpp0nhyp2d69e6z 14864 14863 2010-11-23T23:08:07Z Darklama 2894 moved [[User:Darklama/subjects.js]] to [[MediaWiki:Gadget-subjects.js]]: to make it easier for other people to use 14863 javascript text/javascript /* A work-in-progress gadget to cut down on repeating books in the subject namespace by placing icons next to each book. */ addOnloadHook( (function() { var $_fn = function() { var cats = 'Category:Freshly+started+books|Category:Partly+developed+books|Category:Half-' + 'finished+books|Category:Books+nearing+completion|Category:Completed+books|' + 'Category:Featured+books|Category:Books+with+print+version|Category:Books+with+PDF+version'; var url = wgServer+wgScriptPath+'/api.php?format=json&callback=showSubjectMetadataCB' + '&action=query&prop=categories&clshow=hidden&cllimit=500&&clcategories='+cats+'&titles='; var links=document.getElementById('booklinks'), titles=[]; links = links && links.getElementsByTagName('a') || 0; if (!links) { return; } for (var link in links) { if (links.hasOwnProperty(link)) { titles.push( encodeURIComponent(links[link].title).replace("%20", "+") ); } } titles = titles.join("|"); url += titles; delete cats; delete links; delete titles; $_fn = function() { importScriptURI(url); } $_fn(); }; return function() { $_fn(); }; })() ); function showSubjectMetadataCB(obj) { var pages = obj.query && obj.query.pages || 0, categories, title, links, link; if ( !pages ) { return; } links = document.getElementById('booklinks').getElementsByTagName('a'); for (var page in pages) { if ( !pages.hasOwnProperty(page) ) { continue; } categories = pages[page].categories || 0; if ( !categories ) { continue; } for (link in links) { if (links.hasOwnProperty(link) && links[link].title == pages[page].title) { title = links[link]; delete links[link]; break; } } if ( !title ) { continue; } link = title; for (var cat in categories) { if ( !categories.hasOwnProperty(cat) ) { continue; } title = categories[cat].title; switch (title) { case 'Category:Freshly started books': var span = document.createElement('span'); span.className = 'book-level-0'; link.parentNode.insertBefore(span, link); break; case 'Category:Partly developed books': var span = document.createElement('span'); span.className = 'book-level-1'; link.parentNode.insertBefore(span, link); break; case 'Category:Half-finished books': var span = document.createElement('span'); span.className = 'book-level-2'; link.parentNode.insertBefore(span, link); break; case 'Category:Books nearing completion': var span = document.createElement('span'); span.className = 'book-level-3'; link.parentNode.insertBefore(span, link); break; case 'Category:Completed books': var span = document.createElement('span'); span.className = 'book-level-4'; link.parentNode.insertBefore(span, link); break; case 'Category:Featured books': var span = document.createElement('span'); span.className = 'book-level-5'; link.parentNode.insertBefore(span, link); break; case 'Category:Books with print version': var span = document.createElement('span'); span.className = 'book-print'; link.parentNode.insertBefore(span, link.nextSibling); break; case 'Category:Books with PDF version': var span = document.createElement('span'); span.className = 'book-pdf'; link.parentNode.insertBefore(span, link.nextSibling); break; } } } } hq0tq7zsyqbvk2bwtpp0nhyp2d69e6z 14865 14864 2012-03-15T19:55:06Z Darklama 2894 simplified with jQuery 14865 javascript text/javascript $(document).ready( function() { var $links = $( '#booklinks' ).find( 'a' ), titles, categories = [ 'Freshly started books', 'Partly developed books', 'Half-finished books', 'Books nearing completion', 'Completed books', 'Featured books', 'Books with print version', 'Books with PDF version' ]; function showSubjectMetadataCB(obj) { $.each( obj.query && obj.query.pages || [], function( id, page ) { var $link = []; if ( !page.categories ) { return; } $links.each( function() { if ( this.attr( 'title' ) === page.title ) { $link = this; return false; } }); if ( !$link.length ) { return; } $.each( page.categories, function( key, cat) { var title = cat.title; switch ( title ) { case 'Category:Freshly started books': $link.before( $( '<span/>' ).addClass( 'book-level-0' ) ); break; case 'Category:Partly developed books': $link.before( $( '<span/>' ).addClass( 'book-level-1' ) ); break; case 'Category:Half-finished books': $link.before( $( '<span/>' ).addClass( 'book-level-2' ) ); break; case 'Category:Books nearing completion': $link.before( $( '<span/>' ).addClass( 'book-level-3' ) ); break; case 'Category:Completed books': $link.before( $( '<span/>' ).addClass( 'book-level-4' ) ); break; case 'Category:Featured books': $link.before( $( '<span/>' ).addClass( 'book-level-5' ) ); break; case 'Category:Books with print version': $link.after( $( '<span/>' ).addClass( 'book-print' ) ); break; case 'Category:Books with PDF version': $link.after( $( '<span/>' ).addClass( 'book-pdf' ) ); break; } }); }); } if ( !$links.length ) { return; } titles = $.map( $links, function( link ) { return $(link).attr( 'title' ); } ).join( '|' ); categories = 'Category:' + categories.join( '|Category:' ); $.getJSON( mw.util.wikiScript( 'api' ), { 'format': 'json', 'action': 'query', 'prop': 'categories', 'clshow': 'hidden', 'cllimit': 500, 'clcategories': categories, 'titles': titles }, showSubjectMetadataCB); }); jb8fzdyrd3iw43i89bq6fxs87ky730i 14866 14865 2012-03-15T20:45:43Z Darklama 2894 14866 javascript text/javascript $(document).ready( function() { var $links = $( '#booklinks' ).find( 'a' ), titles, categories = [ 'Freshly started books', 'Partly developed books', 'Half-finished books', 'Books nearing completion', 'Completed books', 'Featured books', 'Books with print version', 'Books with PDF version' ]; function showSubjectMetadataCB(obj) { $.each( obj.query && obj.query.pages || [], function( id, page ) { var $link = []; if ( !page.categories ) { return; } $links.each( function() { var $this = $(this); if ( $this.attr( 'title' ) === page.title ) { $link = $this; return false; } }); if ( !$link.length ) { return; } $.each( page.categories, function( key, cat) { var title = cat.title; switch ( title ) { case 'Category:Freshly started books': $link.before( $( '<span/>' ).addClass( 'book-level-0' ) ); break; case 'Category:Partly developed books': $link.before( $( '<span/>' ).addClass( 'book-level-1' ) ); break; case 'Category:Half-finished books': $link.before( $( '<span/>' ).addClass( 'book-level-2' ) ); break; case 'Category:Books nearing completion': $link.before( $( '<span/>' ).addClass( 'book-level-3' ) ); break; case 'Category:Completed books': $link.before( $( '<span/>' ).addClass( 'book-level-4' ) ); break; case 'Category:Featured books': $link.before( $( '<span/>' ).addClass( 'book-level-5' ) ); break; case 'Category:Books with print version': $link.after( $( '<span/>' ).addClass( 'book-print' ) ); break; case 'Category:Books with PDF version': $link.after( $( '<span/>' ).addClass( 'book-pdf' ) ); break; } }); }); } if ( !$links.length ) { return; } titles = $.map( $links, function( link ) { return $(link).attr( 'title' ); } ).join( '|' ); categories = 'Category:' + categories.join( '|Category:' ); $.getJSON( mw.util.wikiScript( 'api' ), { 'format': 'json', 'action': 'query', 'prop': 'categories', 'clshow': 'hidden', 'cllimit': 500, 'clcategories': categories, 'titles': titles }, showSubjectMetadataCB); }); 5ei1w303kij91ddv22iur9lyfh184oa 14867 14866 2026-08-01T17:26:15Z QueerEcofeminist 1879 [[:en:MediaWiki:Gadget-subjects.js]] पासून १८ आवर्तने आयात केलीत 14866 javascript text/javascript $(document).ready( function() { var $links = $( '#booklinks' ).find( 'a' ), titles, categories = [ 'Freshly started books', 'Partly developed books', 'Half-finished books', 'Books nearing completion', 'Completed books', 'Featured books', 'Books with print version', 'Books with PDF version' ]; function showSubjectMetadataCB(obj) { $.each( obj.query && obj.query.pages || [], function( id, page ) { var $link = []; if ( !page.categories ) { return; } $links.each( function() { var $this = $(this); if ( $this.attr( 'title' ) === page.title ) { $link = $this; return false; } }); if ( !$link.length ) { return; } $.each( page.categories, function( key, cat) { var title = cat.title; switch ( title ) { case 'Category:Freshly started books': $link.before( $( '<span/>' ).addClass( 'book-level-0' ) ); break; case 'Category:Partly developed books': $link.before( $( '<span/>' ).addClass( 'book-level-1' ) ); break; case 'Category:Half-finished books': $link.before( $( '<span/>' ).addClass( 'book-level-2' ) ); break; case 'Category:Books nearing completion': $link.before( $( '<span/>' ).addClass( 'book-level-3' ) ); break; case 'Category:Completed books': $link.before( $( '<span/>' ).addClass( 'book-level-4' ) ); break; case 'Category:Featured books': $link.before( $( '<span/>' ).addClass( 'book-level-5' ) ); break; case 'Category:Books with print version': $link.after( $( '<span/>' ).addClass( 'book-print' ) ); break; case 'Category:Books with PDF version': $link.after( $( '<span/>' ).addClass( 'book-pdf' ) ); break; } }); }); } if ( !$links.length ) { return; } titles = $.map( $links, function( link ) { return $(link).attr( 'title' ); } ).join( '|' ); categories = 'Category:' + categories.join( '|Category:' ); $.getJSON( mw.util.wikiScript( 'api' ), { 'format': 'json', 'action': 'query', 'prop': 'categories', 'clshow': 'hidden', 'cllimit': 500, 'clcategories': categories, 'titles': titles }, showSubjectMetadataCB); }); 5ei1w303kij91ddv22iur9lyfh184oa मिडियाविकी:Gadget-navpop.css 8 4164 14868 2008-06-05T21:34:05Z Mike.lifeguard 117 from [[w:MediaWiki:Gadget-navpop.css]] 14868 css text/css a.popupMoreLink { display: block; text-align: right; cursor: pointer; } ins.popupDiff { background: #AFE; } del.popupDiff { background: #FFE6E6; } #selectionPreview { /* overflow: auto; max-height: 16ex; */ border: 2px solid #DDD; background-color: #EEF; padding: 6px; } .navpopup { border: solid #FFBE20 1px; background-color: #FFFAEF; padding: 5px; font-size: 8pt; /* opacity: 0.9; */ } .popupDragHandle { /* background-color: #D2FEFA; */ cursor: move; } /* menu magic - many thanks to [[User:Zocky]]! */ /* popups */ .popup_menu li { margin: 3px; } .popup_menu { display:none; position:absolute; left:0; margin: 0; margin-top: 1em; line-height: 1.25em; list-style-type: none; /*top:1.6ex; */ z-index:2; width:10em; background:white; border:solid 1px grey; padding: 0.5em !important; margin-left: -6px; margin-top: 1em; border-width: 1px 1px 1px 6px; } .popup_menu a {display:block;} .popup_menu_row a {display:inline;} .popup_menu_row { list-style: none; padding: 0; margin: 0; /*)border: solid 1px red;*/ } .popup_drop {display:inline; position:relative} .popup_drop:hover .popup_menu, .popup_drop .popup_menu:hover {display:inline; background:White; padding:2px 2px 2px 2px} .popup_drop:hover { background:#CCF; color:#44f; } /* other colours, styles and so on */ .popup_menu a:hover {background:#CCf; color:#44f} .popup_mainlink {font-size: 140%; font-weight: bold} .popup_change_title_link { color: #152; } .popup_diff_dates { font-style: italic; background: none; } .popup_menu_item { list-style: none; padding: 0; margin: 0; /*border: solid 1px green;*/ } /* .popup_menu_item a:hover { */ /* background:#CCf; */ /* color:#44f; */ /* } */ .popup_menu_item a{ display:block; } .popup_history_row_even { background: #eee; } .popup_history_date { font-weight: bold; font-size: 120%; } /* copied from monobook #bodyContent declarations */ .popupPreview a.external, .popupPreview a[href ^="gopher://"] { background: url(http://en.wikipedia.org/skins/monobook/external.png) center right no-repeat; padding-right: 13px; } .popupPreview a[href ^="https://"], .link-https { background: url(http://en.wikipedia.org/skins/monobook/lock_icon.gif) center right no-repeat; padding-right: 16px; } .popupPreview a[href ^="mailto:"], .link-mailto { background: url(http://en.wikipedia.org/skins/monobook/mail_icon.gif) center right no-repeat; padding-right: 18px; } .popupPreview a[href ^="news://"] { background: url(http://en.wikipedia.org/skins/monobook/news_icon.png) center right no-repeat; padding-right: 18px; } .popupPreview a[href ^="ftp://"], .link-ftp { background: url(http://en.wikipedia.org/skins/monobook/file_icon.gif) center right no-repeat; padding-right: 18px; } .popupPreview a[href ^="irc://"], .link-irc { background: url(http://en.wikipedia.org/skins/monobook/discussionitem_icon.gif) center right no-repeat; padding-right: 18px; } /* disable interwiki styling */ .popupPreview a.extiw, .popupPreview a.extiw:active { color: #36b; background: none; padding: 0; } .popupPreview a.external { color: #36b; } /* this can be used in the content area to switch off special external link styling */ .popupPreview .plainlinks a { background: none !important; padding: 0 !important; } 4x8p9dls9ke1ejkwlfcvbpe34cy3aw1 14869 14868 2012-01-20T23:13:44Z Hoo man 668 Bot: Security fix: [[WMFblog:2011/10/03/native-https-support-enabled-for-all-wikimedia-foundation-wikis/|protocol-relative URLs]] per https://meta.wikimedia.org/?oldid=3197161 ([[m:Stewards' noticeboard|questions?]]). 14869 css text/css a.popupMoreLink { display: block; text-align: right; cursor: pointer; } ins.popupDiff { background: #AFE; } del.popupDiff { background: #FFE6E6; } #selectionPreview { /* overflow: auto; max-height: 16ex; */ border: 2px solid #DDD; background-color: #EEF; padding: 6px; } .navpopup { border: solid #FFBE20 1px; background-color: #FFFAEF; padding: 5px; font-size: 8pt; /* opacity: 0.9; */ } .popupDragHandle { /* background-color: #D2FEFA; */ cursor: move; } /* menu magic - many thanks to [[User:Zocky]]! */ /* popups */ .popup_menu li { margin: 3px; } .popup_menu { display:none; position:absolute; left:0; margin: 0; margin-top: 1em; line-height: 1.25em; list-style-type: none; /*top:1.6ex; */ z-index:2; width:10em; background:white; border:solid 1px grey; padding: 0.5em !important; margin-left: -6px; margin-top: 1em; border-width: 1px 1px 1px 6px; } .popup_menu a {display:block;} .popup_menu_row a {display:inline;} .popup_menu_row { list-style: none; padding: 0; margin: 0; /*)border: solid 1px red;*/ } .popup_drop {display:inline; position:relative} .popup_drop:hover .popup_menu, .popup_drop .popup_menu:hover {display:inline; background:White; padding:2px 2px 2px 2px} .popup_drop:hover { background:#CCF; color:#44f; } /* other colours, styles and so on */ .popup_menu a:hover {background:#CCf; color:#44f} .popup_mainlink {font-size: 140%; font-weight: bold} .popup_change_title_link { color: #152; } .popup_diff_dates { font-style: italic; background: none; } .popup_menu_item { list-style: none; padding: 0; margin: 0; /*border: solid 1px green;*/ } /* .popup_menu_item a:hover { */ /* background:#CCf; */ /* color:#44f; */ /* } */ .popup_menu_item a{ display:block; } .popup_history_row_even { background: #eee; } .popup_history_date { font-weight: bold; font-size: 120%; } /* copied from monobook #bodyContent declarations */ .popupPreview a.external, .popupPreview a[href ^="gopher://"] { background: url(//en.wikipedia.org/skins/monobook/external.png) center right no-repeat; padding-right: 13px; } .popupPreview a[href ^="https://"], .link-https { background: url(//en.wikipedia.org/skins/monobook/lock_icon.gif) center right no-repeat; padding-right: 16px; } .popupPreview a[href ^="mailto:"], .link-mailto { background: url(//en.wikipedia.org/skins/monobook/mail_icon.gif) center right no-repeat; padding-right: 18px; } .popupPreview a[href ^="news://"] { background: url(//en.wikipedia.org/skins/monobook/news_icon.png) center right no-repeat; padding-right: 18px; } .popupPreview a[href ^="ftp://"], .link-ftp { background: url(//en.wikipedia.org/skins/monobook/file_icon.gif) center right no-repeat; padding-right: 18px; } .popupPreview a[href ^="irc://"], .link-irc { background: url(//en.wikipedia.org/skins/monobook/discussionitem_icon.gif) center right no-repeat; padding-right: 18px; } /* disable interwiki styling */ .popupPreview a.extiw, .popupPreview a.extiw:active { color: #36b; background: none; padding: 0; } .popupPreview a.external { color: #36b; } /* this can be used in the content area to switch off special external link styling */ .popupPreview .plainlinks a { background: none !important; padding: 0 !important; } 93qku25rgzrawpaxj0fqejn3bfe9ksj 14870 14869 2015-04-27T05:03:22Z Az1568 66 Update 14870 css text/css a.popupMoreLink { display: block; text-align: right; cursor: pointer; } ins.popupDiff { background: #AFE; } del.popupDiff { background: #FFE6E6; } #selectionPreview { /* overflow: auto; max-height: 16ex; */ border: 2px solid #DDD; background-color: #EEF; padding: 6px; } .navpopup { border: solid #FFBE20 1px; background-color: #FFFAEF; padding: 5px; font-size: 8pt; /* opacity: 0.9; */ } /* Configure Drag bar color */ .popupDrag { background-color: #FFBE20; height: 5px; margin-top: -5px; margin-bottom: 5px; } .popupDragHandle { cursor: move; position: relative; } /* menu magic - many thanks to [[User:Zocky]]! */ /* popups */ .popup_menu li { margin: 3px; } .popup_menu { display:none; position:absolute; left:0; margin: 0; margin-top: 1em; line-height: 1.25em; list-style-type: none; /*top:1.6ex; */ z-index:2; width:10em; background:white; border:solid 1px grey; padding: 0.5em !important; margin-left: -6px; margin-top: 1em; border-width: 1px 1px 1px 6px; } .popup_menu a {display:block;} .popup_menu_row a {display:inline;} .popup_menu_row { list-style: none; padding: 0; margin: 0; /*)border: solid 1px red;*/ } .popup_drop {display:inline; position:relative} .popup_drop:hover .popup_menu, .popup_drop .popup_menu:hover {display:inline; background:White; padding:2px 2px 2px 2px} .popup_drop:hover { background:#CCF; color:#44f; } /* other colours, styles and so on */ .popup_menu a:hover {background:#CCf; color:#44f} .popup_mainlink {font-size: 140%; font-weight: bold} a.popup_change_title_link { color: #152; } .popup_diff_dates { font-style: italic; background: none; } .popup_menu_item { list-style: none; padding: 0; margin: 0; /*border: solid 1px green;*/ } .popup_menu_item a{ display:block; } .popup_history_row_even { background: #eee; } .popup_history_date { font-weight: bold; font-size: 120%; } /* disable interwiki styling */ .popupPreview a.extiw, .popupPreview a.extiw:active { color: #36b; background: none; padding: 0; } .popupPreview a.external { color: #36b; } /* this can be used in the content area to switch off special external link styling */ .popupPreview .plainlinks a { background: none !important; padding: 0 !important; } d96qxa9ka3gj7iiev1inv6qpfopi4mh 14871 14870 2015-08-15T09:54:30Z Az1568 66 Update 14871 css text/css @import url('//en.wikipedia.org/w/index.php?title=MediaWiki:Gadget-navpop.css&action=raw&ctype=text/css'); 3mpyyxwp97rejicwvcgp7y8rhcz5d2f 14872 14871 2026-08-01T17:26:37Z QueerEcofeminist 1879 [[:en:MediaWiki:Gadget-navpop.css]] पासून ४ आवर्तने आयात केलीत 14871 css text/css @import url('//en.wikipedia.org/w/index.php?title=MediaWiki:Gadget-navpop.css&action=raw&ctype=text/css'); 3mpyyxwp97rejicwvcgp7y8rhcz5d2f मिडियाविकी:Gadget-navpop.js 8 4165 14873 2008-06-05T21:32:05Z Mike.lifeguard 117 from [[w:User:Lupin/popups.js]] 14873 javascript text/javascript var popupVersion="Sat Mar 10 21:40:16 UTC 2007"; // STARTFILE: main.js // ********************************************************************** // ** ** // ** changes to this file affect many users. ** // ** please discuss on the talk page before editing ** // ** ** // ********************************************************************** // ** ** // ** if you do edit this file, be sure that your editor recognizes it ** // ** as utf8, or the weird and wonderful characters in the namespaces ** // ** below will be completely broken. You can check with the show ** // ** changes button before submitting the edit. ** // ** test: مدیا מיוחד Мэдыя ** // ** ** // ********************************************************************** //////////////////////////////////////////////////////////////////// // Import stylesheet(s) // if ( window.localCSS ) { document.write('<link rel="stylesheet" type="text/css" href="http://localhost:8080/js/navpop.css">'); } else { document.write('<link rel="stylesheet" type="text/css" href="' + 'http://en.wikipedia.org/w/index.php?title=User:Lupin/navpop.css' + '&action=raw&ctype=text/css&dontcountme=s">'); } ////////////////////////////////////////////////// // Globals // // Trying to shove as many of these as possible into the pg (popup globals) object function pg(){}; // dummy to stop errors window.pg = { re: {}, // regexps ns: {}, // namespaces string: {}, // translatable strings wiki: {}, // local site info misc: {}, // YUCK PHOOEY option: {}, // options, see newOption etc optionDefault: {}, // default option values flag: {}, // misc flags cache: {}, // page and image cache structures: {}, // navlink structures timer: {}, // all sorts of timers (too damn many) counter: {}, // .. and all sorts of counters current: {}, // state info endoflist: null }; window.pop = { // wrap various functions in here init: {}, util: {}, endoflist: null }; function popupsReady() { if (!window.pg) { return false; } if (!pg.flag) { return false; } if (!pg.flag.finishedLoading) { return false; } return true; } //////////////////////////////////////////////////////////////////// // Run things //////////////////////////////////////////////////////////////////// hookEvent('load', setupPopups); /// Local Variables: /// /// mode:c /// /// End: /// // ENDFILE: main.js // STARTFILE: actions.js function setupTooltips(container, remove, force, popData) { log('setupTooltips, container='+container+', remove='+remove); if (!container) { //<NOLITE> // the main initial call if (getValueOf('popupOnEditSelection') && window.doSelectionPopup ) { try { document.editform.wpTextbox1.onmouseup=function() { doSelectionPopup(); }; } catch (neverMind) {} } //</NOLITE> // article/content is a structure-dependent thing container = defaultPopupsContainer(); } if (!remove && !force && container.ranSetupTooltipsAlready) { return; } container.ranSetupTooltipsAlready = !remove; var anchors; anchors=container.getElementsByTagName('A'); setupTooltipsLoop(anchors, 0, 250, 100, remove, popData); } function defaultPopupsContainer() { if (getValueOf('popupOnlyArticleLinks')) { return document.getElementById('article') || document.getElementById('content') || document; } return document; } function setupTooltipsLoop(anchors,begin,howmany,sleep, remove, popData) { log(simplePrintf('setupTooltipsLoop(%s,%s,%s,%s,%s)', arguments)); var finish=begin+howmany; var loopend = min(finish, anchors.length); var j=loopend - begin; log ('setupTooltips: anchors.length=' + anchors.length + ', begin=' + begin + ', howmany=' + howmany + ', loopend=' + loopend + ', remove=' + remove); var doTooltip= remove ? removeTooltip : addTooltip; // try a faster (?) loop construct if (j > 0) { do { var a=anchors[loopend - j]; if (!a || !a.href) { log('got null anchor at index ' + loopend - j); continue; } doTooltip(a, popData); } while (--j); } if (finish < anchors.length) { setTimeout(function() { setupTooltipsLoop(anchors,finish,howmany,sleep,remove,popData);}, sleep); } else { if ( !remove && ! getValueOf('popupTocLinks')) { rmTocTooltips(); } pg.flag.finishedLoading=true; } } // eliminate popups from the TOC // This also kills any onclick stuff that used to be going on in the toc function rmTocTooltips() { var toc=document.getElementById('toc'); if (toc) { var tocLinks=toc.getElementsByTagName('A'); var tocLen = tocLinks.length; for (j=0; j<tocLen; ++j) { removeTooltip(tocLinks[j], true); } } } function addTooltip(a, popData) { if ( !isPopupLink(a) ) { return; } a.onmouseover=mouseOverWikiLink; a.onmouseout= mouseOutWikiLink; a.onmousedown = killPopup; a.hasPopup = true; a.popData = popData; } function removeTooltip(a) { if ( !a.hasPopup ) { return; } a.onmouseover = null; a.onmouseout = null; if (a.originalTitle) { a.title = a.originalTitle; } a.hasPopup=false; } function removeTitle(a) { if (a.originalTitle) { return; } a.originalTitle=a.title; a.title=''; } function restoreTitle(a) { if ( a.title || !a.originalTitle ) { return; } a.title = a.originalTitle; a.originalTitle=''; } function registerHooks(np) { var popupMaxWidth=getValueOf('popupMaxWidth'); if (typeof popupMaxWidth == 'number') { var setMaxWidth = function () { np.mainDiv.style.maxWidth = popupMaxWidth + 'px'; np.maxWidth = popupMaxWidth; // hack for IE // see http://www.svendtofte.com/code/max_width_in_ie/ // use setExpression as documented here on msdn: http://tinyurl dot com/dqljn if (np.mainDiv.style.setExpression) { np.mainDiv.style.setExpression( 'width', 'document.body.clientWidth > ' + popupMaxWidth + ' ? "' +popupMaxWidth + 'px": "auto"'); } }; np.addHook(setMaxWidth, 'unhide', 'before'); } //<NOLITE> if (window.addPopupShortcuts && window.rmPopupShortcuts) { np.addHook(addPopupShortcuts, 'unhide', 'after'); np.addHook(rmPopupShortcuts, 'hide', 'before'); } //</NOLITE> } function mouseOverWikiLink(evt) { if (!window.popupsReady || !window.popupsReady()) { return; } if (!evt && window.event) {evt=window.event}; return mouseOverWikiLink2(this, evt); } function footnoteTarget(a) { var aTitle=Title.fromAnchor(a); // We want ".3A" rather than "%3A" or "?" here, so use the anchor property directly var anch = aTitle.anchor; if ( ! /^(_note-|endnote)/.test(anch) ) { return false; } var lTitle=Title.fromURL(location.href); if ( lTitle.toString(true) != aTitle.toString(true) ) { return false; } var el=document.getElementById(anch); while ( el && typeof el.nodeName == 'string') { var nt = el.nodeName.toLowerCase(); if ( nt == 'li' ) { return el; } else if ( nt == 'body' ) { return false; } else if ( el.parentNode ) { el=el.parentNode; } else { return false; } } return false; } function footnotePreview(x, navpop) { setPopupHTML('<hr>' + x.innerHTML, 'popupPreview', navpop.idNumber, getValueOf('popupSubpopups') ? function() { setupTooltips(document.getElementById('popupPreview' + navpop.idNumber)); } : null); } // var modid=0; // if(!window.opera) { window.opera={postError: console.log}; } function modifierKeyHandler(a) { return function(evt) { // opera.postError('modifierKeyHandler called' + (++modid)); // opera.postError(''+evt + modid); // for (var i in evt) { // opera.postError('' + modid + ' ' + i + ' ' + evt[i]); // } // opera.postError(''+evt.ctrlKey + modid); var mod=getValueOf('popupModifier'); if (!mod) { return true; } if (!evt && window.event) {evt=window.event}; // opera.postError('And now....'+modid); // opera.postError(''+evt+modid); // opera.postError(''+evt.ctrlKey+modid); if ( evt && mod && !evt[mod.toLowerCase() + 'Key'] ) { return true; } mouseOverWikiLink2(a, evt); }; } function mouseOverWikiLink2(a, evt) { // try not to duplicate effort var mod=getValueOf('popupModifier'); if ( evt && mod && !evt[mod.toLowerCase() + 'Key'] ) { // if the modifier is needed and not pressed, listen for it until // we mouseout of this link. restoreTitle(a); var addHandler='addEventListener'; var rmHandler='removeEventListener'; var on=''; if (!document.addEventListener) { addHandler='attachEvent'; rmHandler='detachEvent'; on='on'; } if (!document[addHandler]) { // forget it return; } a.modifierKeyHandler=modifierKeyHandler(a); document[addHandler](on+'keydown', a.modifierKeyHandler, false); a[addHandler](on+'mouseout', function() { document[rmHandler](on+'keydown', a.modifierKeyHandler, false); }, true); return; } if ( getValueOf('removeTitles') ) { removeTitle(a); } if ( a==pg.current.link && a.navpopup && a.navpopup.isVisible() ) { return; } pg.current.link=a; if (getValueOf('simplePopups') && pg.option.popupStructure===null) { // reset *default value* of popupStructure setDefault('popupStructure', 'original'); } var article=(new Title()).fromAnchor(a); // set global variable (ugh) to hold article (wikipage) pg.current.article = article; if (pg.timer.image !== null) { clearInterval(pg.timer.image); pg.timer.image=null; pg.counter.checkImages=0; } if (!a.navpopup) { // FIXME: this doesn't behave well if you mouse out of a popup // directly into a link with the same href if (pg.current.linksHash[a.href] && false) { a.navpopup = pg.current.linksHash[a.href]; } else { a.navpopup=newNavpopup(a, article); pg.current.linksHash[a.href] = a.navpopup; pg.current.links.push(a); } } if (a.navpopup.pending===null || a.navpopup.pending!==0) { // either fresh popups or those with unfinshed business are redone from scratch simplePopupContent(a, article); } a.navpopup.showSoonIfStable(a.navpopup.delay); getValueOf('popupInitialWidth'); clearInterval(pg.timer.checkPopupPosition); pg.timer.checkPopupPosition=setInterval(checkPopupPosition, 600); if(getValueOf('simplePopups')) { return; } if (a.navpopup.pending!==0 ) { nonsimplePopupContent(a, article); } } // simplePopupContent: the content that is shown even when simplePopups is true function simplePopupContent(a, article) { /* FIXME hack */ a.navpopup.hasPopupMenu=false; a.navpopup.setInnerHTML(popupHTML(a)); fillEmptySpans({navpopup:a.navpopup}); var dragHandle = getValueOf('popupDragHandle') || null; if (dragHandle && dragHandle != 'all') { dragHandle += a.navpopup.idNumber; } setTimeout(function(){a.navpopup.makeDraggable(dragHandle);}, 150); //<NOLITE> if (getValueOf('popupRedlinkRemoval') && a.className=='new') { setPopupHTML('<br>'+popupRedlinkHTML(article), 'popupRedlink', a.navpopup.idNumber); } //</NOLITE> } function debugData(navpopup) { if(getValueOf('popupDebugging') && navpopup.idNumber) { setPopupHTML('idNumber='+navpopup.idNumber + ', pending=' + navpopup.pending, 'popupError', navpopup.idNumber); } } function newNavpopup(a, article) { var navpopup = new Navpopup(); navpopup.fuzz=5; navpopup.delay=getValueOf('popupDelay')*1000; // increment global counter now navpopup.idNumber = ++pg.idNumber; navpopup.parentAnchor = a; navpopup.parentPopup = (a.popData && a.popData.owner); navpopup.article = article; registerHooks(navpopup); return navpopup; } function nonsimplePopupContent(a, article) { var diff=null, history=null; var params=parseParams(a.href); var oldid=(typeof params.oldid=='undefined' ? null : params.oldid); //<NOLITE> if(getValueOf('popupPreviewDiffs') && window.loadDiff) { diff=params.diff; } if(getValueOf('popupPreviewHistory') && getValueOf('popupUseQueryInterface')) { history=(params.action=='history'); } //</NOLITE> a.navpopup.pending=0; var previewImage=true; var x; pg.misc.gImage=null; if (x=footnoteTarget(a)) { footnotePreview(x, a.navpopup); //<NOLITE> } else if ( diff || diff === 0 ) { //alert([article,oldid,diff]); loadDiff(article, oldid, diff, a.navpopup); } else if ( history && getValueOf('popupUseQueryInterface') ) { loadQueryPreview('history', article, a.navpopup); } else if ( pg.re.contribs.test(a.href) && getValueOf('popupUseQueryInterface')) { loadQueryPreview('contribs', article, a.navpopup); } else if ( pg.re.backlinks.test(a.href) && getValueOf('popupUseQueryInterface')) { loadQueryPreview('backlinks', article, a.navpopup); } else if ( // FIXME should be able to get all preview combinations with options article.namespace()==pg.ns.image && ( getValueOf('imagePopupsForImages') || ! anchorContainsImage(a) ) ) { if (getValueOf('popupUseQueryInterface')) { loadQueryPreview('imagepagepreview', article, a.navpopup); } else { startArticlePreview(article, oldid, a.navpopup); } loadImages(article); //</NOLITE> } else if (article.namespace() == pg.ns.category && getValueOf('popupCategoryMembers')) { getValueOf('popupUseQueryInterface') && loadQueryPreview('category', article, a.navpopup); startArticlePreview(article, oldid, a.navpopup); } else if (!article.namespace()!=pg.ns.image && previewImage ) { startArticlePreview(article, oldid, a.navpopup); } } function pendingNavpopTask(navpop) { if (navpop && navpop.pending===null) { navpop.pending=0; } ++navpop.pending; debugData(navpop); } function completedNavpopTask(navpop) { if (navpop && navpop.pending) { --navpop.pending; } debugData(navpop); } function startArticlePreview(article, oldid, navpop) { navpop.redir=0; loadPreview(article, oldid, navpop); } function loadPreview(article, oldid, navpop) { pendingNavpopTask(navpop); if (!navpop.redir) { navpop.originalArticle=article; } if (!navpop.visible && getValueOf('popupLazyDownloads')) { var id=(navpop.redir) ? 'DOWNLOAD_PREVIEW_REDIR_HOOK' : 'DOWNLOAD_PREVIEW_HOOK'; navpop.addHook(function() { getWiki(article, insertPreview, oldid, navpop); return true; }, 'unhide', 'before', id); } else { getWiki(article, insertPreview, oldid, navpop); } } function loadPreviewFromRedir(redirMatch, navpop) { // redirMatch is a regex match var target = new Title().fromWikiText(redirMatch[2]); // overwrite (or add) anchor from original target // mediawiki does overwrite; eg [[User:Lupin/foo3#Done]] if ( navpop.article.anchor ) { target.anchor = navpop.article.anchor; } var trailingRubbish=redirMatch[4]; navpop.redir++; navpop.redirTarget=target; //<NOLITE> if (window.redirLink) { var warnRedir = redirLink(target, navpop.article); setPopupHTML(warnRedir, 'popupWarnRedir', navpop.idNumber); } //</NOLITE> navpop.article=target; fillEmptySpans({redir: true, redirTarget: target, navpopup:navpop}); return loadPreview(target, null, navpop); } function insertPreview(download) { if (!download.owner) { return; } var redirMatch = pg.re.redirect.exec(download.data); if (download.owner.redir===0 && redirMatch) { completedNavpopTask(download.owner); loadPreviewFromRedir(redirMatch, download.owner); return; } if (download.owner.visible || !getValueOf('popupLazyPreviews')) { insertPreviewNow(download); } else { var id=(download.owner.redir) ? 'PREVIEW_REDIR_HOOK' : 'PREVIEW_HOOK'; download.owner.addHook( function(){insertPreviewNow(download); return true;}, 'unhide', 'after', id ); } } function insertPreviewNow(download) { if (!download.owner) { return; } var wikiText=download.data; var navpop=download.owner; completedNavpopTask(navpop); var art=navpop.redirTarget || navpop.originalArticle; //<NOLITE> makeFixDabs(wikiText, navpop); if (getValueOf('popupSummaryData') && window.getPageInfo) { var info=getPageInfo(wikiText, download); setPopupTrailer(getPageInfo(wikiText, download), navpop.idNumber); } var imagePage=''; if (art.namespace()==pg.ns.image) { imagePage=art.toString(); } else { imagePage=getValidImageFromWikiText(wikiText); } if(imagePage) { loadImages(Title.fromWikiText(imagePage)); } //</NOLITE> if (getValueOf('popupPreviews')) { insertArticlePreview(download, art, navpop); } } function insertArticlePreview(download, art, navpop) { if (download && typeof download.data == typeof ''){ if (art.namespace()==pg.ns.template && getValueOf('popupPreviewRawTemplates')) { // FIXME compare/consolidate with diff escaping code for wikitext var h='<hr><tt>' + download.data.entify().split('\\n').join('<br>\\n') + '</tt>'; setPopupHTML(h, 'popupPreview', navpop.idNumber); } else { var p=prepPreviewmaker(download.data, art, navpop); p.showPreview(); } } } function prepPreviewmaker(data, article, navpop) { // deal with tricksy anchors var d=anchorize(data, article.anchorString()); var urlBase=joinPath([pg.wiki.articlebase, article.urlString()]); var p=new Previewmaker(d, urlBase, navpop); return p; } // Try to imitate the way mediawiki generates HTML anchors from section titles function anchorize(d, anch) { if (!anch) { return d; } var anchRe=RegExp('=+\\s*' + literalizeRegex(anch).replace(/[_ ]/g, '[_ ]') + '\\s*=+'); var match=d.match(anchRe); if(match && match.length > 0 && match[0]) { return d.substring(d.indexOf(match[0])); } // now try to deal with == foo [[bar|baz]] boom == -> #foo_baz_boom var lines=d.split('\n'); for (var i=0; i<lines.length; ++i) { lines[i]=lines[i].replace(RegExp('[[]{2}([^|\\]]*?[|])?(.*?)[\\]]{2}', 'g'), '$2') .replace(/'''([^'])/g, '$1').replace(RegExp("''([^'])", 'g'), '$1'); if (lines[i].match(anchRe)) { return d.split('\n').slice(i).join('\n').replace(RegExp('^[^=]*'), ''); } } return d; } function killPopup() { if (getValueOf('popupShortcutKeys') && window.rmPopupShortcuts) { rmPopupShortcuts(); } if (!pg) { return; } pg.current.link && pg.current.link.navpopup && pg.current.link.navpopup.banish(); pg.current.link=null; abortAllDownloads(); window.stopImagesDownloading && stopImagesDownloading(); if (pg.timer.checkPopupPosition !== null) { clearInterval(pg.timer.checkPopupPosition); pg.timer.checkPopupPosition=null; } if (pg.timer.checkImages !== null) { clearInterval(pg.timer.checkImages); pg.timer.checkImages=null; } if (pg.timer.image !== null) { clearInterval(pg.timer.image); pg.timer.image=null; } return true; // preserve default action } // ENDFILE: actions.js // STARTFILE: domdrag.js /** @fileoverview The {@link Drag} object, which enables objects to be dragged around. <pre> ************************************************* dom-drag.js 09.25.2001 www.youngpup.net ************************************************** 10.28.2001 - fixed minor bug where events sometimes fired off the handle, not the root. ************************************************* Pared down, some hooks added by [[User:Lupin]] Copyright Aaron Boodman. Saying stupid things daily since March 2001. </pre> */ /** Creates a new Drag object. This is used to make various DOM elements draggable. @constructor */ function Drag () { /** Condition to determine whether or not to drag. This function should take one parameter, an Event. To disable this, set it to <code>null</code>. @type Function */ this.startCondition = null; /** Hook to be run when the drag finishes. This is passed the final coordinates of the dragged object (two integers, x and y). To disables this, set it to <code>null</code>. @type Function */ this.endHook = null; } /** Gets an event in a cross-browser manner. @param {Event} e @private */ Drag.prototype.fixE = function(e) { if (typeof e == 'undefined') { e = window.event; } if (typeof e.layerX == 'undefined') { e.layerX = e.offsetX; } if (typeof e.layerY == 'undefined') { e.layerY = e.offsetY; } return e; }; /** Initialises the Drag instance by telling it which object you want to be draggable, and what you want to drag it by. @param {DOMElement} o The "handle" by which <code>oRoot</code> is dragged. @param {DOMElement} oRoot The object which moves when <code>o</code> is dragged, or <code>o</code> if omitted. */ Drag.prototype.init = function(o, oRoot) { var dragObj = this; this.obj = o; o.onmousedown = function(e) { dragObj.start.apply( dragObj, [e]); }; o.dragging = false; o.draggable = true; o.hmode = true; o.vmode = true; o.root = oRoot && oRoot !== null ? oRoot : o ; if (isNaN(parseInt(o.root.style.left, 10))) { o.root.style.left = "0px"; } if (isNaN(parseInt(o.root.style.top, 10))) { o.root.style.top = "0px"; } o.root.onthisStart = function(){}; o.root.onthisEnd = function(){}; o.root.onthis = function(){}; }; /** Starts the drag. @private @param {Event} e */ Drag.prototype.start = function(e) { var o = this.obj; // = this; e = this.fixE(e); if (this.startCondition && !this.startCondition(e)) { return; } var y = parseInt(o.vmode ? o.root.style.top : o.root.style.bottom, 10); var x = parseInt(o.hmode ? o.root.style.left : o.root.style.right, 10); o.root.onthisStart(x, y); o.lastMouseX = e.clientX; o.lastMouseY = e.clientY; var dragObj = this; o.onmousemoveDefault = document.onmousemove; o.dragging = true; document.onmousemove = function(e) { dragObj.drag.apply( dragObj, [e] ); }; document.onmouseup = function(e) { dragObj.end.apply( dragObj, [e] ); }; return false; }; /** Does the drag. @param {Event} e @private */ Drag.prototype.drag = function(e) { e = this.fixE(e); var o = this.obj; var ey = e.clientY; var ex = e.clientX; var y = parseInt(o.vmode ? o.root.style.top : o.root.style.bottom, 10); var x = parseInt(o.hmode ? o.root.style.left : o.root.style.right, 10 ); var nx, ny; nx = x + ((ex - o.lastMouseX) * (o.hmode ? 1 : -1)); ny = y + ((ey - o.lastMouseY) * (o.vmode ? 1 : -1)); this.obj.root.style[o.hmode ? "left" : "right"] = nx + "px"; this.obj.root.style[o.vmode ? "top" : "bottom"] = ny + "px"; this.obj.lastMouseX = ex; this.obj.lastMouseY = ey; this.obj.root.onthis(nx, ny); return false; }; /** Ends the drag. @private */ Drag.prototype.end = function() { document.onmousemove=this.obj.onmousemoveDefault; document.onmouseup = null; this.obj.dragging = false; if (this.endHook) { this.endHook( parseInt(this.obj.root.style[this.obj.hmode ? "left" : "right"], 10), parseInt(this.obj.root.style[this.obj.vmode ? "top" : "bottom"], 10)); } }; // ENDFILE: domdrag.js // STARTFILE: structures.js //<NOLITE> pg.structures.original={}; pg.structures.original.popupLayout=function () { return ['popupError', 'popupImage', 'popupTopLinks', 'popupTitle', 'popupData', 'popupOtherLinks', 'popupRedir', ['popupWarnRedir', 'popupRedirTopLinks', 'popupRedirTitle', 'popupRedirData', 'popupRedirOtherLinks'], 'popupMiscTools', ['popupRedlink'], 'popupPrePreviewSep', 'popupPreview', 'popupSecondPreview', 'popupPreviewMore', 'popupPostPreview', 'popupFixDab']; }; pg.structures.original.popupRedirSpans=function () { return ['popupRedir', 'popupWarnRedir', 'popupRedirTopLinks', 'popupRedirTitle', 'popupRedirData', 'popupRedirOtherLinks']; }; pg.structures.original.popupTitle=function (x) { log ('defaultstructure.popupTitle'); if (!getValueOf('popupNavLinks')) { return navlinkStringToHTML('<b><<mainlink>></b>',x.article,x.params); } return ''; }; pg.structures.original.popupTopLinks=function (x) { log ('defaultstructure.popupTopLinks'); if (getValueOf('popupNavLinks')) { return navLinksHTML(x.article, x.hint, x.params); } return ''; }; pg.structures.original.popupImage=function(x) { log ('original.popupImage, x.article='+x.article+', x.navpop.idNumber='+x.navpop.idNumber); return imageHTML(x.article, x.navpop.idNumber); }; pg.structures.original.popupRedirTitle=pg.structures.original.popupTitle; pg.structures.original.popupRedirTopLinks=pg.structures.original.popupTopLinks; function copyStructure(oldStructure, newStructure) { pg.structures[newStructure]={}; for (var prop in pg.structures[oldStructure]) { pg.structures[newStructure][prop]=pg.structures[oldStructure][prop]; } } copyStructure('original', 'nostalgia'); pg.structures.nostalgia.popupTopLinks=function(x) { var str=''; str += '<b><<mainlink|shortcut= >></b>'; // user links // contribs - log - count - email - block // count only if applicable; block only if popupAdminLinks str += 'if(user){<br><<contribs|shortcut=c>>'; str+='if(wikimedia){*<<count|shortcut=#>>}'; str+='if(ipuser){}else{*<<email|shortcut=E>>}if(admin){*<<block|shortcut=b>>}}'; // editing links // talkpage -> edit|new - history - un|watch - article|edit // other page -> edit - history - un|watch - talk|edit|new var editstr='<<edit|shortcut=e>>'; var editOldidStr='if(oldid){<<editOld|shortcut=e>>|<<revert|shortcut=v|rv>>|<<edit|cur>>}else{' + editstr + '}' var historystr='<<history|shortcut=h>>'; var watchstr='<<unwatch|unwatchShort>>|<<watch|shortcut=w|watchThingy>>'; str+='<br>if(talk){' + editOldidStr+'|<<new|shortcut=+>>' + '*' + historystr+'*'+watchstr + '*' + '<b><<article|shortcut=a>></b>|<<editArticle|edit>>' + '}else{' + // not a talk page editOldidStr + '*' + historystr + '*' + watchstr + '*' + '<b><<talk|shortcut=t>></b>|<<editTalk|edit>>|<<newTalk|shortcut=+|new>>' + '}'; // misc links str += '<br><<whatLinksHere|shortcut=l>>*<<relatedChanges|shortcut=r>>'; str += 'if(admin){<br>}else{*}<<move|shortcut=m>>'; // admin links str += 'if(admin){*<<unprotect|unprotectShort>>|<<protect|shortcut=p>>*' + '<<undelete|undeleteShort>>|<<delete|shortcut=d>>}'; return navlinkStringToHTML(str, x.article, x.params); }; pg.structures.nostalgia.popupRedirTopLinks=pg.structures.nostalgia.popupTopLinks; /** -- fancy -- **/ copyStructure('original', 'fancy'); pg.structures.fancy.popupTitle=function (x) { return navlinkStringToHTML('<font size=+0><<mainlink>></font>',x.article,x.params); }; pg.structures.fancy.popupTopLinks=function(x) { var hist='<<history|shortcut=h|hist>>|<<lastEdit|shortcut=/|last>>if(mainspace_en){|<<editors|shortcut=E|eds>>}'; var watch='<<unwatch|unwatchShort>>|<<watch|shortcut=w|watchThingy>>'; var move='<<move|shortcut=m|move>>'; return navlinkStringToHTML('if(talk){' + '<<edit|shortcut=e>>|<<new|shortcut=+|+>>*' + hist + '*' + '<<article|shortcut=a>>|<<editArticle|edit>>' + '*' + watch + '*' + move + '}else{<<edit|shortcut=e>>*' + hist + '*<<talk|shortcut=t|>>|<<editTalk|edit>>|<<newTalk|shortcut=+|new>>' + '*' + watch + '*' + move+'}<br>', x.article, x.params); }; pg.structures.fancy.popupOtherLinks=function(x) { var admin='<<unprotect|unprotectShort>>|<<protect|shortcut=p>>*<<undelete|undeleteShort>>|<<delete|shortcut=d|del>>'; var user='<<contribs|shortcut=c>>if(wikimedia){|<<count|shortcut=#|#>>}'; user+='if(ipuser){|<<arin>>}else{*<<email|shortcut=E|'+ popupString('email')+'>>}if(admin){*<<block|shortcut=b>>}'; var normal='<<whatLinksHere|shortcut=l|links here>>*<<relatedChanges|shortcut=r|related>>'; return navlinkStringToHTML('<br>if(user){' + user + '*}if(admin){'+admin+'if(user){<br>}else{*}}' + normal, x.article, x.params); }; pg.structures.fancy.popupRedirTitle=pg.structures.fancy.popupTitle; pg.structures.fancy.popupRedirTopLinks=pg.structures.fancy.popupTopLinks; pg.structures.fancy.popupRedirOtherLinks=pg.structures.fancy.popupOtherLinks; /** -- fancy2 -- **/ // hack for [[User:MacGyverMagic]] copyStructure('fancy', 'fancy2'); pg.structures.fancy2.popupTopLinks=function(x) { // hack out the <br> at the end and put one at the beginning return '<br>'+pg.structures.fancy.popupTopLinks(x).replace(RegExp('<br>$','i'),''); }; pg.structures.fancy2.popupLayout=function () { // move toplinks to after the title return ['popupError', 'popupImage', 'popupTitle', 'popupData', 'popupTopLinks', 'popupOtherLinks', 'popupRedir', ['popupWarnRedir', 'popupRedirTopLinks', 'popupRedirTitle', 'popupRedirData', 'popupRedirOtherLinks'], 'popupMiscTools', ['popupRedlink'], 'popupPrePreviewSep', 'popupPreview', 'popupSecondPreview', 'popupPreviewMore', 'popupPostPreview', 'popupFixDab']; }; /** -- menus -- **/ copyStructure('original', 'menus'); pg.structures.menus.popupLayout=function () { return ['popupError', 'popupImage', 'popupTopLinks', 'popupTitle', 'popupOtherLinks', 'popupRedir', ['popupWarnRedir', 'popupRedirTopLinks', 'popupRedirTitle', 'popupRedirData', 'popupRedirOtherLinks'], 'popupData', 'popupMiscTools', ['popupRedlink'], 'popupPrePreviewSep', 'popupPreview', 'popupSecondPreview', 'popupPreviewMore', 'popupPostPreview', 'popupFixDab']; }; function toggleSticky(uid) { var popDiv=document.getElementById('navpopup_maindiv'+uid); if (!popDiv) { return; } if (!popDiv.navpopup.sticky) { popDiv.navpopup.stick(); } else { popDiv.navpopup.unstick(); popDiv.navpopup.hide(); } } pg.structures.menus.popupTopLinks = function (x, shorter) { // FIXME maybe this stuff should be cached var s=[]; var dropdiv='<div class="popup_drop">'; var enddiv='</div>'; var endspan='</span>'; var hist='<<history|shortcut=h>>'; if (!shorter) { hist = '<menurow>' + hist + '|<<historyfeed|rss>>if(mainspace_en){|<<editors|shortcut=E>>}</menurow>'; } var lastedit='<<lastEdit|shortcut=/|show last edit>>'; var jsHistory='<<lastContrib|last set of edits>><<sinceMe|changes since mine>>'; var linkshere='<<whatLinksHere|shortcut=l|what links here>>'; var related='<<relatedChanges|shortcut=r|related changes>>'; var search='<menurow><<search|shortcut=s>>if(wikimedia){|<<globalsearch|shortcut=g|global>>}' + '|<<google|shortcut=G|web>></menurow>'; var watch='<menurow><<unwatch|unwatchShort>>|<<watch|shortcut=w|watchThingy>></menurow>'; var protect='<menurow><<unprotect|unprotectShort>>|' + '<<protect|shortcut=p>>|<<protectlog|log>></menurow>'; var del='<menurow><<undelete|undeleteShort>>|<<delete|shortcut=d>>|' + '<<deletelog|log>></menurow>'; var move='<<move|shortcut=m|move page>>'; var nullPurge='<menurow><<nullEdit|shortcut=n|null edit>>|<<purge|shortcut=P>></menurow>'; var viewOptions='<menurow><<view|shortcut=v>>|<<render|shortcut=S>>|<<raw>></menurow>'; var editRow='if(oldid){' + '<menurow><<edit|shortcut=e>>|<<editOld|shortcut=e|this&nbsp;revision>></menurow>' + '<menurow><<revert|shortcut=v>>|<<undo>></menurow>' + '}else{<<edit|shortcut=e>>}'; var markPatrolled='if(rcid){<<markpatrolled|mark patrolled>>}'; var newTopic='if(talk){<<new|shortcut=+|new topic>>}'; var protectDelete='if(admin){' + protect + del + '}'; if (getValueOf('popupActionsMenu')) { s.push( '<<mainlink>>*' + dropdiv + menuTitle('actions')); } else { s.push( dropdiv + '<<mainlink>>'); } s.push( '<menu>') s.push( editRow + markPatrolled + newTopic + hist + lastedit ) if (!shorter) { s.push(jsHistory); } s.push( move + linkshere + related) if (!shorter) { s.push(nullPurge + search); } if (!shorter) { s.push(viewOptions); } s.push('<hr>' + watch + protectDelete); s.push('<hr>' + 'if(talk){<<article|shortcut=a|view article>><<editArticle|edit article>>}' + 'else{<<talk|shortcut=t|talk page>><<editTalk|edit talk>>' + '<<newTalk|shortcut=+|new topic>>}</menu>' + enddiv); // user menu starts here var email='<<email|shortcut=E|email user>>'; var contribs= 'if(wikimedia){<menurow>}<<contribs|shortcut=c|contributions>>' + 'if(wikimedia){|<<contribsTree|tree>></menurow>}'; s.push('if(user){*' + dropdiv + menuTitle('user')); s.push('<menu>'); + s.push('<menurow><<userPage|shortcut=u|user&nbsp;page>>|<<userSpace|space>></menurow>'); s.push('<<userTalk|shortcut=t|user talk>><<editUserTalk|edit user talk>>' + '<<newUserTalk|shortcut=+|leave comment>>'); if(!shorter) { s.push( 'if(ipuser){<<arin>>}else{' + email + '}') } else { s.push( 'if(ipuser){}else{' + email + '}') } s.push('<hr>' + contribs + '<<userlog|shortcut=L|user log>>'); s.push('if(wikimedia){<<count|shortcut=#|edit counter>>}'); s.push('if(admin){<menurow><<unblock|unblockShort>>|<<block|shortcut=b|block user>></menurow>}'); s.push('<<blocklog|shortcut=B|block log>>' + getValueOf('popupExtraUserMenu')); s.push('</menu>' + enddiv + '}'); // popups menu starts here if (getValueOf('popupSetupMenu') && !x.navpop.hasPopupMenu /* FIXME: hack */) { x.navpop.hasPopupMenu=true; s.push('*' + dropdiv + menuTitle('popupsMenu') + '<menu>'); s.push('<<togglePreviews|toggle previews>>'); s.push('<<purgePopups|reset>>'); s.push('<<disablePopups|disable>>'); s.push('</menu>'+enddiv); } return navlinkStringToHTML(s.join(''), x.article, x.params); }; function menuTitle(s) { return '<a href="#" noPopup=1>' + popupString(s) + '</a>'; } pg.structures.menus.popupRedirTitle=pg.structures.menus.popupTitle; pg.structures.menus.popupRedirTopLinks=pg.structures.menus.popupTopLinks; copyStructure('menus', 'shortmenus'); pg.structures.shortmenus.popupTopLinks=function(x) { return pg.structures.menus.popupTopLinks(x,true); }; pg.structures.shortmenus.popupRedirTopLinks=pg.structures.shortmenus.popupTopLinks; //</NOLITE> pg.structures.lite={}; pg.structures.lite.popupLayout=function () { return ['popupTitle', 'popupPreview' ]; }; pg.structures.lite.popupTitle=function (x) { log (x.article + ': structures.lite.popupTitle'); //return navlinkStringToHTML('<b><<mainlink>></b>',x.article,x.params); return '<div><span class="popup_mainlink"><b>' + x.article.toString() + '</b></span></div>'; }; // ENDFILE: structures.js // STARTFILE: autoedit.js //<NOLITE> function getParamValue(paramName, h) { if (typeof h == 'undefined' ) { h = document.location.href; } var cmdRe=RegExp('[&?]'+paramName+'=([^&]*)'); var m=cmdRe.exec(h); if (m) { try { return decodeURI(m[1]); } catch (someError) {} } return null; } function substitute(data,cmdBody) { // alert('sub\nfrom: '+cmdBody.from+'\nto: '+cmdBody.to+'\nflags: '+cmdBody.flags); var fromRe=RegExp(cmdBody.from, cmdBody.flags); return data.replace(fromRe, cmdBody.to); } function execCmds(data, cmdList) { for (var i=0; i<cmdList.length; ++i) { data=cmdList[i].action(data, cmdList[i]); } return data; } function parseCmd(str) { // returns a list of commands if (!str.length) { return []; } var p=false; switch (str.charAt(0)) { case 's': p=parseSubstitute(str); break; default: return false; } if (p) { return [p].concat(parseCmd(p.remainder)); } return false; } function unEscape(str, sep) { return str.split('\\\\').join('\\').split('\\'+sep).join(sep).split('\\n').join('\n'); } function parseSubstitute(str) { // takes a string like s/a/b/flags;othercmds and parses it var from,to,flags,tmp; if (str.length<4) { return false; } var sep=str.charAt(1); str=str.substring(2); tmp=skipOver(str,sep); if (tmp) { from=tmp.segment; str=tmp.remainder; } else { return false; } tmp=skipOver(str,sep); if (tmp) { to=tmp.segment; str=tmp.remainder; } else { return false; } flags=''; if (str.length) { tmp=skipOver(str,';') || skipToEnd(str, ';'); if (tmp) {flags=tmp.segment; str=tmp.remainder; } } return {action: substitute, from: from, to: to, flags: flags, remainder: str}; } function skipOver(str,sep) { var endSegment=findNext(str,sep); if (endSegment<0) { return false; } var segment=unEscape(str.substring(0,endSegment), sep); return {segment: segment, remainder: str.substring(endSegment+1)}; } function skipToEnd(str,sep) { return {segment: str, remainder: ''}; } function findNext(str, ch) { for (var i=0; i<str.length; ++i) { if (str.charAt(i)=='\\') { i+=2; } if (str.charAt(i)==ch) { return i; } } return -1; } function setCheckbox(param, box) { var val=getParamValue(param); if (val!==null) { switch (val) { case '1': case 'yes': case 'true': box.checked=true; break; case '0': case 'no': case 'false': box.checked=false; } } } function autoEdit() { if (!setupPopups.completed) { setupPopups(); } if (!document.editform) { return false; } if (window.autoEdit.alreadyRan) { return false; } window.autoEdit.alreadyRan=true; var cmdString=getParamValue('autoedit'); if (cmdString) { try { var editbox=document.editform.wpTextbox1; } catch (dang) { return; } var cmdList=parseCmd(cmdString); var input=editbox.value; var output=execCmds(input, cmdList); editbox.value=output; } setCheckbox('autominor', document.editform.wpMinoredit); setCheckbox('autowatch', document.editform.wpWatchthis); var rvid = getParamValue('autorv'); if (getValueOf('popupUseQueryInterface') && getParamValue('autorv')) { var url=pg.wiki.wikibase + '/query.php?format=json&what=revisions&revids='+rvid; startDownload(url, null, autoEdit2); } else { autoEdit2(); } } function autoEdit2(d) { var summary=getParamValue('autosummary'); var summaryprompt=getParamValue('autosummaryprompt'); var summarynotice=''; if (d && d.data && getParamValue('autorv')) { var s = getRvSummary(summary, d.data); if (s===false) { summaryprompt=true; summarynotice=popupString('Failed to get revision information, please edit manually.\n\n'); summary = simplePrintf(summary, [getParamValue('autorv'), '(unknown)', '(unknown)']); } else { summary = s; } } if (summaryprompt) { var txt= summarynotice + popupString('Enter a non-empty edit summary or press cancel to abort'); var response=prompt(txt, summary); if (response) { summary=response; } else { return; } } if (summary) { document.editform.wpSummary.value=summary; } // Attempt to avoid possible premature clicking of the save button // (maybe delays in updates to the DOM are to blame?? or a red herring) setTimeout(autoEdit3, 100); } function autoClickToken() { return document.cookie.substr(document.cookie.indexOf("session=")+8,4); } function autoEdit3() { if (getParamValue('actoken') != autoClickToken()) return; var btn=getParamValue('autoclick'); if (btn) { if (document.editform && document.editform[btn]) { var button=document.editform[btn]; var msg=tprintf('The %s button has been automatically clicked. Please wait for the next page to load.', [ button.value ]); bannerMessage(msg); document.title='('+document.title+')'; button.click(); } else { alert(tprintf('Could not find button %s. Please check the settings in your javascript file.', [ btn ])); } } } function bannerMessage(s) { var headings=document.getElementsByTagName('h1'); if (headings) { var div=document.createElement('div'); div.innerHTML='<font size=+1><b>' + s + '</b></font>'; headings[0].parentNode.insertBefore(div, headings[0]); } } function getRvSummary(template, json) { var o=getJsObj(json); try { var edit = anyChild(o.pages).revisions[0]; } catch (badness) {return false;} var timestamp = edit.timestamp.split(/[A-Z]/g).join(' ').replace(/^ *| *$/g, ''); return simplePrintf(template, [edit.revid, timestamp, edit.user]); } hookEvent('load', autoEdit); //</NOLITE> // ENDFILE: autoedit.js // STARTFILE: downloader.js /** @fileoverview {@link Downloader}, a xmlhttprequest wrapper, and helper functions. */ /** Creates a new Downloader @constructor @class The Downloader class. Create a new instance of this class to download stuff. @param {String} url The url to download. This can be omitted and supplied later. */ function Downloader(url) { // Source: http://jibbering.com/2002/4/httprequest.html /** xmlhttprequest object which we're wrapping */ this.http = false; /*@cc_on @*/ /*@if (@_jscript_version >= 5) // JScript gives us Conditional compilation, // we can cope with old IE versions. // and security blocked creation of the objects. try { this.http = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { this.http = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { // this.http = false; } } @end @*/ if (! this.http && typeof XMLHttpRequest!='undefined') { this.http = new XMLHttpRequest(); } /** The url to download @type String */ this.url = url; /** A universally unique ID number @type integer */ this.id=null; /** Modification date, to be culled from the incoming headers @type Date @private */ this.lastModified = null; /** What to do when the download completes successfully @type Function @private */ this.callbackFunction = null; /** What to do on failure @type Function @private */ this.onFailure = null; /** Flag set on <code>abort</code> @type boolean */ this.aborted = false; /** HTTP method. See http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html for possibilities. @type String */ this.method='GET'; /** Async flag. @type boolean */ this.async=true; } new Downloader(); /** Submits the http request. */ Downloader.prototype.send = function (x) { if (!this.http) { return null; } return this.http.send(x); }; /** Aborts the download, setting the <code>aborted</code> field to true. */ Downloader.prototype.abort = function () { if (!this.http) { return null; } this.aborted=true; return this.http.abort(); }; /** Returns the downloaded data. */ Downloader.prototype.getData = function () {if (!this.http) { return null; } return this.http.responseText;}; /** Prepares the download. */ Downloader.prototype.setTarget = function () { if (!this.http) { return null; } this.http.open(this.method, this.url, this.async); }; /** Gets the state of the download. */ Downloader.prototype.getReadyState=function () {if (!this.http) { return null; } return this.http.readyState;}; pg.misc.downloadsInProgress = { }; /** Starts the download. Note that setTarget {@link Downloader#setTarget} must be run first */ Downloader.prototype.start=function () { if (!this.http) { return; } pg.misc.downloadsInProgress[this.id] = this; this.http.send(null); }; /** Gets the 'Last-Modified' date from the download headers. Should be run after the download completes. Returns <code>null</code> on failure. @return {Date} */ Downloader.prototype.getLastModifiedDate=function () { if(!this.http) { return null; } var lastmod=null; try { lastmod=this.http.getResponseHeader('Last-Modified'); } catch (err) {} if (lastmod) { return new Date(lastmod); } return null; }; /** Sets the callback function. @param {Function} f callback function, called as <code>f(this)</code> on success */ Downloader.prototype.setCallback = function (f) { if(!this.http) { return; } this.http.onreadystatechange = f; }; Downloader.prototype.getStatus = function() { if (!this.http) { return null; } return this.http.status; }; ////////////////////////////////////////////////// // helper functions /** Creates a new {@link Downloader} and prepares it for action. @param {String} url The url to download @param {integer} id The ID of the {@link Downloader} object @param {Function} callback The callback function invoked on success @return {String/Downloader} the {@link Downloader} object created, or 'ohdear' if an unsupported browser */ function newDownload(url, id, callback, onfailure) { var d=new Downloader(url); if (!d.http) { return 'ohdear'; } d.id=id; d.setTarget(); if (!onfailure) { onfailure=2; } var f = function () { if (d.getReadyState() == 4) { delete pg.misc.downloadsInProgress[this.id]; try { if ( d.getStatus() == 200 ) { d.data=d.getData(); d.lastModified=d.getLastModifiedDate(); callback(d); } else if (typeof onfailure == typeof 1) { if (onfailure > 0) { // retry newDownload(url, id, callback, onfailure - 1); } } else if (typeof onfailure == 'function') { onfailure(d,url,id,callback); } } catch (somerr) { /* ignore it */ } } }; d.setCallback(f); return d; } /** Simulates a download from cached data. The supplied data is put into a {@link Downloader} as if it had downloaded it. @param {String} url The url. @param {integer} id The ID. @param {Function} callback The callback, which is invoked immediately as <code>callback(d)</code>, where <code>d</code> is the new {@link Downloader}. @param {String} data The (cached) data. @param {Date} lastModified The (cached) last modified date. */ function fakeDownload(url, id, callback, data, lastModified, owner) { var d=newDownload(url,callback); d.owner=owner; d.id=id; d.data=data; d.lastModified=lastModified; return callback(d); } /** Starts a download. @param {String} url The url to download @param {integer} id The ID of the {@link Downloader} object @param {Function} callback The callback function invoked on success @return {String/Downloader} the {@link Downloader} object created, or 'ohdear' if an unsupported browser */ function startDownload(url, id, callback) { var d=newDownload(url, id, callback); if (typeof d == typeof '' ) { return d; } d.start(); return d; } /** Aborts all downloads which have been started. */ function abortAllDownloads() { for ( var x in pg.misc.downloadsInProgress ) { try { pg.misc.downloadsInProgress[x].aborted=true; pg.misc.downloadsInProgress[x].abort(); delete pg.misc.downloadsInProgress[x]; } catch (e) { } } } // ENDFILE: downloader.js // STARTFILE: livepreview.js // TODO: location is often not correct (eg relative links in previews) /** * InstaView - a Mediawiki to HTML converter in JavaScript * Version 0.6.1 * Copyright (C) Pedro Fayolle 2005-2006 * http://en.wikipedia.org/wiki/User:Pilaf * Distributed under the BSD license * * Changelog: * * 0.6.1 * - Fixed problem caused by \r characters * - Improved inline formatting parser * * 0.6 * - Changed name to InstaView * - Some major code reorganizations and factored out some common functions * - Handled conversion of relative links (i.e. [[/foo]]) * - Fixed misrendering of adjacent definition list items * - Fixed bug in table headings handling * - Changed date format in signatures to reflect Mediawiki's * - Fixed handling of [[:Image:...]] * - Updated MD5 function (hopefully it will work with UTF-8) * - Fixed bug in handling of links inside images * * To do: * - Better support for <math> * - Full support for <nowiki> * - Parser-based (as opposed to RegExp-based) inline wikicode handling (make it one-pass and bullet-proof) * - Support for templates (through AJAX) * - Support for coloured links (AJAX) */ var Insta = {} function setupLivePreview() { // options Insta.conf = { baseUrl: '', user: {}, wiki: { lang: pg.wiki.lang, interwiki: pg.wiki.interwiki, default_thumb_width: 180 }, paths: { articles: '/' + joinPath([pg.wiki.prePath, pg.wiki.articlePath]) + '/', math: '/math/', // FIXME images: ( window.getImageUrlStart ? getImageUrlStart(pg.wiki.hostname) : ''), images_fallback: 'http://upload.wikimedia.org/wikipedia/commons/', magnify_icon: 'skins/common/images/magnify-clip.png' }, locale: { user: pg.ns.user, image: pg.ns.image, category: pg.ns.category, // shouldn't be used in popup previews, i think months: ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'] } } // options with default values or backreferences with (Insta.conf) { user.name = user.name || 'Wikipedian' user.signature = '[['+locale.user+':'+user.name+'|'+user.name+']]' //paths.images = 'http://upload.wikimedia.org/wikipedia/' + wiki.lang + '/' } // define constants Insta.BLOCK_IMAGE = new RegExp('^\\[\\[(?:Image|'+Insta.conf.locale.image+ '):.*?\\|.*?(?:frame|thumbnail|thumb|none|right|left|center)', 'i'); } Insta.dump = function(from, to) { if (typeof from == 'string') from = document.getElementById(from) if (typeof to == 'string') to = document.getElementById(to) to.innerHTML = this.convert(from.value) } Insta.convert = function(wiki) { var ll = (typeof wiki == 'string')? wiki.replace(/\r/g,'').split(/\n/): wiki, // lines of wikicode o='', // output p=0, // para flag $r // result of passing a regexp to $() // some shorthands function remain() { return ll.length } function sh() { return ll.shift() } // shift function ps(s) { o+=s } // push function f() // similar to C's printf, uses ? as placeholders, ?? to escape question marks { var i=1,a=arguments,f=a[0],o='',c,p for (;i<a.length; i++) if ((p=f.indexOf('?'))+1) { // allow character escaping i -= c=f.charAt(p+1)=='?'?1:0 o += f.substring(0,p)+(c?'?':a[i]) f=f.substr(p+1+c) } else break; return o+f } function html_entities(s) { return s.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;") } function max(a,b) { return (a>b)?a:b } function min(a,b) { return (a<b)?a:b } // return the first non matching character position between two strings function str_imatch(a, b) { for (var i=0, l=min(a.length, b.length); i<l; i++) if (a.charAt(i)!=b.charAt(i)) break return i } // compare current line against a string or regexp // if passed a string it will compare only the first string.length characters // if passed a regexp the result is stored in $r function $(c) { return (typeof c == 'string') ? (ll[0].substr(0,c.length)==c) : ($r = ll[0].match(c)) } function $$(c) { return ll[0]==c } // compare current line against a string function _(p) { return ll[0].charAt(p) } // return char at pos p function endl(s) { ps(s); sh() } function parse_list() { var prev=''; while (remain() && $(/^([*#:;]+)(.*)$/)) { var l_match = $r sh() var ipos = str_imatch(prev, l_match[1]) // close uncontinued lists for (var i=prev.length-1; i >= ipos; i--) { var pi = prev.charAt(i) if (pi=='*') ps('</ul>') else if (pi=='#') ps('</ol>') // close a dl only if the new item is not a dl item (:, ; or empty) else switch (l_match[1].charAt(i)) { case'':case'*':case'#': ps('</dl>') } } // open new lists for (var i=ipos; i<l_match[1].length; i++) { var li = l_match[1].charAt(i) if (li=='*') ps('<ul>') else if (li=='#') ps('<ol>') // open a new dl only if the prev item is not a dl item (:, ; or empty) else switch(prev.charAt(i)) { case'':case'*':case'#': ps('<dl>') } } switch (l_match[1].charAt(l_match[1].length-1)) { case '*': case '#': ps('<li>' + parse_inline_nowiki(l_match[2])); break case ';': ps('<dt>') var dt_match // handle ;dt :dd format if (dt_match = l_match[2].match(/(.*?)(:.*?)$/)) { ps(parse_inline_nowiki(dt_match[1])) ll.unshift(dt_match[2]) } else ps(parse_inline_nowiki(l_match[2])) break case ':': ps('<dd>' + parse_inline_nowiki(l_match[2])) } prev=l_match[1] } // close remaining lists for (var i=prev.length-1; i>=0; i--) ps(f('</?>', (prev.charAt(i)=='*')? 'ul': ((prev.charAt(i)=='#')? 'ol': 'dl'))) } function parse_table() { endl(f('<table?>', $(/^\{\|( .*)$/)? $r[1]: '')) for (;remain();) if ($('|')) switch (_(1)) { case '}': endl('</table>'); return case '-': endl(f('<tr ?>', $(/\|-*(.*)/)[1])); break default: parse_table_data() } else if ($('!')) parse_table_data() else sh() } function parse_table_data() { var td_line, match_i // 1: "|+", '|' or '+' // 2: ?? // 3: attributes ?? // TODO: finish commenting this regexp var td_match = sh().match(/^(\|\+|\||!)((?:([^[|]*?)\|(?!\|))?(.*))$/) if (td_match[1] == '|+') ps('<caption'); else ps('<t' + ((td_match[1]=='|')?'d':'h')) if (typeof td_match[3] != 'undefined') { ps(' ' + td_match[3]) match_i = 4 } else match_i = 2 ps('>') if (td_match[1] != '|+') { // use || or !! as a cell separator depending on context // NOTE: when split() is passed a regexp make sure to use non-capturing brackets td_line = td_match[match_i].split((td_match[1] == '|')? '||': /(?:\|\||!!)/) ps(parse_inline_nowiki(td_line.shift())) while (td_line.length) ll.unshift(td_match[1] + td_line.pop()) } else ps(td_match[match_i]) var tc = 0, td = [] for (;remain(); td.push(sh())) if ($('|')) { if (!tc) break // we're at the outer-most level (no nested tables), skip to td parse else if (_(1)=='}') tc-- } else if (!tc && $('!')) break else if ($('{|')) tc++ if (td.length) ps(Insta.convert(td)) } function parse_pre() { ps('<pre>') do endl(parse_inline_nowiki(ll[0].substring(1)) + "\n"); while (remain() && $(' ')) ps('</pre>') } function parse_block_image() { ps(parse_image(sh())) } function parse_image(str) { //<NOLITE> // get what's in between "[[Image:" and "]]" var tag = str.substring(Insta.conf.locale.image.length + 3, str.length - 2); var width; var attr = [], filename, caption = ''; var thumb=0, frame=0, center=0; var align=''; if (tag.match(/\|/)) { // manage nested links var nesting = 0; var last_attr; for (var i = tag.length-1; i > 0; i--) { if (tag.charAt(i) == '|' && !nesting) { last_attr = tag.substr(i+1); tag = tag.substring(0, i); break; } else switch (tag.substr(i-1, 2)) { case ']]': nesting++; i--; break; case '[[': nesting--; i--; } } attr = tag.split(/\s*\|\s*/); attr.push(last_attr); filename = attr.shift(); var w_match; for (;attr.length; attr.shift()) if (w_match = attr[0].match(/^(\d*)(?:[px]*\d*)?px$/)) width = w_match[1] else switch(attr[0]) { case 'thumb': case 'thumbnail': thumb=true; case 'frame': frame=true; break; case 'none': case 'right': case 'left': center=false; align=attr[0]; break; case 'center': center=true; align='none'; break; default: if (attr.length == 1) caption = attr[0]; } } else filename = tag; var o=''; if (frame) { if (align=='') align = 'right'; o += f("<div class='thumb t?'>", align); if (thumb) { if (!width) width = Insta.conf.wiki.default_thumb_width; o += f("<div style='width:?px;'>?", 2+width*1, make_image(filename, caption, width)) + f("<div class='thumbcaption'><div class='magnify' style='float:right'><a href='?' class='internal' title='Enlarge'><img src='?'></a></div>?</div>", Insta.conf.paths.articles + Insta.conf.locale.image + ':' + filename, Insta.conf.paths.magnify_icon, parse_inline_nowiki(caption) ) } else { o += '<div>' + make_image(filename, caption) + f("<div class='thumbcaption'>?</div>", parse_inline_nowiki(caption)) } o += '</div></div>'; } else if (align != '') { o += f("<div class='float?'><span>?</span></div>", align, make_image(filename, caption, width)); } else { return make_image(filename, caption, width); } return center? f("<div class='center'>?</div>", o): o; //</NOLITE> } function parse_inline_nowiki(str) { var start, lastend=0 var substart=0, nestlev=0, open, close, subloop; var html=''; while (-1 != (start = str.indexOf('<nowiki>', substart))) { html += parse_inline_wiki(str.substring(lastend, start)); start += 8; substart = start; subloop = true; do { open = str.indexOf('<nowiki>', substart); close = str.indexOf('</nowiki>', substart); if (close<=open || open==-1) { if (close==-1) { return html + html_entities(str.substr(start)); } substart = close+9; if (nestlev) { nestlev--; } else { lastend = substart; html += html_entities(str.substring(start, lastend-9)); subloop = false; } } else { substart = open+8; nestlev++; } } while (subloop) } return html + parse_inline_wiki(str.substr(lastend)); } function make_image(filename, caption, width) { //<NOLITE> // uppercase first letter in file name filename = filename.charAt(0).toUpperCase() + filename.substr(1); // replace spaces with underscores filename = filename.replace(/ /g, '_'); caption = strip_inline_wiki(caption); var md5 = hex_md5(filename); var source = md5.charAt(0) + '/' + md5.substr(0,2) + '/' + filename; if (width) width = "width='" + width + "px'"; var img = f("<img onerror=\"this.onerror=null;this.src='?'\" src='?' ? ?>", Insta.conf.paths.images_fallback + source, Insta.conf.paths.images + source, (caption!='')? "alt='" + caption + "'" : '', width); return f("<a class='image' ? href='?'>?</a>", (caption!='')? "title='" + caption + "'" : '', Insta.conf.paths.articles + Insta.conf.locale.image + ':' + filename, img); //</NOLITE> } function parse_inline_images(str) { //<NOLITE> var start, substart=0, nestlev=0; var loop, close, open, wiki, html; while (-1 != (start=str.indexOf('[[', substart))) { if(str.substr(start+2).match(RegExp('^' + Insta.conf.locale.image + ':','i'))) { loop=true; substart=start; do { substart+=2; close=str.indexOf(']]',substart); open=str.indexOf('[[',substart); if (close<=open||open==-1) { if (close==-1) return str; substart=close; if (nestlev) { nestlev--; } else { wiki=str.substring(start,close+2); html=parse_image(wiki); str=str.replace(wiki,html); substart=start+html.length; loop=false; } } else { substart=open; nestlev++; } } while (loop) } else break; } //</NOLITE> return str; } // the output of this function doesn't respect the FILO structure of HTML // but since most browsers can handle it I'll save myself the hassle function parse_inline_formatting(str) { var em,st,i,li,o=''; while ((i=str.indexOf("''",li))+1) { o += str.substring(li,i); li=i+2; if (str.charAt(i+2)=="'") { li++; st=!st; o+=st?'<strong>':'</strong>'; } else { em=!em; o+=em?'<em>':'</em>'; } } return o+str.substr(li); } function parse_inline_wiki(str) { var aux_match; str = parse_inline_images(str); str = parse_inline_formatting(str); // math while (aux_match = str.match(/<(?:)math>(.*?)<\/math>/i)) { var math_md5 = hex_md5(aux_match[1]); str = str.replace(aux_match[0], f("<img src='?.png'>", Insta.conf.paths.math+math_md5)); } // Build a Mediawiki-formatted date string var date = new Date; var minutes = date.getUTCMinutes(); if (minutes < 10) minutes = '0' + minutes; var date = f("?:?, ? ? ? (UTC)", date.getUTCHours(), minutes, date.getUTCDate(), Insta.conf.locale.months[date.getUTCMonth()], date.getUTCFullYear()); // text formatting return str. // signatures replace(/~{5}(?!~)/g, date). replace(/~{4}(?!~)/g, Insta.conf.user.name+' '+date). replace(/~{3}(?!~)/g, Insta.conf.user.name). // [[:Category:...]], [[:Image:...]], etc... replace(RegExp('\\[\\[:((?:'+Insta.conf.locale.category+'|'+Insta.conf.locale.image+'|'+Insta.conf.wiki.interwiki+'):[^|]*?)\\]\\](\w*)','gi'), "<a href='"+Insta.conf.paths.articles+"$1'>$1$2</a>"). // remove straight category and interwiki tags replace(RegExp('\\[\\[(?:'+Insta.conf.locale.category+'|'+Insta.conf.wiki.interwiki+'):.*?\\]\\]','gi'),''). // [[:Category:...|Links]], [[:Image:...|Links]], etc... replace(RegExp('\\[\\[:((?:'+Insta.conf.locale.category+'|'+Insta.conf.locale.image+'|'+Insta.conf.wiki.interwiki+'):.*?)\\|([^\\]]+?)\\]\\](\\w*)','gi'), "<a href='"+Insta.conf.paths.articles+"$1'>$2$3</a>"). // [[/Relative links]] replace(/\[\[(\/[^|]*?)\]\]/g, f("<a href='?$1'>$1</a>", Insta.conf.baseUrl)). // [[/Replaced|Relative links]] replace(/\[\[(\/.*?)\|(.+?)\]\]/g, f("<a href='?$1'>$2</a>", Insta.conf.baseUrl)). // [[Common links]] replace(/\[\[([^|]*?)\]\](\w*)/g, f("<a href='?$1'>$1$2</a>", Insta.conf.paths.articles)). // [[Replaced|Links]] replace(/\[\[(.*?)\|([^\]]+?)\]\](\w*)/g, f("<a href='?$1'>$2$3</a>", Insta.conf.paths.articles)). // [[Stripped:Namespace|Namespace]] replace(/\[\[([^\]]*?:)?(.*?)( *\(.*?\))?\|\]\]/g, f("<a href='?$1$2$3'>$2</a>", Insta.conf.paths.articles)). // External links replace(/\[(https?|news|ftp|mailto|gopher|irc):(\/*)([^\]]*?) (.*?)\]/g, "<a class='external' href='$1:$2$3'>$4</a>"). replace(/\[http:\/\/(.*?)\]/g, "<a class='external' href='http://$1'>[#]</a>"). replace(/\[(news|ftp|mailto|gopher|irc):(\/*)(.*?)\]/g, "<a class='external' href='$1:$2$3'>$1:$2$3</a>"). replace(/(^| )(https?|news|ftp|mailto|gopher|irc):(\/*)([^ $]*[^.,!?;: $])/g, "$1<a class='external' href='$2:$3$4'>$2:$3$4</a>"). replace('__NOTOC__',''). replace('__NOEDITSECTION__',''); } function strip_inline_wiki(str) { return str .replace(/\[\[[^\]]*\|(.*?)\]\]/g,'$1') .replace(/\[\[(.*?)\]\]/g,'$1') .replace(/''(.*?)''/g,'$1'); } // begin parsing for (;remain();) if ($(/^(={1,6})(.*)\1(.*)$/)) { p=0 endl(f('<h?>?</h?>?', $r[1].length, parse_inline_nowiki($r[2]), $r[1].length, $r[3])) } else if ($(/^[*#:;]/)) { p=0 parse_list() } else if ($(' ')) { p=0 parse_pre() } else if ($('{|')) { p=0 parse_table() } else if ($(/^----+$/)) { p=0 endl('<hr>') } else if ($(Insta.BLOCK_IMAGE)) { p=0 parse_block_image() } else { // handle paragraphs if ($$('')) { if (p = (remain()>1 && ll[1]==(''))) endl('<p><br>') } else { if(!p) { ps('<p>') p=1 } ps(parse_inline_nowiki(ll[0]) + ' ') } sh(); } return o }; window.wiki2html=function(txt,baseurl) { Insta.conf.baseUrl=baseurl; return Insta.convert(txt); }; // ENDFILE: livepreview.js // STARTFILE: pageinfo.js //<NOLITE> function popupFilterPageSize(data) { return formatBytes(data.length); } function popupFilterCountLinks(data) { var num=countLinks(data); return String(num) + '&nbsp;' + ((num!=1)?popupString('wikiLinks'):popupString('wikiLink')); } function popupFilterCountImages(data) { var num=countImages(data); return String(num) + '&nbsp;' + ((num!=1)?popupString('images'):popupString('image')); } function popupFilterCountCategories(data) { var num=countCategories(data); return String(num) + '&nbsp;' + ((num!=1)?popupString('categories'):popupString('category')); } function popupFilterLastModified(data,download) { var lastmod=download.lastModified; var now=new Date(); var age=now-lastmod; if (lastmod && getValueOf('popupLastModified')) { return (tprintf('%s old', [formatAge(age)])).replace(RegExp(' ','g'), '&nbsp;'); } return ''; } function formatAge(age) { // coerce into a number var a=0+age, aa=a; var seclen = 1000; var minlen = 60*seclen; var hourlen = 60*minlen; var daylen = 24*hourlen; var weeklen = 7*daylen; var numweeks = (a-a%weeklen)/weeklen; a = a-numweeks*weeklen; var sweeks = addunit(numweeks, 'week'); var numdays = (a-a%daylen)/daylen; a = a-numdays*daylen; var sdays = addunit(numdays, 'day'); var numhours = (a-a%hourlen)/hourlen; a = a-numhours*hourlen; var shours = addunit(numhours,'hour'); var nummins = (a-a%minlen)/minlen; a = a-nummins*minlen; var smins = addunit(nummins, 'minute'); var numsecs = (a-a%seclen)/seclen; a = a-numsecs*seclen; var ssecs = addunit(numsecs, 'second'); if (aa > 4*weeklen) { return sweeks; } if (aa > weeklen) { return sweeks + ' ' + sdays; } if (aa > daylen) { return sdays + ' ' + shours; } if (aa > 6*hourlen) { return shours; } if (aa > hourlen) { return shours + ' ' + smins; } if (aa > 10*minlen) { return smins; } if (aa > minlen) { return smins + ' ' + ssecs; } return ssecs; } function addunit(num,str) { return '' + num + ' ' + ((num!=1) ? popupString(str+'s') : popupString(str)) ;} function runPopupFilters(list, data, download) { var ret=[]; for (var i=0; i<list.length; ++i) { if (list[i] && typeof list[i] == 'function') { var s=list[i](data, download, download.owner.article); if (s) { ret.push(s); } } } return ret; } function getPageInfo(data, download) { if (!data || data.length === 0) { return popupString('Empty page'); } var popupFilters=getValueOf('popupFilters') || []; var extraPopupFilters = getValueOf('extraPopupFilters') || []; var pageInfoArray = runPopupFilters(popupFilters.concat(extraPopupFilters), data, download); var pageInfo=pageInfoArray.join(', '); if (pageInfo !== '' ) { pageInfo = upcaseFirst(pageInfo); } return pageInfo; } // this could be improved! function countLinks(wikiText) { return wikiText.split('[[').length - 1; } // if N = # matches, n = # brackets, then // String.parenSplit(regex) intersperses the N+1 split elements // with Nn other elements. So total length is // L= N+1 + Nn = N(n+1)+1. So N=(L-1)/(n+1). function countImages(wikiText) { return (wikiText.parenSplit(pg.re.image).length - 1) / (pg.re.imageBracketCount + 1); } function countCategories(wikiText) { return (wikiText.parenSplit(pg.re.category).length - 1) / (pg.re.categoryBracketCount + 1); } function popupFilterStubDetect(data, download, article) { var counts=stubCount(data, article); if (counts.real) { return popupString('stub'); } if (counts.sect) { return popupString('section stub'); } return ''; } function popupFilterDisambigDetect(data, download, article) { if (getValueOf('popupOnlyArticleDabStub') && article.namespace()) { return ''; } return (isDisambig(data, article)) ? popupString('disambig') : ''; } function formatBytes(num) { return (num > 949) ? (Math.round(num/100)/10+popupString('kB')) : (num +'&nbsp;' + popupString('bytes')) ; } //</NOLITE> // ENDFILE: pageinfo.js // STARTFILE: titles.js /** @fileoverview Defines the {@link Title} class, and associated crufty functions. <code>Title</code> deals with article titles and their various forms. {@link Stringwrapper} is the parent class of <code>Title</code>, which exists simply to make things a little neater. */ /** Creates a new Stringwrapper. @constructor @class the Stringwrapper class. This base class is not really useful on its own; it just wraps various common string operations. */ function Stringwrapper() { /** Wrapper for this.toString().indexOf() @param {String} x @type integer */ this.indexOf=function(x){return this.toString().indexOf(x);}; /** Returns this.value. @type String */ this.toString=function(){return this.value;}; /** Wrapper for {@link String#parenSplit} applied to this.toString() @param {RegExp} x @type Array */ this.parenSplit=function(x){return this.toString().parenSplit(x);}; /** Wrapper for this.toString().substring() @param {String} x @param {String} y (optional) @type String */ this.substring=function(x,y){ if (typeof y=='undefined') { return this.toString().substring(x); } return this.toString().substring(x,y); }; /** Wrapper for this.toString().split() @param {String} x @type Array */ this.split=function(x){return this.toString().split(x);}; /** Wrapper for this.toString().replace() @param {String} x @param {String} y @type String */ this.replace=function(x,y){ return this.toString().replace(x,y); }; } /** Creates a new <code>Title</code>. @constructor @class The Title class. Holds article titles and converts them into various forms. Also deals with anchors, by which we mean the bits of the article URL after a # character, representing locations within an article. @param {String} value The initial value to assign to the article. This must be the canonical title (see {@link Title#value}. Omit this in the constructor and use another function to set the title if this is unavailable. */ function Title(val) { /** The canonical article title. This must be in UTF-8 with no entities, escaping or nasties. Also, underscores should be replaced with spaces. @type String @private */ this.value=null; /** The canonical form of the anchor. This should be exactly as it appears in the URL, i.e. with the .C3.0A bits in. @type String */ this.anchor=''; this.setUtf(val); } Title.prototype=new Stringwrapper(); /** Returns the canonical representation of the article title, optionally without anchor. @param {boolean} omitAnchor @fixme Decide specs for anchor @return String The article title and the anchor. */ Title.prototype.toString=function(omitAnchor) { return this.value + ( (!omitAnchor && this.anchor) ? '#' + this.anchorString() : '' ); }; Title.prototype.anchorString=function() { if (!this.anchor) { return ''; } var split=this.anchor.parenSplit(/((?:[.][0-9A-F]{2})+)/); var len=split.length; for (var j=1; j<len; j+=2) { // FIXME s/decodeURI/decodeURIComponent/g ? split[j]=decodeURIComponent(split[j].split('.').join('%')).split('_').join(' '); } return split.join(''); }; Title.prototype.urlAnchor=function() { var split=this.anchor.parenSplit('/((?:[%][0-9A-F]{2})+)/'); var len=split.length; for (var j=1; j<len; j+=2) { split[j]=split[j].split('%').join('.'); } return split.join(''); }; Title.prototype.anchorFromUtf=function(str) { this.anchor=encodeURIComponent(str).split('.').join('%2E').split('%').join('.'); }; Title.fromURL=function(h) { return new Title().fromURL(h); }; Title.prototype.fromURL=function(h) { if (typeof h != 'string') { this.value=null; return this; } // NOTE : playing with decodeURI, encodeURI, escape, unescape, // we seem to be able to replicate the IE borked encoding // IE doesn't do this new-fangled utf-8 thing. // and it's worse than that. // IE seems to treat the query string differently to the rest of the url // the query is treated as bona-fide utf8, but the first bit of the url is pissed around with // we fix up & for all browsers, just in case. var splitted=h.split('?'); splitted[0]=splitted[0].split('&').join('%26'); if (pg.flag.linksLikeIE6) { splitted[0]=encodeURI(decode_utf8(splitted[0])); } h=splitted.join('?'); var contribs=pg.re.contribs.exec(h); if (contribs !== null) { if (contribs[1]=='title=') { contribs[3]=contribs[3].split('+').join(' '); } var u=new Title(contribs[3]); this.setUtf(this.decodeNasties(pg.ns.user + ':' + u.stripNamespace())); return this; } var email=pg.re.email.exec(h); if (email !== null) { this.setUtf(this.decodeNasties(pg.ns.user + ':' + new Title(email[3]).stripNamespace())); return this; } var backlinks=pg.re.backlinks.exec(h); if (backlinks) { this.setUtf(this.decodeNasties(new Title(backlinks[3]))); return this; } // no more special cases to check -- // hopefully it's not a disguised user-related or specially treated special page var m=pg.re.main.exec(h); if(m===null) { this.value=null; } else { var fromBotInterface = /[?](.+[&])?title=/.test(h); if (fromBotInterface) { m[2]=m[2].split('+').join('_'); } var extracted = m[2] + (m[3] ? '#' + m[3] : ''); this.setUtf(this.decodeNasties(extracted)); } return this; }; Title.prototype.decodeNasties=function(txt) { var ret= this.decodeEscapes(decodeURI(txt)); ret = ret.replace(/[_ ]*$/, ''); return ret; }; Title.prototype.decodeEscapes=function(txt) { var split=txt.parenSplit(/((?:[%][0-9A-Fa-f]{2})+)/); var len=split.length; for (var i=1; i<len; i=i+2) { // FIXME is decodeURIComponent better? split[i]=unescape(split[i]); } return split.join(''); }; Title.fromAnchor=function(a) { return new Title().fromAnchor(a); }; Title.prototype.fromAnchor=function(a) { if (!a) { this.value=null; return this; } return this.fromURL(a.href); }; Title.fromWikiText=function(txt) { return new Title().fromWikiText(txt); }; Title.prototype.fromWikiText=function(txt) { // FIXME - testing needed if (!pg.flag.linksLikeIE6) { txt=myDecodeURI(txt); } this.setUtf(txt); return this; }; Title.prototype.hintValue=function(){ if(!this.value) { return ''; } return safeDecodeURI(this.value); }; //<NOLITE> Title.prototype.toUserName=function(withNs) { if (this.namespace() != pg.ns.user && this.namespace() != pg.ns.usertalk) { this.value=null; return; } this.value = (withNs ? pg.ns.user + ':' : '') + this.stripNamespace().split('/')[0]; }; Title.prototype.userName=function(withNs) { var t=(new Title(this.value)); t.toUserName(withNs); if (t.value) { return t; } return null; }; Title.prototype.toTalkPage=function() { // convert article to a talk page, or if we can't return null // or, in other words, return null if this ALREADY IS a talk page // and return the corresponding talk page otherwise if (this.value===null) { return null; } var talkRegex=namespaceListToRegex(pg.ns.talkList); if (talkRegex.exec(this.value)) { this.value=null; return null;} var nsReg=namespaceListToRegex(pg.ns.withTalkList); var splitted=this.value.parenSplit(nsReg); if (splitted.length<2) { this.value= (pg.ns.talkList[0]+':'+this.value).split(' ').join('_'); return this.value; } for (var i=0; i< pg.ns.withTalkList.length; ++i) { if (splitted[1]==pg.ns.withTalkList[i]) { splitted[1]=pg.ns.talkList[i]; this.value=splitted.join(':').substring(1).split(' ').join('_'); return this.value; } } this.value=null; return null; }; //</NOLITE> Title.prototype.namespace=function() { var n=this.value.indexOf(':'); if (n<0) { return ''; } var list=pg.ns.list; for (var i=0; i<list.length; ++i) { if (upcaseFirst(list[i]) == this.value.substring(0,n)) { return list[i]; } } return ''; }; //<NOLITE> Title.prototype.talkPage=function() { var t=new Title(this.value); t.toTalkPage(); if (t.value) { return t; } return null; }; Title.prototype.isTalkPage=function() { if (this.talkPage()===null) { return true; } return false; }; Title.prototype.toArticleFromTalkPage=function() { var talkRegex=namespaceListToRegex(pg.ns.talkList); var splitted=this.value.parenSplit(talkRegex); if (splitted.length < 2 || splitted[0].length > 0) { this.value=null; return null; } if (splitted[1]==pg.ns.talkList[0]) { splitted[1]=''; this.value=splitted.join(':').substring(2).split(' ').join('_'); return this.value; } for (var i=1; i< pg.ns.talkList.length; ++i) { if (splitted[1]==pg.ns.talkList[i] || splitted[1]==pg.ns.talkList[i].split(' ').join('_')) { splitted[1]=pg.ns.withTalkList[i]; this.value= splitted.join(':').substring(1).split(' ').join('_'); return this.value; } } this.value=null; return this.value; }; Title.prototype.articleFromTalkPage=function() { var t=new Title(this.value); t.toArticleFromTalkPage(); if (t.value) { return t; } return null; }; Title.prototype.articleFromTalkOrArticle=function() { var t=new Title(this.value); if ( t.toArticleFromTalkPage() ) { return t; } return this; }; Title.prototype.isIpUser=function() { return pg.re.ipUser.test(this.userName()); }; //</NOLITE> Title.prototype.stripNamespace=function(){ // returns a string, not a Title // this isn't very sophisticated // it just removes everything up to the final : // BUG: probably does silly things for images with colons in the name - check it out var list = this.value.split(':'); return list[list.length-1]; }; Title.prototype.setUtf=function(value){ if (!value) { this.value=''; return; } var anch=value.indexOf('#'); if(anch < 0) { this.value=value.split('_').join(' '); this.anchor=''; return; } this.value=value.substring(0,anch).split('_').join(' '); this.anchor=value.substring(anch+1); this.ns=null; // wait until namespace() is called }; Title.prototype.setUrl=function(urlfrag) { var anch=urlfrag.indexOf('#'); this.value=safeDecodeURI(urlfrag.substring(0,anch)); this.anchor=value.substring(anch+1); }; Title.prototype.append=function(x){ this.setUtf(this.value + x); }; Title.prototype.urlString=function(x) { x || ( x={} ); var v=this.toString(true); if (!x.omitAnchor && this.anchor) { v+= '#' + this.urlAnchor(); } if (!x.keepSpaces) { v=v.split(' ').join('_'); } return encodeURI(v).split('&').join('%26').split('?').join('%3F').split('+').join('%2B'); }; Title.prototype.removeAnchor=function() { return new Title(this.toString(true)); }; Title.prototype.toUrl=function() { return pg.wiki.titlebase + this.urlString(); }; function paramValue(param, url) { var s=url.parenSplit(RegExp('[?&]' + literalizeRegex(param) + '=([^?&]*)')); if (!url) { return null; } return s[1] || null; } function parseParams(url) { var ret={}; if (url.indexOf('?')==-1) { return ret; } var s=url.split('?').slice(1).join(); var t=s.split('&'); for (var i=0; i<t.length; ++i) { var z=t[i].split('='); z.push(null); ret[z[0]]=z[1]; } return ret; } // all sorts of stuff here // FIXME almost everything needs to be rewritten function oldidFromAnchor(a) { return paramValue('oldid', a.href); } //function diffFromAnchor(a) { return paramValue('diff', a.href); } function wikiMarkupToAddressFragment (str) { // for images var ret = safeDecodeURI(str); ret = ret.split(' ').join('_'); ret = encodeURI(ret); return ret; } // (a) myDecodeURI (first standard decodeURI, then pg.re.urlNoPopup) // (b) change spaces to underscores // (c) encodeURI (just the straight one, no pg.re.urlNoPopup) function myDecodeURI (str) { var ret; // FIXME decodeURIComponent?? try { ret=decodeURI(str.toString()); } catch (summat) { return str; } for (var i=0; i<pg.misc.decodeExtras.length; ++i) { var from=pg.misc.decodeExtras[i].from; var to=pg.misc.decodeExtras[i].to; ret=ret.split(from).join(to); } return ret; } function safeDecodeURI(str) { var ret=myDecodeURI(str); return ret || str; } /////////// // TESTS // /////////// //<NOLITE> function isIpUser(user) {return pg.re.ipUser.test(user);} function isDisambig(data, article) { if (!getValueOf('popupAllDabsStubs') && article.namespace()) { return false; } return ! article.isTalkPage() && pg.re.disambig.test(data); } function stubCount(data, article) { if (!getValueOf('popupAllDabsStubs') && article.namespace()) { return false; } var sectStub=0; var realStub=0; if (pg.re.stub.test(data)) { var s=data.parenSplit(pg.re.stub); for (var i=1; i<s.length; i=i+2) { if (s[i]) { ++sectStub; } else { ++realStub; } } } return { real: realStub, sect: sectStub }; } function isValidImageName(str){ // extend as needed... return ( str.indexOf('{') == -1 ); } function isInStrippableNamespace(article) { return ( findInArray( pg.ns.nonArticleList, article.namespace() ) > -1 ); } function isInMainNamespace(article) { return !isInStrippableNamespace(article); } function anchorContainsImage(a) { // iterate over children of anchor a // see if any are images if (a===null) { return false; } kids=a.childNodes; for (var i=0; i<kids.length; ++i) { if (kids[i].nodeName=='IMG') { return true; } } return false; } //</NOLITE> function isPopupLink(a) { // NB for performance reasons, TOC links generally return true // they should be stripped out later if (!markNopopupSpanLinks.done) { markNopopupSpanLinks(); } if (a.inNopopupSpan || a.className=='sortheader') { return false; } // FIXME is this faster inline? if (a.onmousedown || a.getAttribute('nopopup')) { return false; } var h=a.href; if (!pg.re.basenames.test(h)) { return false; } if ( !pg.re.urlNoPopup.test(h) ) { return true; } return ( (pg.re.email.test(h) || pg.re.contribs.test(h) || pg.re.backlinks.test(h)) && h.indexOf('&limit=') == -1 ); } function markNopopupSpanLinks() { var s=document.getElementsByTagName('span'); for (var i=0; i<s.length; ++i) { if (s[i].className && s[i].className.toLowerCase()=='nopopups') { var as=s[i].getElementsByTagName('a'); for (var j=0; j<as.length; ++j) { as[j].inNopopupSpan=true; } } } markNopopupSpanLinks.done=true; } // ENDFILE: titles.js // STARTFILE: cookies.js //<NOLITE> ////////////////////////////////////////////////// // Cookie handling // from http://www.quirksmode.org/js/cookies.html var Cookie= { create: function(name,value,days) { var expires; if (days) { var date = new Date(); date.setTime(date.getTime()+(days*24*60*60*1000)); expires = "; expires="+date.toGMTString(); } else { expires = ""; } document.cookie = name+"="+value+expires+"; path=/"; }, read: function(name) { var nameEQ = name + "="; var ca = document.cookie.split(';'); for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==' ') { c = c.substring(1,c.length); } if (c.indexOf(nameEQ) === 0) { return c.substring(nameEQ.length,c.length); } } return null; }, erase: function(name) { Cookie.create(name,"",-1); } }; //</NOLITE> // ENDFILE: cookies.js // STARTFILE: getpage.js ////////////////////////////////////////////////// // Wiki-specific downloading // // Schematic for a getWiki call // // getWiki->-getPageWithCaching // | // false | true // getPage<-[findPictureInCache]->-onComplete(a fake download) // \. // (async)->addPageToCache(download)->-onComplete(download) /** @todo {document} @param {Title} article @param {Function} onComplete @param {integer} oldid @param {Navapopup} owner */ function getWiki(article, onComplete, oldid, owner) { // set ctype=text/css to get around opera gzip bug var url = pg.wiki.titlebase + article.removeAnchor().urlString() + '&action=raw&ctype=text/css'; if (oldid || oldid===0 || oldid==='0') { url += '&oldid='+oldid; } url += '&maxage=0&smaxage=0'; getPageWithCaching(url, onComplete, owner); } // check cache to see if page exists function getPageWithCaching(url, onComplete, owner) { log('getPageWithCaching, url='+url); var i=findInPageCache(url); if (i > -1) { var d=fakeDownload(url, owner.idNumber, onComplete, pg.cache.pages[i].data, pg.cache.pages[i].lastModified, owner); } else { var d=getPage(url, onComplete, owner); if (d && owner && owner.addDownload) { owner.addDownload(d); d.owner=owner; } } } function getPage(url, onComplete, owner) { log('getPage'); var callback= function (d) { if (!d.aborted) {addPageToCache(d); onComplete(d);} }; return startDownload(url, owner.idNumber, callback); } function findInPageCache(url) { for (var i=0; i<pg.cache.pages.length; ++i) { if (url==pg.cache.pages[i].url) { return i; } } return -1; } function addPageToCache(download) { log('addPageToCache '+download.url); var page = {url: download.url, data: download.data, lastModified: download.lastModified}; return pg.cache.pages.push(page); } // ENDFILE: getpage.js // STARTFILE: md5-2.2alpha.js //<NOLITE> /* * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message * Digest Algorithm, as defined in RFC 1321. * Version 2.2-alpha Copyright (C) Paul Johnston 1999 - 2005 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet * Distributed under the BSD License * See http://pajhome.org.uk/crypt/md5 for more info. */ /* * Configurable variables. You may need to tweak these to be compatible with * the server-side, but the defaults work in most cases. */ var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */ var b64pad = ""; /* base-64 pad character. "=" for strict RFC compliance */ /* * These are the functions you'll usually want to call * They take string arguments and return either hex or base-64 encoded strings */ function hex_md5(s) { return rstr2hex(rstr_md5(str2rstr_utf8(s))); } function b64_md5(s) { return rstr2b64(rstr_md5(str2rstr_utf8(s))); } function any_md5(s, e) { return rstr2any(rstr_md5(str2rstr_utf8(s)), e); } function hex_hmac_md5(k, d) { return rstr2hex(rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d))); } function b64_hmac_md5(k, d) { return rstr2b64(rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d))); } function any_hmac_md5(k, d, e) { return rstr2any(rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d)), e); } /* * Perform a simple self-test to see if the VM is working */ function md5_vm_test() { return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72"; } /* * Calculate the MD5 of a raw string */ function rstr_md5(s) { return binl2rstr(binl_md5(rstr2binl(s), s.length * 8)); } /* * Calculate the HMAC-MD5, of a key and some data (raw strings) */ function rstr_hmac_md5(key, data) { var bkey = rstr2binl(key); if(bkey.length > 16) bkey = binl_md5(bkey, key.length * 8); var ipad = Array(16), opad = Array(16); for(var i = 0; i < 16; i++) { ipad[i] = bkey[i] ^ 0x36363636; opad[i] = bkey[i] ^ 0x5C5C5C5C; } var hash = binl_md5(ipad.concat(rstr2binl(data)), 512 + data.length * 8); return binl2rstr(binl_md5(opad.concat(hash), 512 + 128)); } /* * Convert a raw string to a hex string */ function rstr2hex(input) { var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef"; var output = ""; var x; for(var i = 0; i < input.length; i++) { x = input.charCodeAt(i); output += hex_tab.charAt((x >>> 4) & 0x0F) + hex_tab.charAt( x & 0x0F); } return output; } /* * Convert a raw string to a base-64 string */ function rstr2b64(input) { var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; var output = ""; var len = input.length; for(var i = 0; i < len; i += 3) { var triplet = (input.charCodeAt(i) << 16) | (i + 1 < len ? input.charCodeAt(i+1) << 8 : 0) | (i + 2 < len ? input.charCodeAt(i+2) : 0); for(var j = 0; j < 4; j++) { if(i * 8 + j * 6 > input.length * 8) output += b64pad; else output += tab.charAt((triplet >>> 6*(3-j)) & 0x3F); } } return output; } /* * Convert a raw string to an arbitrary string encoding */ function rstr2any(input, encoding) { var divisor = encoding.length; var remainders = Array(); var i, q, x, quotient; /* Convert to an array of 16-bit big-endian values, forming the dividend */ var dividend = Array(input.length / 2); for(i = 0; i < dividend.length; i++) { dividend[i] = (input.charCodeAt(i * 2) << 8) | input.charCodeAt(i * 2 + 1); } /* * Repeatedly perform a long division. The binary array forms the dividend, * the length of the encoding is the divisor. Once computed, the quotient * forms the dividend for the next step. We stop when the dividend is zero. * All remainders are stored for later use. */ while(dividend.length > 0) { quotient = Array(); x = 0; for(i = 0; i < dividend.length; i++) { x = (x << 16) + dividend[i]; q = Math.floor(x / divisor); x -= q * divisor; if(quotient.length > 0 || q > 0) quotient[quotient.length] = q; } remainders[remainders.length] = x; dividend = quotient; } /* Convert the remainders to the output string */ var output = ""; for(i = remainders.length - 1; i >= 0; i--) output += encoding.charAt(remainders[i]); return output; } /* * Encode a string as utf-8. * For efficiency, this assumes the input is valid utf-16. */ function str2rstr_utf8(input) { var output = ""; var i = -1; var x, y; while(++i < input.length) { /* Decode utf-16 surrogate pairs */ x = input.charCodeAt(i); y = i + 1 < input.length ? input.charCodeAt(i + 1) : 0; if(0xD800 <= x && x <= 0xDBFF && 0xDC00 <= y && y <= 0xDFFF) { x = 0x10000 + ((x & 0x03FF) << 10) + (y & 0x03FF); i++; } /* Encode output as utf-8 */ if(x <= 0x7F) output += String.fromCharCode(x); else if(x <= 0x7FF) output += String.fromCharCode(0xC0 | ((x >>> 6 ) & 0x1F), 0x80 | ( x & 0x3F)); else if(x <= 0xFFFF) output += String.fromCharCode(0xE0 | ((x >>> 12) & 0x0F), 0x80 | ((x >>> 6 ) & 0x3F), 0x80 | ( x & 0x3F)); else if(x <= 0x1FFFFF) output += String.fromCharCode(0xF0 | ((x >>> 18) & 0x07), 0x80 | ((x >>> 12) & 0x3F), 0x80 | ((x >>> 6 ) & 0x3F), 0x80 | ( x & 0x3F)); } return output; } /* * Encode a string as utf-16 */ function str2rstr_utf16le(input) { var output = ""; for(var i = 0; i < input.length; i++) output += String.fromCharCode( input.charCodeAt(i) & 0xFF, (input.charCodeAt(i) >>> 8) & 0xFF); return output; } function str2rstr_utf16be(input) { var output = ""; for(var i = 0; i < input.length; i++) output += String.fromCharCode((input.charCodeAt(i) >>> 8) & 0xFF, input.charCodeAt(i) & 0xFF); return output; } /* * Convert a raw string to an array of little-endian words * Characters >255 have their high-byte silently ignored. */ function rstr2binl(input) { var output = Array(input.length >> 2); for(var i = 0; i < output.length; i++) output[i] = 0; for(var i = 0; i < input.length * 8; i += 8) output[i>>5] |= (input.charCodeAt(i / 8) & 0xFF) << (i%32); return output; } /* * Convert an array of little-endian words to a string */ function binl2rstr(input) { var output = ""; for(var i = 0; i < input.length * 32; i += 8) output += String.fromCharCode((input[i>>5] >>> (i % 32)) & 0xFF); return output; } /* * Calculate the MD5 of an array of little-endian words, and a bit length. */ function binl_md5(x, len) { /* append padding */ x[len >> 5] |= 0x80 << ((len) % 32); x[(((len + 64) >>> 9) << 4) + 14] = len; var a = 1732584193; var b = -271733879; var c = -1732584194; var d = 271733878; for(var i = 0; i < x.length; i += 16) { var olda = a; var oldb = b; var oldc = c; var oldd = d; a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936); d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586); c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819); b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330); a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897); d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426); c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341); b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983); a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416); d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417); c = md5_ff(c, d, a, b, x[i+10], 17, -42063); b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162); a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682); d = md5_ff(d, a, b, c, x[i+13], 12, -40341101); c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290); b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329); a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510); d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632); c = md5_gg(c, d, a, b, x[i+11], 14, 643717713); b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302); a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691); d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083); c = md5_gg(c, d, a, b, x[i+15], 14, -660478335); b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848); a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438); d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690); c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961); b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501); a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467); d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784); c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473); b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734); a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558); d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463); c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562); b = md5_hh(b, c, d, a, x[i+14], 23, -35309556); a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060); d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353); c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632); b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640); a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174); d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222); c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979); b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189); a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487); d = md5_hh(d, a, b, c, x[i+12], 11, -421815835); c = md5_hh(c, d, a, b, x[i+15], 16, 530742520); b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651); a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844); d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415); c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905); b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055); a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571); d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606); c = md5_ii(c, d, a, b, x[i+10], 15, -1051523); b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799); a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359); d = md5_ii(d, a, b, c, x[i+15], 10, -30611744); c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380); b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649); a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070); d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379); c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259); b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551); a = safe_add(a, olda); b = safe_add(b, oldb); c = safe_add(c, oldc); d = safe_add(d, oldd); } return Array(a, b, c, d); } /* * These functions implement the four basic operations the algorithm uses. */ function md5_cmn(q, a, b, x, s, t) { return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b); } function md5_ff(a, b, c, d, x, s, t) { return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t); } function md5_gg(a, b, c, d, x, s, t) { return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t); } function md5_hh(a, b, c, d, x, s, t) { return md5_cmn(b ^ c ^ d, a, b, x, s, t); } function md5_ii(a, b, c, d, x, s, t) { return md5_cmn(c ^ (b | (~d)), a, b, x, s, t); } /* * Add integers, wrapping at 2^32. This uses 16-bit operations internally * to work around bugs in some JS interpreters. */ function safe_add(x, y) { var lsw = (x & 0xFFFF) + (y & 0xFFFF); var msw = (x >> 16) + (y >> 16) + (lsw >> 16); return (msw << 16) | (lsw & 0xFFFF); } /* * Bitwise rotate a 32-bit number to the left. */ function bit_rol(num, cnt) { return (num << cnt) | (num >>> (32 - cnt)); } //</NOLITE> // ENDFILE: md5-2.2alpha.js // STARTFILE: parensplit.js ////////////////////////////////////////////////// // parenSplit // String.prototype.parenSplit should do what ECMAscript says // String.prototype.split does, interspersing paren matches between // the split elements if (String('abc'.split(/(b)/))!='a,b,c') { // broken String.split, e.g. konq, IE String.prototype.parenSplit=function (re) { re=nonGlobalRegex(re); var s=this; var m=re.exec(s); var ret=[]; while (m && s) { // without the following loop, we have // 'ab'.parenSplit(/a|(b)/) != 'ab'.split(/a|(b)/) for(var i=0; i<m.length; ++i) { if (typeof m[i]=='undefined') m[i]=''; } ret.push(s.substring(0,m.index)); ret = ret.concat(m.slice(1)); s=s.substring(m.index + m[0].length); m=re.exec(s); } ret.push(s); return ret; }; } else { String.prototype.parenSplit=function (re) { return this.split(re); }; String.prototype.parenSplit.isNative=true; } function nonGlobalRegex(re) { var s=re.toString(); flags=''; for (var j=s.length; s.charAt(j) != '/'; --j) { if (s.charAt(j) != 'g') { flags += s.charAt(j); } } var t=s.substring(1,j); return RegExp(t,flags); } // ENDFILE: parensplit.js // STARTFILE: tools.js // IE madness with encoding // ======================== // // suppose throughout that the page is in utf8, like wikipedia // // if a is an anchor DOM element and a.href should consist of // // http://host.name.here/wiki/foo?bar=baz // // then IE gives foo as "latin1-encoded" utf8; we have foo = decode_utf8(decodeURI(foo_ie)) // but IE gives bar=baz correctly as plain utf8 // // --------------------------------- // // IE's xmlhttp doesn't understand utf8 urls. Have to use encodeURI here. // // --------------------------------- // // summat else // Source: http://aktuell.de.selfhtml.org/artikel/javascript/utf8b64/utf8.htm //<NOLITE> function encode_utf8(rohtext) { // dient der Normalisierung des Zeilenumbruchs rohtext = rohtext.replace(/\r\n/g,"\n"); var utftext = ""; for(var n=0; n<rohtext.length; n++) { // ermitteln des Unicodes des aktuellen Zeichens var c=rohtext.charCodeAt(n); // alle Zeichen von 0-127 => 1byte if (c<128) utftext += String.fromCharCode(c); // alle Zeichen von 127 bis 2047 => 2byte else if((c>127) && (c<2048)) { utftext += String.fromCharCode((c>>6)|192); utftext += String.fromCharCode((c&63)|128);} // alle Zeichen von 2048 bis 66536 => 3byte else { utftext += String.fromCharCode((c>>12)|224); utftext += String.fromCharCode(((c>>6)&63)|128); utftext += String.fromCharCode((c&63)|128);} } return utftext; } function getJsObj(json) { var jsobj; try { eval('jsobj='+json); return jsobj; } catch (someError) { log('Something went wrong with getJsobj, json='+json); return 1; } } function anyChild(obj) { for (var p in obj) { return obj[p]; } return null; } //</NOLITE> function decode_utf8(utftext) { var plaintext = ""; var i=0, c=0, c1=0, c2=0; // while-Schleife, weil einige Zeichen uebersprungen werden while(i<utftext.length) { c = utftext.charCodeAt(i); if (c<128) { plaintext += String.fromCharCode(c); i++;} else if((c>191) && (c<224)) { c2 = utftext.charCodeAt(i+1); plaintext += String.fromCharCode(((c&31)<<6) | (c2&63)); i+=2;} else { c2 = utftext.charCodeAt(i+1); c3 = utftext.charCodeAt(i+2); plaintext += String.fromCharCode(((c&15)<<12) | ((c2&63)<<6) | (c3&63)); i+=3;} } return plaintext; } function upcaseFirst(str) { if (typeof str != typeof '' || str=='') return ''; return str.charAt(0).toUpperCase() + str.substring(1); } function findInArray(arr, foo) { if (!arr || !arr.length) { return -1; } var len=arr.length; for (var i=0; i<len; ++i) { if (arr[i]==foo) { return i; } } return -1; } function nextOne (array, value) { // NB if the array has two consecutive entries equal // then this will loop on successive calls var i=findInArray(array, value); if (i<0) { return null; } return array[i+1]; } function literalizeRegex(str){ return str.replace(RegExp('([-.|()\\+?*^${}\\[\\]])', 'g'), '\\$1'); } String.prototype.entify=function() { //var shy='&shy;'; return this.split('&').join('&amp;').split('<').join('&lt;').split('>').join('&gt;'/*+shy*/).split('"').join('&quot;'); }; function findThis(array, value) { if (typeof array.length == 'undefined') { return null; } for (var i=0; i<array.length; ++i) { if (array[i]==value) { return i; } } return null; } function removeNulls(list) { var ret=[]; for (var i=0; i<list.length; ++i) { if (list[i]) { ret.push(list[i]); } } return ret; } function joinPath(list) { return removeNulls(list).join('/'); } function simplePrintf(str, subs) { if (!str || !subs) { return str; } var ret=[]; var s=str.parenSplit(/(%s|\$[0-9]+)/); var i=0; do { ret.push(s.shift()); if ( !s.length ) { break; } var cmd=s.shift(); if (cmd == '%s') { if ( i < subs.length ) { ret.push(subs[i]); } else { ret.push(cmd); } ++i; } else { var j=parseInt( cmd.replace('$', ''), 10 ) - 1; if ( j > -1 && j < subs.length ) { ret.push(subs[j]); } else { ret.push(cmd); } } } while (s.length > 0); return ret.join(''); } function max(a,b){return a<b ? b : a;} function min(a,b){return a>b ? b : a;} function isString(x) { return (typeof x === 'string' || x instanceof String); } //function isNumber(x) { return (typeof x === 'number' || x instanceof Number); } function isRegExp(x) { return x instanceof RegExp; } function isArray (x) { return x instanceof Array; } function isObject(x) { return x instanceof Object; } function isFunction(x) { return !isRegExp(x) && (typeof x === 'function' || x instanceof Function); } function repeatString(s,mult) { var ret=''; for (var i=0; i<mult; ++i) { ret += s; } return ret; } function zeroFill(s, min) { min = min || 2; var t=s.toString(); return repeatString('0', min - t.length) + t; } function map(f, o) { if (isArray(o)) { return map_array(f,o); } return map_object(f,o); } function map_array(f,o) { var ret=[]; for (var i=0; i<o.length; ++i) { ret.push(f(o[i])); } return ret; } function map_object(f,o) { var ret={}; for (var i in o) { ret[o]=f(o[i]); } return ret; } // ENDFILE: tools.js // STARTFILE: dab.js //<NOLITE> ////////////////////////////////////////////////// // Dab-fixing code // function retargetDab(newTarget, oldTarget, friendlyCurrentArticleName, titleToEdit) { log('retargetDab: newTarget='+newTarget + ' oldTarget=' + oldTarget); return changeLinkTargetLink( {newTarget: newTarget, text: newTarget.split(' ').join('&nbsp;'), hint: tprintf('disambigHint', [newTarget]), summary: simplePrintf( getValueOf('popupFixDabsSummary'), [friendlyCurrentArticleName, newTarget ]), clickButton: 'wpDiff', minor: true, oldTarget: oldTarget, watch: getValueOf('popupWatchDisambiggedPages'), title: titleToEdit}); } function listLinks(wikitext, oldTarget, titleToEdit) { // mediawiki strips trailing spaces, so we do the same // testcase: http://en.wikipedia.org/w/index.php?title=Radial&oldid=97365633 var reg=RegExp('\\[\\[([^|]*?) *(\\||\\]\\])', 'gi'); var ret=[]; var splitted=wikitext.parenSplit(reg); // ^[a-z]+ should match interwiki links, hopefully (case-insensitive) // and ^[a-z]* should match those and [[:Category...]] style links too var omitRegex=RegExp('^[a-z]*:|^[Ss]pecial:|^[Ii]mage|^[Cc]ategory'); var friendlyCurrentArticleName= oldTarget.toString(); for (var i=1; i<splitted.length; i=i+3) { if (typeof splitted[i] == typeof 'string' && splitted[i].length>0 && !omitRegex.test(splitted[i])) { ret.push( retargetDab(splitted[i], oldTarget, friendlyCurrentArticleName, titleToEdit) ); } /* if */ } /* for loop */ ret = rmDupesFromSortedList(ret.sort()); var wikTarget='wiktionary:' + friendlyCurrentArticleName.replace( RegExp('^(.+)\\s+[(][^)]+[)]\\s*$'), '$1' ); ret.push( retargetDab(wikTarget, oldTarget, friendlyCurrentArticleName, titleToEdit) ); ret.push(changeLinkTargetLink( { newTarget: null, text: popupString('remove this link').split(' ').join('&nbsp;'), hint: popupString("remove all links to this disambig page from this article"), clickButton: "wpDiff", oldTarget: oldTarget, summary: simplePrintf(getValueOf('popupRmDabLinkSummary'), [friendlyCurrentArticleName]), watch: getValueOf('popupWatchDisambiggedPages'), title: titleToEdit })); return ret; } function rmDupesFromSortedList(list) { var ret=[]; for (var i=0; i<list.length; ++i) { if (ret.length===0 || list[i]!=ret[ret.length-1]) { ret.push(list[i]); } } return ret; } function makeFixDab(data, navpop) { // grab title from parent popup if there is one; default exists in changeLinkTargetLink var titleToEdit=(navpop.parentPopup && navpop.parentPopup.article.toString()); var list=listLinks(data, navpop.originalArticle, titleToEdit); if (list.length===0) { log('listLinks returned empty list'); return null; } var html='<hr>' + popupString('Click to disambiguate this link to:') + '<br>'; html+=list.join(', '); return html; } function makeFixDabs(wikiText, navpop) { if (getValueOf('popupFixDabs') && isDisambig(wikiText, navpop.article) && Title.fromURL(location.href).namespace() != pg.ns.special && navpop.article.talkPage() ) { setPopupHTML(makeFixDab(wikiText, navpop), 'popupFixDab', navpop.idNumber); } } function popupRedlinkHTML(article) { return changeLinkTargetLink( { newTarget: null, text: popupString('remove this link').split(' ').join('&nbsp;'), hint: popupString("remove all links to this page from this article"), clickButton: "wpDiff", oldTarget: article.toString(), summary: simplePrintf(getValueOf('popupRedlinkSummary'), [article.toString()])}); } //</NOLITE> // ENDFILE: dab.js // STARTFILE: htmloutput.js function appendPopupContent(obj, elementId, popupId, onSuccess) { return setPopupHTML(obj, elementId, popupId, onSuccess, true); } // this has to use a timer loop as we don't know if the DOM element exists when we want to set the text function setPopupHTML (str, elementId, popupId, onSuccess, append) { if (elementId=='popupPreview') { } if (typeof popupId === 'undefined') { //console.error('popupId is not defined in setPopupHTML, html='+str.substring(0,100)); popupId = pg.idNumber; } var popupElement=document.getElementById(elementId+popupId); if (popupElement) { if (!append) { popupElement.innerHTML=''; } if (isString(str)) { popupElement.innerHTML+=str; } else { popupElement.appendChild(str); } if (onSuccess) { onSuccess(); } setTimeout(checkPopupPosition, 100); return true; } else { // call this function again in a little while... setTimeout(function(){ setPopupHTML(str,elementId,popupId,onSuccess); }, 600); } return null; } //<NOLITE> function setImageStatus(str, id) {return; } // setPopupHTML(str, 'popupImageStatus', id);} function setPopupTrailer(str,id) {return setPopupHTML(str, 'popupData', id);} //</NOLITE> function fillEmptySpans(args) { return fillEmptySpans2(args); } // args.navpopup is mandatory // optional: args.redir, args.redirTarget // FIXME: ye gods, this is ugly stuff function fillEmptySpans2(args) { // if redir is present and true then redirTarget is mandatory var redir=true; if (typeof args != 'object' || typeof args.redir == 'undefined' || !args.redir) { redir=false; } var a=args.navpopup.parentAnchor; var article, hint=null, oldid=null, params={}; if (redir && typeof args.redirTarget == typeof {}) { article=args.redirTarget; //hint=article.hintValue(); } else { article=(new Title()).fromAnchor(a); hint=a.originalTitle || article.hintValue(); params=parseParams(a.href); oldid=(getValueOf('popupHistoricalLinks')) ? params.oldid : null; rcid=params.rcid; } var x={ article:article, hint: hint, oldid: oldid, rcid: rcid, navpop:args.navpopup, params:params }; var structure=pg.structures[getValueOf('popupStructure')]; if (typeof structure != 'object') { setPopupHTML('popupError', 'Unknown structure (this should never happen): '+ pg.option.popupStructure, args.navpopup.idNumber); return; } var spans=flatten(pg.misc.layout); var numspans = spans.length; var redirs=pg.misc.redirSpans; for (var i=0; i<numspans; ++i) { var f=findThis(redirs, spans[i]); //log('redir='+redir+', f='+f+', spans[i]='+spans[i]); if ( (f!==null && !redir) || (f===null && redir) ) { //log('skipping this set of the loop'); continue; } var structurefn=structure[spans[i]]; var setfn = setPopupHTML; if (getValueOf('popupActiveNavlinks') && spans[i].indexOf('popupTopLinks')==0) { setfn = setPopupTipsAndHTML; } switch (typeof structurefn) { case 'function': //log('running '+spans[i]+'({article:'+x.article+', hint:'+x.hint+', oldid: '+x.oldid+'})'); setfn(structurefn(x), spans[i], args.navpopup.idNumber); break; case 'string': setfn(structurefn, spans[i], args.navpopup.idNumber); break; default: errlog('unknown thing with label '+spans[i]); break; } } } // flatten an array function flatten(list, start) { var ret=[]; if (typeof start == 'undefined') { start=0; } for (var i=start; i<list.length; ++i) { if (typeof list[i] == typeof []) { return ret.concat(flatten(list[i])).concat(flatten(list, i+1)); } else { ret.push(list[i]); } } return ret; } // Generate html for whole popup function popupHTML (a) { getValueOf('popupStructure'); var structure=pg.structures[pg.option.popupStructure]; if (typeof structure != 'object') { //return 'Unknown structure: '+pg.option.popupStructure; // override user choice pg.option.popupStructure=pg.optionDefault.popupStructure; return popupHTML(a); } if (typeof structure.popupLayout != 'function') { return 'Bad layout'; } pg.misc.layout=structure.popupLayout(); if (typeof structure.popupRedirSpans == 'function') { pg.misc.redirSpans=structure.popupRedirSpans(); } else { pg.misc.redirSpans=[]; } return makeEmptySpans(pg.misc.layout, a.navpopup); } function makeEmptySpans (list, navpop) { var ret=''; for (var i=0; i<list.length; ++i) { if (typeof list[i] == typeof '') { ret += emptySpanHTML(list[i], navpop.idNumber, 'div'); } else if (typeof list[i] == typeof [] && list[i].length > 0 ) { ret = ret.parenSplit(RegExp('(</[^>]*?>$)')).join(makeEmptySpans(list[i], navpop)); } else if (typeof list[i] == typeof {} && list[i].nodeType ) { ret += emptySpanHTML(list[i].name, navpop.idNumber, list[i].nodeType); } } return ret; } function emptySpanHTML(name, id, tag, classname) { tag = tag || 'span'; if (!classname) { classname = emptySpanHTML.classAliases[name]; } classname = classname || name; if (name == getValueOf('popupDragHandle')) { classname += ' popupDragHandle'; } return simplePrintf('<%s id="%s" class="%s"></%s>', [tag, name + id, classname, tag]); } emptySpanHTML.classAliases={ 'popupSecondPreview': 'popupPreview' }; // generate html for popup image // <a id="popupImageLinkn"><img id="popupImagen"> // where n=idNumber function imageHTML(article, idNumber) { return simplePrintf('<a id="popupImageLink$1">' + '<img align="right" valign="top" id="popupImg$1" style="display: none;"></img>' + '</a>', [ idNumber ]); } function popTipsSoonFn(id, when, popData) { when || ( when=250 ); var popTips=function(){ setupTooltips(document.getElementById(id), false, true, popData); }; return function() { setTimeout( popTips, when, popData ); }; } function setPopupTipsAndHTML(html, divname, idnumber, popData) { setPopupHTML(html, divname, idnumber, getValueOf('popupSubpopups') ? popTipsSoonFn(divname + idnumber, null, popData) : null); } // ENDFILE: htmloutput.js // STARTFILE: mouseout.js ////////////////////////////////////////////////// // fuzzy checks function fuzzyCursorOffMenus(x,y, fuzz, parent) { if (!parent) { return null; } var uls=parent.getElementsByTagName('ul'); for (var i=0; i<uls.length; ++i) { if (uls[i].className=='popup_menu') { if (uls[i].offsetWidth > 0) return false; } // else {document.title+='.';} } return true; } function checkPopupPosition () { // stop the popup running off the right of the screen // FIXME avoid pg.current.link pg.current.link && pg.current.link.navpopup && pg.current.link.navpopup.limitHorizontalPosition(); } function mouseOutWikiLink () { if (!window.popupsReady || !window.popupsReady()) { return; } //console ('mouseOutWikiLink'); var a=this; if (a.navpopup==null) return; if ( ! a.navpopup.isVisible() ) { a.navpopup.banish(); return; } Navpopup.tracker.addHook(posCheckerHook(a.navpopup)); } function posCheckerHook(navpop) { return function() { if (!navpop.isVisible()) { return true; /* remove this hook */ } if (Navpopup.tracker.dirty) { return false; } var x=Navpopup.tracker.x, y=Navpopup.tracker.y; var mouseOverNavpop = navpop.isWithin(x,y,navpop.fuzz, navpop.mainDiv) || !fuzzyCursorOffMenus(x,y,navpop.fuzz, navpop.mainDiv); // FIXME it'd be prettier to do this internal to the Navpopup objects var t=getValueOf('popupHideDelay'); if (t) { t = t * 1000; } if (!t) { if(!mouseOverNavpop) { navpop.banish(); return true; /* remove this hook */ } return false; } // we have a hide delay set var d=+(new Date()); if ( !navpop.mouseLeavingTime ) { navpop.mouseLeavingTime = d; return false; } if ( mouseOverNavpop ) { navpop.mouseLeavingTime=null; return false; } if (d - navpop.mouseLeavingTime > t) { navpop.mouseLeavingTime=null; navpop.banish(); return true; /* remove this hook */ } return false; }; } function runStopPopupTimer(navpop) { // at this point, we should have left the link but remain within the popup // so we call this function again until we leave the popup. if (!navpop.stopPopupTimer) { navpop.stopPopupTimer=setInterval(posCheckerHook(navpop), 500); navpop.addHook(function(){clearInterval(navpop.stopPopupTimer);}, 'hide', 'before'); } } // ENDFILE: mouseout.js // STARTFILE: previewmaker.js /** @fileoverview Defines the {@link Previewmaker} object, which generates short previews from wiki markup. */ /** Creates a new Previewmaker @constructor @class The Previewmaker class. Use an instance of this to generate short previews from Wikitext. @param {String} wikiText The Wikitext source of the page we wish to preview. @param {String} baseUrl The url we should prepend when creating relative urls. @param {Navpopup} owner The navpop associated to this preview generator */ function Previewmaker(wikiText, baseUrl, owner) { /** The wikitext which is manipulated to generate the preview. */ this.originalData=wikiText; this.setData(); this.baseUrl=baseUrl; this.owner=owner; this.maxCharacters=getValueOf('popupMaxPreviewCharacters'); this.maxSentences=getValueOf('popupMaxPreviewSentences'); } Previewmaker.prototype.setData=function() { var maxSize=max(10000, 2*this.maxCharacters); this.data=this.originalData.substring(0,maxSize); }; /** Remove HTML comments @private */ Previewmaker.prototype.killComments = function () { // this also kills trailing spaces and one trailing newline, eg [[diamyo]] this.data=this.data.replace(RegExp('<!--[\\s\\S]*?--> *\\n?', 'g'), ''); }; /** @private */ Previewmaker.prototype.killDivs = function () { // say goodbye, divs (can be nested, so use * not *?) this.data=this.data.replace(RegExp('< *div[^>]* *>[\\s\\S]*?< */ *div *>', 'gi'), ''); }; /** @private */ Previewmaker.prototype.killGalleries = function () { this.data=this.data.replace(RegExp('< *gallery[^>]* *>[\\s\\S]*?< */ *gallery *>', 'gi'), ''); }; /** @private */ Previewmaker.prototype.kill = function(opening, closing, subopening, subclosing, repl) { var oldk=this.data; var k=this.killStuff(this.data, opening, closing, subopening, subclosing, repl); while (k.length < oldk.length) { oldk=k; k=this.killStuff(k, opening, closing, subopening, subclosing, repl); } this.data=k; }; /** @private */ Previewmaker.prototype.killStuff = function (txt, opening, closing, subopening, subclosing, repl) { var op=this.makeRegexp(opening); var cl=this.makeRegexp(closing, '^'); var sb=subopening ? this.makeRegexp(subopening, '^') : null; var sc=subclosing ? this.makeRegexp(subclosing, '^') : cl; if (!op || !cl) { alert('Navigation Popups error: op or cl is null! something is wrong.'); return; } if (!op.test(txt)) { return txt; } var ret=''; var opResult = op.exec(txt); ret = txt.substring(0,opResult.index); txt=txt.substring(opResult.index+opResult[0].length); var depth = 1; while (txt.length > 0) { var removal=0; if (depth==1 && cl.test(txt)) { depth--; removal=cl.exec(txt)[0].length; } else if (depth > 1 && sc.test(txt)) { depth--; removal=sc.exec(txt)[0].length; }else if (sb && sb.test(txt)) { depth++; removal=sb.exec(txt)[0].length; } if ( !removal ) { removal = 1; } txt=txt.substring(removal); if (depth==0) { break; } } return ret + (repl || '') + txt; }; /** @private */ Previewmaker.prototype.makeRegexp = function (x, prefix, suffix) { prefix = prefix || ''; suffix = suffix || ''; var reStr=''; var flags=''; if (isString(x)) { reStr=prefix + literalizeRegex(x) + suffix; } else if (isRegExp(x)) { var s=x.toString().substring(1); var sp=s.split('/'); flags=sp[sp.length-1]; sp[sp.length-1]=''; s=sp.join('/'); s=s.substring(0,s.length-1); reStr= prefix + s + suffix; } else { log ('makeRegexp failed'); } log ('makeRegexp: got reStr=' + reStr + ', flags=' + flags); return RegExp(reStr, flags); }; /** @private */ Previewmaker.prototype.killBoxTemplates = function () { // taxobox removal... in fact, there's a saudiprincebox_begin, so let's be more general // also, have float_begin, ... float_end this.kill(RegExp('[{][{][^{}\\s|]*?(float|box)[_ ](begin|start)', 'i'), /[}][}]\s*/, '{{'); // infoboxes etc // from [[User:Zyxw/popups.js]]: kill frames too this.kill(RegExp('[{][{][^{}\\s|]*?(infobox|elementbox|frame)[_ ]', 'i'), /[}][}]\s*/, '{{'); }; /** @private */ Previewmaker.prototype.killTemplates = function () { this.kill('{{', '}}', '{', '}', ' '); }; /** @private */ Previewmaker.prototype.killTables = function () { // tables are bad, too // this can be slow, but it's an inprovement over a browser hang // torture test: [[Comparison_of_Intel_Central_Processing_Units]] this.kill('{|', /[|]}\s*/, '{|'); this.kill(/<table.*?>/i, /<\/table.*?>/i, /<table.*?>/i); // remove lines starting with a pipe for the hell of it (?) this.data=this.data.replace(RegExp('^[|].*$', 'mg'), ''); }; /** @private */ Previewmaker.prototype.killImages = function () { // images and categories are a nono this.kill(RegExp('[[][[]\\s*(' + pg.ns.image + '|' + pg.ns.category + ')\\s*:', 'i'), /\]\]\s*/, '[', ']'); }; /** @private */ Previewmaker.prototype.killHTML = function () { // kill <ref ...>...</ref> this.kill(/<ref\b.*?>/i, /<\/ref>/i); // let's also delete entire lines starting with <. it's worth a try. this.data=this.data.replace(RegExp('(^|\\n) *<.*', 'g'), '\n'); // and those pesky html tags, but not <nowiki> or <blockquote> var splitted=this.data.parenSplit(/(<.*?>)/); var len=splitted.length; for (var i=1; i<len; i=i+2) { switch (splitted[i]) { case '<nowiki>': case '</nowiki>': break; default: if (! /^< *\/? *blockquote\b/i.test(splitted[i])) { splitted[i]=''; } } } this.data=splitted.join(''); }; /** @private */ Previewmaker.prototype.killChunks = function() { // heuristics alert // chunks of italic text? you crazy, man? var italicChunkRegex=new RegExp ("((^|\\n)\\s*:*\\s*''[^']([^']|'''|'[^']){20}(.|\\n[^\\n])*''[.!?\\s]*\\n)+", 'g'); // keep stuff separated, though, so stick in \n (fixes [[Union Jack]]? this.data=this.data.replace(italicChunkRegex, '\n'); }; /** @private */ Previewmaker.prototype.mopup = function () { // we simply *can't* be doing with horizontal rules right now this.data=this.data.replace(RegExp('^-{4,}','mg'),''); // no indented lines this.data=this.data.replace(RegExp('(^|\\n) *:[^\\n]*','g'), ''); // replace __TOC__, __NOTOC__ and whatever else there is // this'll probably do this.data=this.data.replace(RegExp('^__[A-Z_]*__ *$', 'gmi'),''); }; /** @private */ Previewmaker.prototype.firstBit = function () { // dont't be givin' me no subsequent paragraphs, you hear me? /// first we "normalize" section headings, removing whitespace after, adding before var d=this.data; if (getValueOf('popupPreviewCutHeadings')) { this.data=this.data.replace(RegExp('\\s*(==+[^=]*==+)\\s*', 'g'), '\n\n$1 '); /// then we want to get rid of paragraph breaks whose text ends badly this.data=this.data.replace(RegExp('([:;]) *\\n{2,}', 'g'), '$1\n'); this.data=this.data.replace(RegExp('^[\\s\\n]*'), ''); stuff=(RegExp('^([^\\n]|\\n[^\\n\\s])*')).exec(this.data); if (stuff) { d = stuff[0]; } if (!getValueOf('popupPreviewFirstParOnly')) { d = this.data; } /// now put \n\n after sections so that bullets and numbered lists work d=d.replace(RegExp('(==+[^=]*==+)\\s*', 'g'), '$1\n\n'); } // superfluous sentences are RIGHT OUT. // note: exactly 1 set of parens here needed to make the slice work d = d.parenSplit(RegExp('([!?.]+["'+"'"+']*\\s)','g')); // leading space is bad, mmkay? d[0]=d[0].replace(RegExp('^\\s*'), ''); var notSentenceEnds=RegExp('([^.][a-z][.] *[a-z]|etc|sic|Dr|Mr|Mrs|Ms|St|no|op|cit|\\[[^\\]]*|\\s[A-Zvclm])$', 'i'); d = this.fixSentenceEnds(d, notSentenceEnds); this.fullLength=d.join('').length; var maxChars=getValueOf('popupMaxPreviewCharacters') + this.extraCharacters; var n=this.maxSentences; var dd=this.firstSentences(d,n); do { dd=this.firstSentences(d,n); --n; } while ( dd.length > this.maxCharacters && n != 0 ); this.data = dd; }; /** @private */ Previewmaker.prototype.fixSentenceEnds = function(strs, reg) { // take an array of strings, strs // join strs[i] to strs[i+1] & strs[i+2] if strs[i] matches regex reg var abbrevRe=/\b[a-z][^a-z]*$/i; for (var i=0; i<strs.length-2; ++i) { if (reg.test(strs[i])) { a=[]; for (var j=0; j<strs.length; ++j) { if (j<i) a[j]=strs[j]; if (j==i) a[i]=strs[i]+strs[i+1]+strs[i+2]; if (j>i+2) a[j-2]=strs[j]; } return this.fixSentenceEnds(a,reg); } // BUGGY STUFF - trying to fix up [[S. C. Johnson & Son]] preview if (false && abbrevRe.test(strs[i])) { var j=i, buf=''; do { buf=buf+strs[i]+strs[i+1]; i=i+2; } while (i<strs.length-2 && abbrevRe.test(strs[i])); strs[i]=buf+strs[i]; var a=(j?strs.slice(0,j-1):[]).concat(strs.slice(i)); return this.fixSentenceEnds(a,reg); } } return strs; }; /** @private */ Previewmaker.prototype.firstSentences = function(strs, howmany) { var t=strs.slice(0, 2*howmany); return t.join(''); }; /** @private */ Previewmaker.prototype.killBadWhitespace = function() { // also cleans up isolated '''', eg [[Suntory Sungoliath]] this.data=this.data.replace(RegExp('^ *\'+ *$', 'gm'), ''); }; /** Runs the various methods to generate the preview. The preview is stored in the <code>html</html> field. @private */ Previewmaker.prototype.makePreview = function() { if (this.owner.article.namespace()!=pg.ns.template) { this.killComments(); this.killDivs(); this.killGalleries(); this.killBoxTemplates(); if (getValueOf('popupPreviewKillTemplates')) { this.killTemplates(); } else { this.killMultilineTemplates(); } this.killTables(); this.killImages(); this.killHTML(); this.killChunks(); this.mopup(); this.firstBit(); this.killBadWhitespace(); } this.html=wiki2html(this.data, this.baseUrl); // needs livepreview this.fixHTML(); this.stripLongTemplates(); }; Previewmaker.prototype.editSummaryPreview=function() { var c=this.data; var re=/^\/[*] +(.*?) +[*]\/(.*)/; if (re.test(c)) { var section=c.replace(re, '$1'); var t=new Title().fromURL(this.baseUrl); t.anchorFromUtf(section); // work around livepreview brokenness with anchors: // pass .-escaped anchor instead of literal value c=c.replace(re, '[[' + t.toString(true).split("'").join('%27') + '#' + t.anchor.split("'").join('%27') + '|&rarr;]]' + '<span class=autocomment>$1</span>$2'); } this.html=wiki2html(c, this.baseUrl); return this.html; }; //<NOLITE> /** Test function for debugging preview problems one step at a time. */ function previewSteps(txt) { try { txt=txt || document.editform.wpTextbox1.value; } catch (err) { if (pg.cache.pages.length > 0) { txt=pg.cache.pages[pg.cache.pages.length-1].data; } else { alert('provide text or use an edit page'); } } txt=txt.substring(0,10000); var base=pg.wiki.articlebase + Title.fromURL(document.location.href).urlString(); var p=new Previewmaker(txt, base, pg.current.link.navpopup); if (this.owner.article.namespace() != pg.ns.template) { p.killComments(); if (!confirm('done killComments(). Continue?\n---\n' + p.data)) { return; } p.killDivs(); if (!confirm('done killDivs(). Continue?\n---\n' + p.data)) { return; } p.killGalleries(); if (!confirm('done killGalleries(). Continue?\n---\n' + p.data)) { return; } p.killBoxTemplates(); if (!confirm('done killBoxTemplates(). Continue?\n---\n' + p.data)) { return; } if (getValueOf('popupPreviewKillTemplates')) { p.killTemplates(); if (!confirm('done killTemplates(). Continue?\n---\n' + p.data)) { return; } } else { p.killMultilineTemplates(); if (!confirm('done killMultilineTemplates(). Continue?\n---\n' + p.data)) { return; } } p.killTables(); if (!confirm('done killTables(). Continue?\n---\n' + p.data)) { return; } p.killImages(); if (!confirm('done killImages(). Continue?\n---\n' + p.data)) { return; } p.killHTML(); if (!confirm('done killHTML(). Continue?\n---\n' + p.data)) { return; } p.killChunks(); if (!confirm('done killChunks(). Continue?\n---\n' + p.data)) { return; } p.mopup(); if (!confirm('done mopup(). Continue?\n---\n' + p.data)) { return; } p.firstBit(); if (!confirm('done firstBit(). Continue?\n---\n' + p.data)) { return; } p.killBadWhitespace(); if (!confirm('done killBadWhitespace(). Continue?\n---\n' + p.data)) { return; } } p.html=wiki2html(p.data, base); // needs livepreview p.fixHTML(); if (!confirm('done fixHTML(). Continue?\n---\n' + p.html)) { return; } p.stripLongTemplates(); if (!confirm('done stripLongTemplates(). Continue?\n---\n' + p.html)) { return; } alert('finished preview - end result follows.\n---\n' + p.html); } //</NOLITE> /** Works around a quoting bug in livepreview. <code>wiki2html('[[Foo\'s "bar"]]')</code> gives @literal{<a href='Foo's "bar"'>} which doesn't do very well. We change this into @literal{<a href="Foo's %22bar%22">} @private */ Previewmaker.prototype.fixHTML = function() { if(!this.html) return; // all links seem to have potential issues with quotation marks var splitted=this.html.parenSplit(/href='([^>]*)'/g); var ret=''; for (var i=0; i<splitted.length; ++i) { if(i%2==0) { ret += splitted[i]; continue; } if(i%2==1) { ret += 'href="' + splitted[i].split('"').join('%22') + '"'; } } // fix question marks in wiki links // maybe this'll break some stuff :-( ret=ret.replace(RegExp('\(<a href="/' + pg.wiki.articlePath + '/[^"]*\)[?]\(.*?"\)', 'g'), '$1%3F$2'); // FIXME fix up % too this.html=ret; }; /** Generates the preview and displays it in the current popup. Does nothing if the generated preview is invalid or consists of whitespace only. Also activates wikilinks in the preview for subpopups if the popupSubpopups option is true. */ Previewmaker.prototype.showPreview = function () { this.makePreview(); if (typeof this.html != typeof '') return; if (RegExp('^\\s*$').test(this.html)) return; setPopupHTML('<hr>', 'popupPrePreviewSep', this.owner.idNumber); setPopupTipsAndHTML(this.html, 'popupPreview', this.owner.idNumber, { owner: this.owner }); var more = (this.fullLength > this.data.length) ? this.moreLink() : ''; setPopupHTML(more, 'popupPreviewMore', this.owner.idNumber); }; /** @private */ Previewmaker.prototype.moreLink=function() { var a=document.createElement('a'); a.className='popupMoreLink'; a.innerHTML=popupString('more...'); var savedThis=this; a.onclick=function() { savedThis.maxCharacters+=2000; savedThis.maxSentences+=20; savedThis.setData(); savedThis.showPreview(); } return a; } /** @private */ Previewmaker.prototype.stripLongTemplates = function() { // operates on the HTML! this.html=this.html.replace(RegExp('^.{0,1000}[{][{][^}]*?(<(p|br)( /)?>\\s*){2,}([^{}]*?[}][}])?', 'gi'), ''); this.html=this.html.split('\n').join(' '); // workaround for <pre> templates this.html=this.html.replace(RegExp('[{][{][^}]*<pre>[^}]*[}][}]','gi'), ''); }; /** @private */ Previewmaker.prototype.killMultilineTemplates = function() { this.kill('{{{', '}}}'); this.kill(RegExp('\\s*[{][{][^{}]*\\n'), '}}', '{{'); }; // ENDFILE: previewmaker.js // STARTFILE: querypreview.js //<NOLITE> function loadQueryPreview(queryType, article, navpop) { var art=new Title(article).urlString(); var url=pg.wiki.wikibase + '/query.php?format=json&'; var htmlGenerator=function(a,d){alert('invalid html generator');}; switch (queryType) { case 'history': url += 'titles=' + art + '&what=revisions|userinfo&uioptions=timecorrection&rvcomments&rvlimit=' + getValueOf('popupHistoryPreviewLimit'); htmlGenerator=historyPreviewHTML; break; case 'imagelinks': // redundant case url += 'titles=' + art + '&what=imagelinks&ilfilter=all'; htmlGenerator=imagelinksPreviewHTML; break; case 'category': url += 'what=category&cptitle=' + art; htmlGenerator=categoryPreviewHTML; break; case 'contribs': url += 'what=usercontribs|userinfo&uioptions=timecorrection&titles=' + art + '&uccomments' + '&uclimit=' + getValueOf('popupContribsPreviewLimit'); htmlGenerator=contribsPreviewHTML; break; case 'imagepagepreview': var trail='&what=imageinfo|content|imagelinks&ilfilter=all'; if (!getValueOf('popupImageLinks')) { trail = '&what=imageinfo|content'; } if (pg.wiki.commons) { trail += '&iishared'; } url += 'titles=' + art + trail; htmlGenerator=imagepagePreviewHTML; break; case 'sharedimagepage': url += 'titles=' + art + '&what=content&proxylang=' + pg.wiki.commonslang; htmlGenerator=sharedImagePagePreviewHTML; break; case 'backlinks': url += 'what=backlinks&titles=' + art; htmlGenerator=backlinksPreviewHTML; break; } pendingNavpopTask(navpop); var callback=function(d){ showQueryPreview(queryType, htmlGenerator(article,d,navpop), navpop.idNumber, navpop, d); }; var go = function(){ getPageWithCaching(url, callback, navpop); return true; } if (navpop.visible || !getValueOf('popupLazyDownloads')) { go(); } else { navpop.addHook(go, 'unhide', 'before', 'DOWNLOAD_'+queryType+'_QUERY_DATA'); } } function showQueryPreview(queryType, html, id, navpop, download) { var target='popupPreview'; switch (queryType) { case 'imagelinks': case 'category': target='popupPostPreview'; break; case 'sharedimagepage': target='popupSecondPreview'; break; } setPopupTipsAndHTML(html, target, id); completedNavpopTask(navpop); } function backlinksPreviewHTML(article, download, navpop) { var jsObj=getJsObj(download.data); try { var page=anyChild(jsObj.pages); var list=page.backlinks; } catch (someError) { return 'backlinksPreviewHTML went wonky'; } var html=[]; if (!list) { return popupString('No backlinks found'); } for (var i=0; i<list.length; ++i) { var t=new Title(list[i]['*']); html.push('<a href="' + pg.wiki.titlebase + t.urlString() + '">' + t + '</a>'); } html=html.join(', '); if (jsObj.query && jsObj.query.backlinks && jsObj.query.backlinks.next) { html += popupString(' and more'); } return html; } function sharedImagePagePreviewHTML(article, download, navpop) { var jsObj=getJsObj(download.data); try { var page=anyChild(jsObj.pages); var content=(page && page.content) ? page.content['*'] : null; } catch (someError) { return 'sharedimagepage preview failed :( is the query.php extension installed?'; } var ret=''; if (content) { var p=prepPreviewmaker(content, article, navpop); p.makePreview(); if (p.html) { ret += '<hr>' + p.html; } } return ret; } function imagepagePreviewHTML(article, download, navpop) { var jsObj=getJsObj(download.data); try { var page=anyChild(jsObj['pages']); var content=(page && page.content) ? page.content['*'] : null; var a=page.image; var b=page.sharedimage; } catch (someError) { return 'imagepage preview failed :( is the query.php extension installed?'; } var ret=''; if (content) { var p=prepPreviewmaker(content, article, navpop); p.makePreview(); if (p.html) { ret += '<hr>' + p.html; } } var sharingInfo=getSharingInfo(a,b); if (sharingInfo) { ret += '<hr>' + sharingInfo; } if (content!==null && getValueOf('popupSummaryData')) { var info=getPageInfo(content, download); log(info); setPopupTrailer(info, navpop.idNumber); } if (!a && b) { loadQueryPreview('sharedimagepage', article, navpop); } showQueryPreview('imagelinks', imagelinksPreviewHTML(article,download), navpop.idNumber, download); return ret; } function getSharingInfo(a,b) { if (!pg.wiki.commons) { return ''; } var sharingInfo=''; if (a && b) { if (checkSameImage(a,b)) { sharingInfo = popupString('commons dupe'); } else { sharingInfo = popupString('commons conflict'); } } else if (a && !b) { // nothing interesting if (getValueOf('popupShowNonCommonsImages')) { sharingInfo = popupString('not commons'); } } else if (!a && b) { sharingInfo = popupString('commons only'); } else { sharingInfo = popupString('No image found'); } return sharingInfo; } function checkSameImage(a,b){ return (a['size']==b['size'] && a['width']==b['width'] && a['bits']==b['bits'] && a['media']==b['media'] && a['mime']==b['mime']); } function imagelinksPreviewHTML(article, download) { var jsobj=getJsObj(download.data); try { var list=anyChild(jsobj['pages'])['imagelinks']; if (!list) { return popupString('No image links found'); } } catch(someError) { return 'Image links preview generation failed :( Is the query.php extension installed?'; } var ret=[]; for (var i=0; i<list.length; ++i) { ret.push(list[i]['*']); } if (ret.length === 0) { return popupString('No image links found'); } return '<h2>' + popupString('File links') + '</h2>' + linkList(ret); } function categoryPreviewHTML(article, download) { var jsobj=getJsObj(download.data); try{ var list=jsobj['pages']; } catch(someError) { return 'Category preview failed :( Is the query.php extension installed?'; } var ret=[]; for (var p in list) { ret.push(list[p]['title']); } if (ret.length === 0) { return popupString('Empty category'); } return '<h2>' + tprintf('Category members (%s shown)', [ret.length]) + '</h2>' +linkList(ret); } function linkList(list) { list.sort(function(x,y) { return (x==y ? 0 : (x<y ? -1 : 1)); }); var buf=[]; for (var i=0; i<list.length; ++i) { buf.push(wikiLink({article: new Title(list[i]), text: list[i].split(' ').join('&nbsp;'), action: 'view'})); } return buf.join(', '); } function contribsPreviewHTML(article, download, navpop) { return historyPreviewHTML(article, download, navpop, true); } function historyPreviewHTML(article, download, navpop, reallyContribs) { var jsobj=getJsObj(download.data); try { var tz=jsobj.meta.user.timecorrection; var edits=anyChild(jsobj.pages)[reallyContribs ? 'contributions' : 'revisions']; } catch (someError) { return 'Preview failed :-( Is the query.php extension installed?'; } var timeOffset = getTimeOffset(tz); Cookie.create('popTz', timeOffset, 1); var ret=editPreviewTable(article, edits, reallyContribs, timeOffset); return ret; } function getTimeOffset(tz) { return ( tz && tz.indexOf(':') > -1 ) ? ( parseInt(tz,10)*60 + parseInt(tz.split(':')[1],10) ) : 0; } function editPreviewTable(article, h, reallyContribs, timeOffset) { var html=['<table>']; var day=null; var curart=article; for (var i=0; i<h.length; ++i) { if (reallyContribs) { var page=h[i]['*']; curart = new Title(page); } var minor=typeof h[i]['minor']=='undefined' ? '' : '<b>m </b>'; var editDate=adjustDate(getDateFromTimestamp(h[i].timestamp), timeOffset); var thisDay = dayFormat(editDate); var thisTime = timeFormat(editDate); if (thisDay==day) { thisDay=''; } else { day=thisDay; } if (thisDay) { html.push( '<tr><td colspan=3><span class="popup_history_date">' + thisDay+'</span></td></tr>' ); } html.push('<tr class="popup_history_row_' + ( (i%2) ? 'odd' : 'even') + '">'); html.push('<td>(<a href="' + pg.wiki.titlebase + new Title(curart).urlString() + '&diff=prev&oldid=' + h[i]['revid'] + '">' + popupString('last') + '</a>)</td>'); html.push('<td>' + '<a href="' + pg.wiki.titlebase + new Title(curart).urlString() + '&oldid=' + h[i]['revid'] + '">' + thisTime + '</a></td>'); var col3url='', col3txt=''; if (!reallyContribs) { var user=h[i]['user']; col3url=pg.wiki.titlebase + pg.ns.user + ':' + new Title(user).urlString(); col3txt=user; } else { col3url=pg.wiki.titlebase + curart.urlString(); col3txt=page; // FIXME do we have to escape this? } html.push('<td>' + (reallyContribs ? minor : '') + '<a href="' + col3url + '">' + col3txt + '</a></td>'); var comment=''; var c=h[i].comment || h[i]['*']; if (c) { comment=new Previewmaker(c, new Title(curart).toUrl()).editSummaryPreview(); } html.push('<td>' + (!reallyContribs ? minor : '') + comment + '</td>'); html.push('</tr>'); html=[html.join('')]; } html.push('</table>'); return html.join(''); } function getDateFromTimestamp(t) { var s=t.split(/[^0-9]/); switch(s.length) { case 0: return null; case 1: return new Date(s[0]); case 2: return new Date(s[0], s[1]-1); case 3: return new Date(s[0], s[1]-1, s[2]); case 4: return new Date(s[0], s[1]-1, s[2], s[3]); case 5: return new Date(s[0], s[1]-1, s[2], s[3], s[4]); case 6: return new Date(s[0], s[1]-1, s[2], s[3], s[4], s[5]); default: return new Date(s[0], s[1]-1, s[2], s[3], s[4], s[5], s[6]); } } function adjustDate(d, offset) { // offset is in minutes var o=offset * 60 * 1000; return new Date( +d + o); } function dayFormat(editDate, utc) { if (utc) { return map(zeroFill, [editDate.getUTCFullYear(), editDate.getUTCMonth()+1, editDate.getUTCDate()]).join('-'); } return map(zeroFill, [editDate.getFullYear(), editDate.getMonth()+1, editDate.getDate()]).join('-'); } function timeFormat(editDate, utc) { if (utc) { return map(zeroFill, [editDate.getUTCHours(), editDate.getUTCMinutes(), editDate.getUTCSeconds()]).join(':'); } return map(zeroFill, [editDate.getHours(), editDate.getMinutes(), editDate.getSeconds()]).join(':'); } //</NOLITE> // ENDFILE: querypreview.js // STARTFILE: debug.js //////////////////////////////////////////////////////////////////// // Debugging functions //////////////////////////////////////////////////////////////////// function log(){}; // dummy to stop errors function setupDebugging() { //<NOLITE> // debugging - change DEBUG to NONE to switch off if (window.popupDebug) { // popupDebug is set from .version window.log=function(x) { //if(gMsg!='')gMsg += '\n'; gMsg+=time() + ' ' + x; }; if (pg.debugLevel != log.None) { window.logger.debug(x); } } window.errlog=function(x) { if (pg.debugLevel != log.None) { window.logger.error(x); } } pg.debugLevel=Log.DEBUG; window.logger = new Log(pg.debugLevel, Log.popupLogger); log('Initializing logger'); } else { //</NOLITE> window.log = function(x) {}; window.errlog = function(x) {}; //<NOLITE> } //</NOLITE> } // ENDFILE: debug.js // STARTFILE: images.js //<NOLITE> // FIXME rewrite ALL of this // How the URLs for images in the popup come about // loadPreview // | // getWiki // |<----------------see other schematic for details // insertPreview (insertPreview = onComplete) // | // | insertPreview gets a wikiText fragment from // | the wikiText downloaded by getWiki // | // [wikiMarkupToAddressFragment] // | // | mouseOverWikiLink (gets an "address fragment", // | | no processing needed) // \->-*loadThisImage---<----loadImages // | // [image(Thumb)URL]-->--hopefully valid image urls // FIXME get rid of pg.idNumber function sequentialLoadThisImage (image) { if (!getValueOf('popupImages')) { return false; } if (!isValidImageName(image)) { return false; } var imageUrls=getImageUrls(image); if (!imageUrls) { return null; } var img=new Image(); img.isNew=true; img.pg.idNumber=pg.idNumber; img.counter=1; img.onload = function () { // clear status thingy setImageStatus(''); var i=findThis(imageUrls, this.src); var goodSrc=this.src; var setPopupImage=function () { var popupImage=document.getElementById("popupImage"+this.pg.idNumber); if (popupImage && typeof popupImage.src != 'undefined') { clearInterval(pg.timer.image); popupImage.src=goodSrc; popupImage.width=getValueOf('popupImageSize'); popupImage.style.display='inline'; setPopupImageLink(image, pg.wiki.imageSources[i].wiki); return true; } else { return false; } }; pg.timer.image=setInterval(setPopupImage, 250); pg.cache.images.push(goodSrc); }; img.onerror = function () { pg.cache.badImageUrls.push(this.src); }; img.setNext = function () { var currentSrc=null; var newSrc; if (!this.isNew) { currentSrc=this.src; } this.isNew=false; newSrc= (currentSrc) ? nextOne(imageUrls, currentSrc) : imageUrls[0]; while (findThis(pg.cache.badImageUrls, newSrc)) { newSrc=nextOne(imageUrls, newSrc); if (!newSrc) { setImageStatus (' :-('); return; } } setImageStatus(' '+findThis(imageUrls, newSrc)); this.src=newSrc; }; // start the ball rolling img.setNext(); } function loadThisImageAtThisUrl(image, url) { log('loading "best" image:\n'+url); pg.misc.gImage=new Title(image.toString()); pg.misc.imageArray = []; pg.misc.imageArray[0] = new Image(); pg.misc.imageArray[0].src=url; if (pg.timer.image || pg.timer.image===0) { clearInterval(pg.timer.image); pg.counter.checkImages=0; } pg.timer.image=setInterval(checkImages, 250); return; } // methinks this is unbelievably silly // it dovetails with the parallel image loader function function checkImages() { //log('checkImages: pg.counter.loop='+pg.counter.loop+'; pg.counter.checkImages='+pg.counter.checkImages); if (pg.timer.checkImages || pg.timer.checkImages===0) { clearInterval(pg.timer.checkImages); pg.timer.checkImages=null; if (pg.counter.loop > 10) {pg.counter.loop=0; log('too many iterations of checkImages'); return;} pg.counter.loop++; } else pg.counter.checkImages++; var status = ( pg.counter.checkImages % 2 ) ? ':' : '.' ; setImageStatus(status); if (pg.counter.checkImages > 100) { pg.counter.checkImages = 0; log ('pg.counter.checkImages too big in checkImages; returning'); clearInterval(pg.timer.image); } var popupImage=null; popupImage=document.getElementById("popupImg"+pg.idNumber); if (popupImage == null) { // this doesn't seem to happen any more in practise for some reason // still, I'll leave it in log('checkImages: document.getElementById("popupImg'+pg.idNumber+'") is null! retrying in 333ms...'); pg.timer.checkImages=setInterval("checkImages()",333); return; } log('checkImages: found element popupImg'+pg.idNumber+', and src='+popupImage.src); // get the first image to successfully load // and put it in the popupImage for(var i = 0; i < pg.misc.imageArray.length; ++i) { if(isImageOk(pg.misc.imageArray[i])) { // stop all the gubbins, assign the image and return log('checkImages: got at pos '+i+', src='+pg.misc.imageArray[i].src); clearInterval(pg.timer.image); if(pg.misc.gImage && pg.misc.gImage.namespace() == pg.ns.image) { popupImage.src=pg.misc.imageArray[i].src; popupImage.width=getValueOf('popupImageSize'); popupImage.style.display='inline'; // should we check to see if it's already there? maybe... pg.cache.images.push(pg.misc.imageArray[i].src); setPopupImageLink(pg.misc.gImage, pg.wiki.imageSources[i].wiki); stopImagesDownloading(); } setImageStatus(''); // reset evil nonconstant globals delete pg.misc.imageArray; pg.misc.imageArray=[]; pg.timer.image=null; pg.counter.checkImages=0; pg.counter.loop=0; return popupImage.src; } } log('checkImages: no good image found. retrying in a tic...'); pg.timer.checkImages=setInterval("checkImages()",333); } function stopImagesDownloading() { pg.misc.gImage=null; if (pg.misc.imageArray == null) { return null; } for (var i=0; i<pg.misc.imageArray.length; ++i) { //pg.misc.imageArray[i].src=''; // this is a REALLY BAD IDEA delete pg.misc.imageArray[i]; //pg.misc.imageArray[i] = new Image(); } pg.misc.imageArray = []; } function toggleSize() { var imgContainer=this; if (!imgContainer) { alert('imgContainer is null :/'); return;} img=imgContainer.firstChild; if (!img) { alert('img is null :/'); return;} if (!img.style.width || img.style.width=='') { img.style.width='100%'; } else { img.style.width=''; } } function setPopupImageLink (img, wiki) { if( wiki === null || img === null ) { return null; } var a=document.getElementById("popupImageLink"+pg.idNumber); if (a === null) { return null; } switch (getValueOf('popupThumbAction')) { case 'imagepage': if (pg.current.article.namespace()!=pg.ns.image) { a.href=pg.wiki.titlebase + img.urlString(); // FIXME: unreliable pg.idNumber popTipsSoonFn('popupImage' + pg.idNumber)(); break; } // else fall through case 'sizetoggle': a.onclick=toggleSize; a.title=popupString('Toggle image size'); return; case 'linkfull': var linkURL = imageURL(img, wiki); if (linkURL) { a.href = linkURL; a.title=popupString('Open full-size image'); } return; } } function isImageOk(img) { // IE test if (!img.complete) { return false; } // gecko test if (typeof img.naturalWidth != "undefined" && img.naturalWidth == 0) { return false; } // test for konqueror and opera // note that img.width must not be defined in the html with a width="..." // for this to work. // konq seems to give "broken images" width 16, presumably an icon width // this test would probably work in gecko too, *except for very small images* if (typeof img.width == 'undefined' || img.width <= 16) { return false; } // No other way of checking: assume it's ok. return true; } // those odd a/a5/ bits of image urls function imagePathComponent(article) { // article is string, no namespace // FIXME needs testing with odd characters var forhash=article.split(' ').join('_'); var hash=hex_md5(forhash); return hash.substring(0,1) + '/' + hash.substring(0,2) + '/'; } function getImageUrlStart(wiki) { // this returns a trailing slash switch (wiki) { case 'en.wikipedia.org': return 'http://upload.wikimedia.org/wikipedia/en/'; case pg.wiki.commons: return 'http://upload.wikimedia.org/wikipedia/commons/'; case 'en.wiktionary.org': return 'http://en.wiktionary.org/upload/en/'; case 'secure.wikimedia.org': return joinPath(['http://upload.wikimedia.org', pg.wiki.prePath]) + '/'; break; default: // unsupported - take a guess if (pg.wiki.wikimedia) { return 'http://upload.wikimedia.org/wikipedia/' + pg.wiki.lang +'/'; } /* this should work for wikicities */ return 'http://' + wiki + '/images/'; } } function imageURL(img, wiki) { if (getValueOf('popupImagesFromThisWikiOnly') && wiki != pg.wiki.hostname) return null; var imgurl=null; var pathcpt = imagePathComponent(img.stripNamespace()); imgurl=getImageUrlStart(wiki) + pathcpt + img.stripNamespace().split(' ').join('_'); return imgurl; } function imageThumbURL(img, wiki, width) { // // eg http://upload.wikimedia.org/wikipedia/en/thumb/6/61/ // Rubiks_cube_solved.jpg/120px-Rubiks_cube_solved.jpg // ^^^^^^^^^^^^^^^^^^^^^^^ // wikicities omits this bit // AND wikicities needs a new pathcpt for each filename including thumbs if (getValueOf('popupImagesFromThisWikiOnly') && wiki != pg.wiki.hostname) return null; if (getValueOf('popupNeverGetThumbs')) return null; var imgurl=null; var stripped=img.stripNamespace(); var pathcpt; if (pg.wiki.wikimedia) pathcpt = imagePathComponent(stripped); else pathcpt = imagePathComponent(width+'px-'+stripped); imgurl=getImageUrlStart(wiki) + "thumb/" + pathcpt; if (pg.wiki.wikimedia) imgurl += stripped + '/'; imgurl += width +"px-" + stripped; return imgurl; } function loadImages(image) { if (typeof image.stripNamespace != 'function') { alert('loadImages bad'); } if (getValueOf('popupLoadImagesSequentially')) { return sequentialLoadThisImage(image); } return parallelLoadThisImage(image); } function getImageUrls(image) { if (typeof image.stripNamespace != 'function') { alert('getImageUrls bad'); } var imageUrls=[]; for (var i=0; i<pg.wiki.imageSources.length; ++i) { var url; if (pg.wiki.imageSources[i].thumb) { url=imageThumbURL(image, pg.wiki.imageSources[i].wiki, pg.wiki.imageSources[i].width); } else { url=imageURL(image, pg.wiki.imageSources[i].wiki); } for (var j=0; j<pg.cache.images.length; ++j) { if (url == pg.cache.images[j]) { loadThisImageAtThisUrl(image, url); return null; } } if (url!=null) imageUrls.push(url); } return imageUrls; } // this is probably very wasteful indeed of bandwidth // hey ho function parallelLoadThisImage (image) { if (typeof image.stripNamespace != 'function') { alert('parallelLoadThisImage bad'); } if (!getValueOf('popupImages')) return; if (!isValidImageName(image)) return false; var imageUrls=getImageUrls(image); if (!imageUrls) return null; for (var i=0; i<imageUrls.length; ++i) { var url = imageUrls[i]; pg.misc.imageArray[i]=new Image(); pg.misc.imageArray[i].src=url; } if (pg.timer.image != null) { clearInterval(pg.timer.image); pg.counter.checkImages=0; } pg.misc.gImage=new Title(image.toString()); pg.timer.image=setInterval("checkImages()", 250); return true; } function getValidImageFromWikiText(wikiText) { var imagePage=null; // nb in pg.re.image we're interested in the second bracketed expression // this may change if the regex changes :-( //var match=pg.re.image.exec(wikiText); var matched=null; var match; // strip html comments, used by evil bots :-( var t = removeMatchesUnless(wikiText, RegExp('(<!--[\\s\\S]*?-->)'), 1, RegExp('^<!--[^[]*popup', 'i')); while ( match = pg.re.image.exec(t) ) { // now find a sane image name - exclude templates by seeking { var m = match[2] || match[6]; var pxWidth=match[4]; if ( isValidImageName(m) && (!pxWidth || parseInt(pxWidth,10) >= getValueOf('popupMinImageWidth')) ) { matched=m; break; } } pg.re.image.lastIndex=0; if (!matched) { return null; } return pg.ns.image+':'+upcaseFirst(matched); } function removeMatchesUnless(str, re1, parencount, re2) { var split=str.parenSplit(re1); var c=parencount + 1; for (var i=0; i<split.length; ++i) { if ( i%c === 0 || re2.test(split[i]) ) { continue; } split[i]=''; } return split.join(''); } //</NOLITE> // ENDFILE: images.js // STARTFILE: namespaces.js // Set up namespaces and other non-strings.js localization // (currently that means redirs too) // Put the right namespace list into pg.ns.list, based on pg.wiki.lang // Default to english if nothing seems to fit function setNamespaceList() { var m="Media"; var list = [m, "Special", "Talk", "User", "User talk", "Wikipedia", "Wikipedia talk", "Image", "Image talk", "MediaWiki", "MediaWiki talk", "Template", "Template talk", "Help", "Help talk", "Category", "Category talk", "Portal", "Portal talk"]; var nsIndex = { '': 0, 'Special': 1, 'Talk': 2, 'User': 3, 'User talk': 4, 'Wikipedia': 5, 'Wikipedia talk': 6, 'Image': 7, 'Image talk': 8, 'MediaWiki': 9, 'MediaWiki talk': 10, 'Template': 11, 'Template talk': 12, 'Help': 13, 'Help talk': 14, 'Category': 15, 'Category talk':16, 'Portal': 17, 'Portal talk': 18}; var nsLists = { //<NOLITE> "af": [m, "Spesiaal", "Bespreking", "Gebruiker", "Gebruikerbespreking", "Wikipedia", "Wikipediabespreking", "Beeld", "Beeldbespreking", "MediaWiki", "MediaWikibespreking", "Sjabloon", "Sjabloonbespreking", "Hulp", "Hulpbespreking", "Kategorie", "Kategoriebespreking"], "als": [m, "Spezial", "Diskussion", "Benutzer", "Benutzer Diskussion", "Wikipedia", "Wikipedia Diskussion", "Bild", "Bild Diskussion", "MediaWiki", "MediaWiki Diskussion", "Vorlage", "Vorlage Diskussion", "Hilfe", "Hilfe Diskussion", "Kategorie", "Kategorie Diskussion"], "ar": ["ملف", "خاص", "نقاش", "مستخدم", "نقاش المستخدم", "ويكيبيديا", "نقاش ويكيبيديا", "صورة", "نقاش الصورة", "ميدياويكي", "نقاش ميدياويكي", "Template", "نقاش Template", "مساعدة", "نقاش المساعدة", "تصنيف", "نقاش التصنيف"], "ast": [m, "Especial", "Discusión", "Usuariu", "Usuariu discusión", "Uiquipedia", "Uiquipedia discusión", "Imaxen", "Imaxen discusión", "MediaWiki", "MediaWiki discusión", "Plantilla", "Plantilla discusión", "Ayuda", "Ayuda discusión", "Categoría", "Categoría discusión"], "be": ["Мэдыя", "Спэцыяльныя", "Абмеркаваньне", "Удзельнік", "Гутаркі ўдзельніка", "Вікіпэдыя", "Абмеркаваньне Вікіпэдыя", "Выява", "Абмеркаваньне выявы", "MediaWiki", "Абмеркаваньне MediaWiki", "Шаблён", "Абмеркаваньне шаблёну", "Дапамога", "Абмеркаваньне дапамогі", "Катэгорыя", "Абмеркаваньне катэгорыі"], "bg": ["Медия", "Специални", "Беседа", "Потребител", "Потребител беседа", "Уикипедия", "Уикипедия беседа", "Картинка", "Картинка беседа", "МедияУики", "МедияУики беседа", "Шаблон", "Шаблон беседа", "Помощ", "Помощ беседа", "Категория", "Категория беседа"], "bm": [m, "Special", "Discuter", "Utilisateur", "Discussion Utilisateur", "Wikipedia", "Discussion Wikipedia", "Image", "Discussion Image", "MediaWiki", "Discussion MediaWiki", "Modèle", "Discussion Modèle", "Aide", "Discussion Aide", "Catégorie", "Discussion Catégorie"], "bn": ["বিশেষ", "আলাপ", "ব্যবহারকারী", "ব্যবহারকারী আলাপ", "উইকিপেডিয়া", "উইকিপেডিয়া আলাপ", "চিত্র", "চিত্র আলাপ", "MediaWik i আলাপ", m, "MediaWiki", "Template", "Template talk", "Help", "Help talk", "Category", "Category talk"], "br": [m, "Dibar", "Kaozeal", "Implijer", "Kaozeadenn Implijer", "Wikipedia", "Kaozeadenn Wikipedia", "Skeudenn", "Kaozeadenn Skeudenn", "MediaWiki", "Kaozeadenn MediaWiki", "Patrom", "Kaozeadenn Patrom", "Skoazell", "Kaozeadenn Skoazell", "Rummad", "Kaozeadenn Rummad"], "ca": [m, "Especial", "Discussió", "Usuari", "Usuari Discussió", "Viquipèdia", "Viquipèdia Discussió", "Imatge", "Imatge Discussió", "MediaWiki", "MediaWiki Discussió", "Template", "Template Discussió", "Ajuda", "Ajuda Discussió", "Categoria", "Categoria Discussió"], "cs": ["Média", "Speciální", "Diskuse", "Wikipedista", "Wikipedista diskuse", "Wikipedie", "Wikipedie diskuse", "Soubor", "Soubor diskuse", "MediaWiki", "MediaWiki diskuse", "Šablona", "Šablona diskuse", "Nápověda", "Nápověda diskuse", "Kategorie", "Kategorie diskuse"], "csb": [m, "Specjalnô", "Diskùsëjô", "Brëkòwnik", "Diskùsëjô brëkòwnika", "Wiki", "Diskùsëjô Wiki", "Òbrôzk", "Diskùsëjô òbrôzków", "MediaWiki", "Diskùsëjô MediaWiki", "Szablóna", "Diskùsëjô Szablónë", "Pòmòc", "Diskùsëjô Pòmòcë", "Kategòrëjô", "Diskùsëjô Kategòrëji"], "cv": ["Медиа", "Ятарлă", "Сӳтсе явасси", "Хутшăнакан", "Хутшăнаканăн канашлу страници", "Wikipedia", "0", "Ӳкерчĕк", "Ӳкерчĕке сӳтсе явмалли", "MediaWiki", "MediaWiki сӳтсе явмалли", "Шаблон", "Шаблона сӳтсе явмалли", "Пулăшу", "Пулăшăва сӳтсе явмалли", "Категори", "Категорине сӳтсе явмалли"], "cy": [m, "Arbennig", "Sgwrs", "Defnyddiwr", "Sgwrs Defnyddiwr", "Wicipedia", "Sgwrs Wicipedia", "Delwedd", "Sgwrs Delwedd", "MediaWiki", "Sgwrs MediaWiki", "Nodyn", "Sgwrs Nodyn", "Help", "Help talk", "Category", "Category talk"], "da": [m, "Speciel", "Diskussion", "Bruger", "Brugerdiskussion", "Wikipedia", "Wikipedia-diskussion", "Billede", "Billeddiskussion", "MediaWiki", "MediaWiki-diskussion", "Skabelon", "Skabelondiskussion", "Hjælp", "Hjælpdiskussion", "Kategori", "Kategoridiskussion", "Portal", "Portaldiskussion"], "de": [m, "Spezial", "Diskussion", "Benutzer", "Benutzer Diskussion", "Wikipedia", "Wikipedia Diskussion", "Bild", "Bild Diskussion", "MediaWiki", "MediaWiki Diskussion", "Vorlage", "Vorlage Diskussion", "Hilfe", "Hilfe Diskussion", "Kategorie", "Kategorie Diskussion", "Portal", "Portal Diskussion"], "el": ["Μέσον", "Ειδικό", "Συζήτηση", "Χρήστης", "Συζήτηση χρήστη", "Βικιπαίδεια", "Βικιπαίδεια συζήτηση", "Εικόνα", "Συζήτηση εικόνας", "MediaWiki", "MediaWiki talk", "Πρότυπο", "Συζήτηση προτύπου", "Βοήθεια", "Συζήτηση βοήθειας", "Κατηγορία", "Συζήτηση κατηγορίας"], "eo": [m, "Speciala", "Diskuto", "Vikipediisto", "Vikipediista diskuto", "Vikipedio", "Vikipedio diskuto", "Dosiero", "Dosiera diskuto", "MediaWiki", "MediaWiki diskuto", "Ŝablono", "Ŝablona diskuto", "Helpo", "Helpa diskuto", "Kategorio", "Kategoria diskuto"], "es": [m, "Especial", "Discusión", "Usuario", "Usuario Discusión", "Wikipedia", "Wikipedia Discusión", "Imagen", "Imagen Discusión", "MediaWiki", "MediaWiki Discusión", "Plantilla", "Plantilla Discusión", "Ayuda", "Ayuda Discusión", "Categoría", "Categoría Discusión"], "et": ["Meedia", "Eri", "Arutelu", "Kasutaja", "Kasutaja arutelu", "Vikipeedia", "Vikipeedia arutelu", "Pilt", "Pildi arutelu", "MediaWiki", "MediaWiki arutelu", "Mall", "Malli arutelu", "Juhend", "Juhendi arutelu", "Kategooria", "Kategooria arutelu"], "eu": [m, "Aparteko", "Eztabaida", "Lankide", "Lankide eztabaida", "Wikipedia", "Wikipedia eztabaida", "Irudi", "Irudi eztabaida", "MediaWiki", "MediaWiki eztabaida", "Template", "Template talk", "Help", "Help talk", "Category", "Category talk"], "fa": ["مدیا", "ویژه", "بحث", "کاربر", "بحث کاربر", "ویکی‌پدیا", "بحث ویکی‌پدیا", "تصویر", "بحث تصویر", "مدیاویکی", "بحث مدیاویکی", "الگو", "بحث الگو", "راهنما", "بحث راهنما", "رده", "بحث رده"], "fi": [m, "Toiminnot", "Keskustelu", "Käyttäjä", "Keskustelu käyttäjästä", "Wikipedia", "Keskustelu Wikipediasta", "Kuva", "Keskustelu kuvasta", "MediaWiki", "MediaWiki talk", "Malline", "Keskustelu mallineesta", "Ohje", "Keskustelu ohjeesta", "Luokka", "Keskustelu luokasta"], "fo": ["Miðil", "Serstakur", "Kjak", "Brúkari", "Brúkari kjak", "Wikipedia", "Wikipedia kjak", "Mynd", "Mynd kjak", "MidiaWiki", "MidiaWiki kjak", "Fyrimynd", "Fyrimynd kjak", "Hjálp", "Hjálp kjak", "Bólkur", "Bólkur kjak"], "fr": [m, "Special", "Discuter", "Utilisateur", "Discussion Utilisateur", "Wikipédia", "Discussion Wikipédia", "Image", "Discussion Image", "MediaWiki", "Discussion MediaWiki", "Modèle", "Discussion Modèle", "Aide", "Discussion Aide", "Catégorie", "Discussion Catégorie", "Portail", "Discussion Portail"], "fur": [m, "Speciâl", "Discussion", "Utent", "Discussion utent", "Vichipedie", "Discussion Vichipedie", "Figure", "Discussion figure", "MediaWiki", "Discussion MediaWiki", "Model", "Discussion model", "Jutori", "Discussion jutori", "Categorie", "Discussion categorie"], "fy": [m, "Wiki", "Oerlis", "Meidogger", "Meidogger oerlis", "Wikipedy", "Wikipedy oerlis", "Ofbyld", "Ofbyld oerlis", "MediaWiki", "MediaWiki oerlis", "Berjocht", "Berjocht oerlis", "Hulp", "Hulp oerlis", "Kategory", "Kategory oerlis"], "ga": ["Meán", "Speisialta", "Plé", "Úsáideoir", "Plé úsáideora", "Vicipéid", "Plé Vicipéide", "Íomhá", "Plé íomhá", "MediaWiki", "Plé MediaWiki", "Teimpléad", "Plé teimpléid", "Cabhair", "Plé cabhrach", "Catagóir", "Plé catagóire"], "gu": [m, "Special", "Talk", "User", "User talk", "વિકિપીડિયા", "વિકિપીડિયા talk", "Image", "Image talk", "MediaWiki", "MediaWiki talk", "Template", "Template talk", "Help", "Help talk", "Category", "Category talk"], "he": [m, "מיוחד", "שיחה", "משתמש", "שיחת משתמש", "ויקיפדיה", "שיחת ויקיפדיה", "תמונה", "שיחת תמונה", "MediaWiki", "שיחת MediaWiki", "תבנית", "שיחת תבנית", "עזרה", "שיחת עזרה", "קטגוריה", "שיחת קטגוריה"], "hi": [m, "विशेष", "वार्ता", "सदस्य", "सदस्य वार्ता", "विकिपीडिया", "विकिपीडिया वार्ता", "चित्र", "चित्र वार्ता", "MediaWiki", "MediaWiki talk", "Template", "Template talk", "श्रेणी", "श्रेणी वार्ता", "Help", "Help talk"], "hr": ["Mediji", "Posebno", "Razgovor", "Suradnik", "Razgovor sa suradnikom", "Wikipedia", "Razgovor Wikipedia", "Slika", "Razgovor o slici", "MediaWiki", "MediaWiki razgovor", "Predložak", "Razgovor o predlošku", "Pomoć", "Razgovor o pomoći", "Kategorija", "Razgovor o kategoriji"], "hu": ["Média", "Speciális", "Vita", "User", "User vita", "Wikipédia", "Wikipédia vita", "Kép", "Kép vita", "MediaWiki", "MediaWiki vita", "Sablon", "Sablon vita", "Segítség", "Segítség vita", "Kategória", "Kategória vita"], "ia": [m, "Special", "Discussion", "Usator", "Discussion Usator", "Wikipedia", "Discussion Wikipedia", "Imagine", "Discussion Imagine", "MediaWiki", "Discussion MediaWiki", "Template", "Template talk", "Help", "Help talk", "Category", "Category talk"], "id": [m, "Istimewa", "Bicara", "Pengguna", "Bicara Pengguna", "Wikipedia", "Pembicaraan Wikipedia", "Gambar", "Pembicaraan Gambar", "MediaWiki", "Pembicaraan MediaWiki", "Templat", "Pembicaraan Templat", "Bantuan", "Pembicaraan Bantuan", "Kategori", "Pembicaraan Kategori"], "is": ["Miðill", "Kerfissíða", "Spjall", "Notandi", "Notandaspjall", "Wikipedia", "Wikipediaspjall", "Mynd", "Myndaspjall", "Melding", "Meldingarspjall", "Snið", "Sniðaspjall", "Hjálp", "Hjálparspjall", "Flokkur", "Flokkaspjall"], "it": [m, "Speciale", "Discussione", "Utente", "Discussioni utente", "Wikipedia", "Discussioni Wikipedia", "Immagine", "Discussioni immagine", "MediaWiki", "Discussioni MediaWiki", "Template", "Discussioni template", "Aiuto", "Discussioni aiuto", "Categoria", "Discussioni categoria"], "ja": [m, "特別", "ノート", "利用者", "利用者‐会話", "Wikipedia", "Wikipedia‐ノート", "画像", "画像‐ノート", "MediaWiki", "MediaWiki‐ノート", "Template", "Template‐ノート", "Help", "Help‐ノート", "Category", "Category‐ノート"], "ka": ["მედია", "სპეციალური", "განხილვა", "მომხმარებელი", "მომხმარებელი განხილვა", "ვიკიპედია", "ვიკიპედია განხილვა", "სურათი", "სურათი განხილვა", "მედიავიკი", "მედიავიკი განხილვა", "თარგი", "თარგი განხილვა", "დახმარება", "დახმარება განხილვა", "კატეგორია", "კატეგორია განხილვა"], "ko": [m, "특수기능", "토론", "사용자", "사용자토론", "위키백과", "위키백과토론", "그림", "그림토론", "분류", "분류토론", "MediaWiki", "MediaWiki talk", "Template", "Template talk", "Help", "Help talk"], "ku": ["Medya", "Taybet", "Nîqaş", "Bikarhêner", "Bikarhêner nîqaş", "Wîkîpediya", "Wîkîpediya nîqaş", "Wêne", "Wêne nîqaş", "MediaWiki", "MediaWiki nîqaş", "Şablon", "Şablon nîqaş", "Alîkarî", "Alîkarî nîqaş", "Kategorî", "Kategorî nîqaş"], "la": ["Specialis", "Disputatio", "Usor", "Disputatio Usoris", "Vicipaedia", "Disputatio Vicipaediae", "Imago", "Disputatio Imaginis", "MediaWiki", "Disputatio MediaWiki", "Formula", "Disputatio Formulae", "Auxilium", "Disputatio Auxilii", "Categoria", "Disputatio Categoriae", m], "li": [m, "Speciaal", "Euverlik", "Gebroeker", "Euverlik gebroeker", "Wikipedia", "Euverlik Wikipedia", "Aafbeilding", "Euverlik afbeelding", "MediaWiki", "Euverlik MediaWiki", "Sjabloon", "Euverlik sjabloon", "Help", "Euverlik help", "Kategorie", "Euverlik kategorie"], "lt": ["Medija", "Specialus", "Aptarimas", "Naudotojas", "Naudotojo aptarimas", "Wikipedia", "Wikipedia aptarimas", "Vaizdas", "Vaizdo aptarimas", "MediaWiki", "MediaWiki aptarimas", "Šablonas", "Šablono aptarimas", "Pagalba", "Pagalbos aptarimas", "Kategorija", "Kategorijos aptarimas"], "mk": ["Медија", "Специјални", "Разговор", "Корисник", "Корисник разговор", "Wikipedia", "Wikipedia разговор", "Слика", "Слика разговор", "МедијаВики", "МедијаВики разговор", "Шаблон", "Шаблон разговор", "Помош", "Помош разговор", "Категорија", "Категорија разговор"], "ms": [m, "Istimewa", "Perbualan", "Pengguna", "Perbualan Pengguna", "Wikipedia", "Perbualan Wikipedia", "Imej", "Imej Perbualan", "MediaWiki", "MediaWiki Perbualan", "Template", "Template talk", "Help", "Help talk", "Category", "Category talk"], "mt": [m, "Special", "Talk", "User", "User talk", "Wikipedija", "Wikipedija talk", "Image", "Image talk", "MediaWiki", "MediaWiki talk", "Template", "Template talk", "Help", "Help talk", "Category", "Category talk"], "nap": [m, "Speciale", "Discussione", "Utente", "Discussioni utente", "Wikipedia", "Discussioni Wikipedia", "Immagine", "Discussioni immagine", "MediaWiki", "Discussioni MediaWiki", "Template", "Discussioni template", "Aiuto", "Discussioni aiuto", "Categoria", "Discussioni categoria"], "nds": [m, "Spezial", "Diskuschoon", "Bruker", "Bruker Diskuschoon", "Wikipedia", "Wikipedia Diskuschoon", "Bild", "Bild Diskuschoon", "MediaWiki", "MediaWiki Diskuschoon", "Vörlaag", "Vörlaag Diskuschoon", "Hülp", "Hülp Diskuschoon", "Kategorie", "Kategorie Diskuschoon"], "nl": [m, "Speciaal", "Overleg", "Gebruiker", "Overleg gebruiker", "Wikipedia", "Overleg Wikipedia", "Afbeelding", "Overleg afbeelding", "MediaWiki", "Overleg MediaWiki", "Sjabloon", "Overleg sjabloon", "Help", "Overleg help", "Categorie", "Overleg categorie"], "nn": ["Filpeikar", "Spesial", "Diskusjon", "Brukar", "Brukardiskusjon", "Wikipedia", "Wikipedia-diskusjon", "Fil", "Fildiskusjon", "MediaWiki", "MediaWiki-diskusjon", "Mal", "Maldiskusjon", "Hjelp", "Hjelpdiskusjon", "Kategori", "Kategoridiskusjon"], "no": ["Medium", "Spesial", "Diskusjon", "Bruker", "Brukerdiskusjon", "Wikipedia", "Wikipedia-diskusjon", "Bilde", "Bildediskusjon", "MediaWiki", "MediaWiki-diskusjon", "Mal", "Maldiskusjon", "Hjelp", "Hjelpdiskusjon", "Kategori", "Kategoridiskusjon"], "nv": [m, "Special", "Naaltsoos baa yinísht'į́", "Choinish'įįhí", "Choinish'įįhí baa yinísht'į́", "Wikiibíídiiya", "Wikiibíídiiya baa yinísht'į́", "E'elyaaígíí", "E'elyaaígíí baa yinísht'į́", "MediaWiki", "MediaWiki baa yinísht'į́", "Template", "Template talk", "Aná'álwo'", "Aná'álwo' baa yinísht'į́", "T'ááłáhági át'éego", "T'ááłáhági át'éego baa yinísht'į́"], "oc": ["Especial", "Discutir", "Utilisator", "Discutida Utilisator", "Oiquipedià", "Discutida Oiquipedià", "Image", "Discutida Image", "MediaWiki", "MediaWiki talk", "Template", "Template talk", m, "Help", "Help talk", "Category", "Category talk"], "os": [m, "Сæрмагонд", "Дискусси", "Архайæг", "Архайæджы дискусси", "Wikipedia", "0", "Ныв", "Нывы тыххæй дискусси", "MediaWiki", "Дискусси MediaWiki", "Шаблон", "Шаблоны тыххæй дискусси", "Æххуыс", "Æххуысы тыххæй дискусси", "Категори", "Категорийы тыххæй дискусси"], "pa": ["ਮੀਡੀਆ", "ਖਾਸ", "ਚਰਚਾ", "ਮੈਂਬਰ", "ਮੈਂਬਰ ਚਰਚਾ", "Wikipedia", "Wikipedia ਚਰਚਾ", "ਤਸਵੀਰ", "ਤਸਵੀਰ ਚਰਚਾ", "ਮੀਡੀਆਵਿਕਿ", "ਮੀਡੀਆਵਿਕਿ ਚਰਚਾ", "ਨਮੂਨਾ", "ਨਮੂਨਾ ਚਰਚਾ", "ਮਦਦ", "ਮਦਦ ਚਰਚਾ", "ਸ਼੍ਰੇਣੀ", "ਸ਼੍ਰੇਣੀ ਚਰਚਾ"], "pl": [m, "Specjalna", "Dyskusja", "Wikipedysta", "Dyskusja Wikipedysty", "Wikipedia", "Dyskusja Wikipedii", "Grafika", "Dyskusja grafiki", "MediaWiki", "Dyskusja MediaWiki", "Szablon", "Dyskusja szablonu", "Pomoc", "Dyskusja pomocy", "Kategoria", "Dyskusja kategorii", "Portal", "Dyskusja portalu"], "pt": [m, "Especial", "Discussão", "Usuário", "Usuário Discussão", "Wikipedia", "Wikipedia Discussão", "Imagem", "Imagem Discussão", "MediaWiki", "MediaWiki Discussão", "Predefinição", "Predefinição Discussão", "Ajuda", "Ajuda Discussão", "Categoria", "Categoria Discussão"], "ro": [m, "Special", "Discuţie", "Utilizator", "Discuţie Utilizator", "Wikipedia", "Discuţie Wikipedia", "Imagine", "Discuţie Imagine", "MediaWiki", "Discuţie MediaWiki", "Format", "Discuţie Format", "Ajutor", "Discuţie Ajutor", "Categorie", "Discuţie Categorie"], "ru": ["Медиа", "Служебная", "Обсуждение", "Участник", "Обсуждение участника", "Википедия", "Обсуждение Википедии", "Изображение", "Обсуждение изображения", "MediaWiki", "Обсуждение MediaWiki", "Шаблон", "Обсуждение шаблона", "Справка", "Обсуждение справки", "Категория", "Обсуждение категории"], "sc": ["Speciale", "Contièndha", "Utente", "Utente discussioni", "Wikipedia", "Wikipedia discussioni", "Immàgini", "Immàgini contièndha", m, "MediaWiki", "MediaWiki talk", "Template", "Template talk", "Help", "Help talk", "Category", "Category talk"], "sk": ["Médiá", "Špeciálne", "Diskusia", "Redaktor", "Diskusia s redaktorom", "Wikipédia", "Diskusia k Wikipédii", "Obrázok", "Diskusia k obrázku", "MediaWiki", "Diskusia k MediaWiki", "Šablóna", "Diskusia k šablóne", "Pomoc", "Diskusia k pomoci", "Kategória", "Diskusia ku kategórii"], "sl": [m, "Posebno", "Pogovor", "Uporabnik", "Uporabniški pogovor", "Wikipedija", "Pogovor k Wikipediji", "Slika", "Pogovor k sliki", "MediaWiki", "MediaWiki talk", "Template", "Template talk", "Help", "Help talk", "Category", "Category talk"], "sq": [m, "Speciale", "Diskutim", "Përdoruesi", "Përdoruesi diskutim", "Wikipedia", "Wikipedia diskutim", "Figura", "Figura diskutim", "MediaWiki", "MediaWiki diskutim", "Stampa", "Stampa diskutim", "Ndihmë", "Ndihmë diskutim", "Category", "Category talk"], "sr": [m, "Посебно", "Разговор", "Корисник", "Разговор са корисником", "Википедија", "Разговор о Википедији", "Слика", "Разговор о слици", "МедијаВики", "Разговор о МедијаВикију", "Шаблон", "Разговор о шаблону", "Помоћ", "Разговор о помоћи", "Категорија", "Разговор о категорији", "Портал", "Разговор о порталу"], "sv": [m, "Special", "Diskussion", "Användare", "Användardiskussion", "Wikipedia", "Wikipediadiskussion", "Bild", "Bilddiskussion", "MediaWiki", "MediaWiki diskussion", "Mall", "Malldiskussion", "Hjälp", "Hjälp diskussion", "Kategori", "Kategoridiskussion"], "ta": ["ஊடகம்", "சிறப்பு", "பேச்சு", "பயனர்", "பயனர் பேச்சு", "Wikipedia", "Wikipedia பேச்சு", "படிமம்", "படிமப் பேச்சு", "மீடியாவிக்கி", "மீடியாவிக்கி பேச்சு", "வார்ப்புரு", "வார்ப்புரு பேச்சு", "உதவி", "உதவி பேச்சு", "பகுப்பு", "பகுப்பு பேச்சு"], "th": [m, "พิเศษ", "พูดคุย", "ผู้ใช้", "คุยเกี่ยวกับผู้ใช้", "Wikipedia", "Wikipedia talk", "ภาพ", "คุยเกี่ยวกับภาพ", "MediaWiki", "คุยเกี่ยวกับ MediaWiki", "Template", "Template talk", "Help", "Help talk", "Category", "Category talk"], "tlh": ["Doch", "le'", "ja'chuq", "lo'wI'", "lo'wI' ja'chuq", "wIqIpe'DIya", "wIqIpe'DIya ja'chuq", "nagh beQ", "nagh beQ ja'chuq", "MediaWiki", "MediaWiki ja'chuq", "chen'ay'", "chen'ay' ja'chuq", "QaH", "QaH ja'chuq", "Segh", "Segh ja'chuq"], "tr": [m, "Özel", "Tartışma", "Kullanıcı", "Kullanıcı mesaj", "Vikipedi", "Vikipedi tartışma", "Resim", "Resim tartışma", "MedyaViki", "MedyaViki tartışma", "Şablon", "Şablon tartışma", "Yardım", "Yardım tartışma", "Kategori", "Kategori tartışma"], "tt": [m, "Maxsus", "Bäxäs", "Äğzä", "Äğzä bäxäse", "Wikipedia", "Wikipedia bäxäse", "Räsem", "Räsem bäxäse", "MediaWiki", "MediaWiki bäxäse", "Ürnäk", "Ürnäk bäxäse", "Yärdäm", "Yärdäm bäxäse", "Törkem", "Törkem bäxäse"], "uk": ["Медіа", "Спеціальні", "Обговорення", "Користувач", "Обговорення користувача", "Wikipedia", "Обговорення Wikipedia", "Зображення", "Обговорення зображення", "MediaWiki", "Обговорення MediaWiki", "Шаблон", "Обговорення шаблону", "Довідка", "Обговорення довідки", "Категорія", "Обговорення категорії"], "vi": ["Phương tiện", "Đặc biệt", "Thảo luận", "Thành viên", "Thảo luận Thành viên", "Wikipedia", "Thảo luận Wikipedia", "Hình", "Thảo luận Hình", "MediaWiki", "Thảo luận MediaWiki", "Tiêu bản", "Thảo luận Tiêu bản", "Trợ giúp", "Thảo luận Trợ giúp", "Thể loại", "Thảo luận Thể loại"], "wa": [m, "Sipeciås", "Copene", "Uzeu", "Uzeu copene", "Wikipedia", "Wikipedia copene", "Imådje", "Imådje copene", "MediaWiki", "MediaWiki copene", "Modele", "Modele copene", "Aidance", "Aidance copene", "Categoreye", "Categoreye copene"] //</NOLITE> }; pg.ns.list = nsLists[pg.wiki.lang] || list; pg.ns.index = nsIndex; } function namespaceListToRegex(list) {return RegExp('^('+list.join('|').split(' ').join('[ _]')+'):');}; // function setNamespaceList is ugly as sin, moved to later in the code function setNamespaces() { setNamespaceList(); pg.ns.withTalkList=[null]; // NB root (article) corresponds with this entry, null pg.ns.talkList=[pg.ns.list[2]]; // if the number of namespaces changes then this will have to be changed // maybe the easiest way is to specify the arrays by hand as in the comments following the loop for (var i=3; i+1<pg.ns.list.length; i=i+2) { pg.ns.withTalkList.push(pg.ns.list[i]); pg.ns.talkList.push(pg.ns.list[i+1]); } // ALERT! SILLY HARDCODED VALUES FOLLOW! pg.ns.special = pg.ns.list[pg.ns.index.Special]; pg.ns.image = pg.ns.list[pg.ns.index.Image]; pg.ns.user = pg.ns.list[pg.ns.index.User]; pg.ns.usertalk = pg.ns.list[pg.ns.index['User talk']]; pg.ns.category = pg.ns.list[pg.ns.index.Category]; pg.ns.template = pg.ns.list[pg.ns.index.Template]; pg.ns.nonArticleList=pg.ns.list.slice(0,2).concat(pg.ns.list.slice(2)); } function setRedirs() { var r='redirect'; var R='REDIRECT'; var redirLists={ //<NOLITE> 'ar': [ R, 'تحويل' ], 'be': [ r, 'перанакіраваньне' ], 'bg': [ r, 'пренасочване', 'виж' ], 'bs': [ r, 'Preusmjeri', 'preusmjeri', 'PREUSMJERI' ], 'cs': [ R, 'PŘESMĚRUJ' ], 'cy': [ r, 'ail-cyfeirio' ], 'et': [ r, 'suuna' ], 'ga': [ r, 'athsheoladh' ], 'he': [ R, 'הפניה' ], 'is': [ r, 'tilvísun', 'TILVÍSUN' ], 'mk': [ r, 'пренасочување', 'види' ], 'nds': [ r, 'wiederleiden' ], 'nn': [ r, 'omdiriger' ], 'pt': [ R, 'redir' ], 'ru': [ R, 'ПЕРЕНАПРАВЛЕНИЕ', 'ПЕРЕНАПР' ], 'sk': [ r, 'presmeruj' ], 'sr': [ r, 'Преусмери', 'преусмери', 'ПРЕУСМЕРИ', 'Preusmeri', 'preusmeri', 'PREUSMERI' ], 'tt': [ 'yünältü' ], 'vi': [ r, 'đổi' ] // no comma //</NOLITE> }; var redirList=redirLists[ pg.wiki.lang ] || [r, R]; // Mediawiki is very tolerant about what comes after the #redirect at the start pg.re.redirect=RegExp('^\\s*[#](' + redirList.join('|') + ').*?\\[{2}([^\\|\\]]*)(|[^\\]]*)?\\]{2}\\s*(.*)', 'i'); } function setInterwiki() { if (pg.wiki.wikimedia) { pg.wiki.interwiki='aa|ab|af|ak|als|am|an|ang|ar|arc|as|ast|av|ay|az|ba|be|ber|bg|bh|bi|bm|bn|bdf|bo|br|bs|ca|ce|ceb|ch|cho|chr|chy|co|commons|cr|cs|csb|cu|cv|cy|da|de|dv|dz|el|en|eo|es|et|eu|fa|ff|fi|fiu-vro|fj|fo|fr|fur|fy|ga|gd|gil|gl|gn|got|gu|gv|ha|haw|he|hi|ho|hr|ht|hu|hy|hz|ia|id|ie|ig|ii|ik|io|is|it|iu|ja|jbo|jv|ka|kg|ki|kj|kk|kl|km|kn|ko|kr|ks|ku|kv|kw|ky|la|lad|lan|lb|lg|li|ln|lo|lt|lu|lv|mg|mh|mi|mk|ml|mn|mo|mr|ms|mt|mus|my|na|nah|nap|nb|nd|nds|ne|ng|nl|nn|no|nr|nv|ny|oc|oj|om|or|os|pa|pam|pi|pl|ps|pt|qu|rm|rn|ro|roa-rup|ru|rw|sa|sc|scn|sco|sd|se|sg|sh|si|simple|sk|sl|sm|smg|sn|so|sq|sr|ss|st|su|sv|sw|ta|te|tg|th|ti|tk|tl|tlh|tn|to|tpi|tr|ts|tt|tum|tw|ty|ug|uk|ur|uz|ve|vi|vk|vo|wa|war|wen|wo|xh|yi|yo|za|zh|zh-min-nan|zu'; pg.re.interwiki=RegExp('^'+pg.wiki.interwiki+':'); } else { pg.wiki.interwiki=null; pg.re.interwiki=RegExp('^$'); } } function nsRe(label) { var l=upcaseFirst(label); return nsRegexString(pg.ns.list[pg.ns.index[l]], l); } function nsRegexString(str, extra) { return '(?:' + str + '|' + encodeURI(str) + (extra ? '|' + extra : '') + ')'; } function nsRegex(str, extra) { return RegExp(nsRegexString(str, extra)); } // ENDFILE: namespaces.js // STARTFILE: selpop.js //<NOLITE> function getEditboxSelection() { // see http://www.webgurusforum.com/8/12/0 try { var editbox=document.editform.wpTextbox1; } catch (dang) { return; } // IE, Opera if (document.selection) { return document.selection.createRange().text; } // Mozilla var selStart = editbox.selectionStart; var selEnd = editbox.selectionEnd; return (editbox.value).substring(selStart, selEnd); } function doSelectionPopup() { // popup if the selection looks like [[foo|anything afterwards at all // or [[foo|bar]]text without ']]' // or [[foo|bar]] var sel=getEditboxSelection(); var open=sel.indexOf('[['); var pipe=sel.indexOf('|'); var close=sel.indexOf(']]'); if (open == -1 || ( pipe == -1 && close == -1) ) { return; } if (pipe != -1 && open > pipe || close != -1 && open > close) { return; } if (getValueOf('popupOnEditSelection')=='boxpreview') { return doSeparateSelectionPopup(sel); } var article=new Title(sel.substring(open+2, (pipe < 0) ? close : pipe)).urlString(); if (close > 0 && sel.substring(close+2).indexOf('[[') >= 0) { return; } var a=document.createElement('a'); a.href=pg.wiki.titlebase + article; mouseOverWikiLink2(a); if (a.navpopup) { a.navpopup.addHook(function(){runStopPopupTimer(a.navpopup);}, 'unhide', 'after'); } } function doSeparateSelectionPopup(str) { var div=document.getElementById('selectionPreview'); if (!div) { div = document.createElement('div'); div.id='selectionPreview'; try { var box=document.editform.wpTextbox1; } catch (oopsie) { return; } box.parentNode.insertBefore(div, box); } div.innerHTML=wiki2html(str); div.ranSetupTooltipsAlready = false; popTipsSoonFn('selectionPreview')(); } //</NOLITE> // ENDFILE: selpop.js // STARTFILE: navpopup.js /** @fileoverview Defines two classes: {@link Navpopup} and {@link Mousetracker}. <code>Navpopup</code> describes popups: when they appear, where, what they look like and so on. <code>Mousetracker</code> "captures" the mouse using <code>document.onmousemove</code>. */ /** Creates a new Mousetracker. @constructor @class The Mousetracker class. This monitors mouse movements and manages associated hooks. */ function Mousetracker() { /** Interval to regularly run the hooks anyway, in milliseconds. @type Integer */ this.loopDelay=400; /** Timer for the loop. @type Timer */ this.timer=null; /** Flag - are we switched on? @type Boolean */ this.active=false; /** Flag - are we probably inaccurate, i.e. not reflecting the actual mouse position? */ this.dirty=true; /** Array of hook functions. @private @type Array */ this.hooks=[]; } /** Adds a hook, to be called when we get events. @param {Function} f A function which is called as <code>f(x,y)</code>. It should return <code>true</code> when it wants to be removed, and <code>false</code> otherwise. */ Mousetracker.prototype.addHook = function (f) { this.hooks.push(f); }; /** Runs hooks, passing them the x and y coords of the mouse. Hook functions that return true are passed to {@link Mousetracker#removeHooks} for removal. @private */ Mousetracker.prototype.runHooks = function () { if (!this.hooks || !this.hooks.length) { return; } //log('Mousetracker.runHooks; we got some hooks to run'); var remove=false; var removeObj={}; // this method gets called a LOT - // pre-cache some variables var x=this.x, y=this.y, len = this.hooks.length; for (var i=0; i<len; ++i) { //~ run the hook function, and remove it if it returns true if (this.hooks[i](x, y)===true) { remove=true; removeObj[i]=true; } } if (remove) { this.removeHooks(removeObj); } }; /** Removes hooks. @private @param {Object} removeObj An object whose keys are the index numbers of functions for removal, with values that evaluate to true */ Mousetracker.prototype.removeHooks = function(removeObj) { var newHooks=[]; var len = this.hooks.length; for (var i=0; i<len; ++i) { if (! removeObj[i]) { newHooks.push(this.hooks[i]); } } this.hooks=newHooks; }; /** Event handler for mouse wiggles. We simply grab the event, set x and y and run the hooks. This makes the cpu all hot and bothered :-( @private @param {Event} e Mousemove event */ Mousetracker.prototype.track=function (e) { //~ Apparently this is needed in IE. e = e || window.event; var x, y; if (e) { if (e.pageX) { x=e.pageX; y=e.pageY; } else if (typeof e.clientX!='undefined') { var left, top, docElt = window.document.documentElement; if (docElt) { left=docElt.scrollLeft; } left = left || window.document.body.scrollLeft || window.document.scrollLeft || 0; if (docElt) { top=docElt.scrollTop; } top = top || window.document.body.scrollTop || window.document.scrollTop || 0; x=e.clientX + left; y=e.clientY + top; } else { return; } this.setPosition(x,y); } }; /** Sets the x and y coordinates stored and takes appropriate action, running hooks as appropriate. @param {Integer} x, y Screen coordinates to set */ Mousetracker.prototype.setPosition=function(x,y) { this.x = x; this.y = y; if (this.dirty || this.hooks.length === 0) { this.dirty=false; return; } if (typeof this.lastHook_x != 'number') { this.lastHook_x = -100; this.lastHook_y=-100; } var diff = (this.lastHook_x - x)*(this.lastHook_y - y); diff = (diff >= 0) ? diff : -diff; if ( diff > 1 ) { this.lastHook_x=x; this.lastHook_y=y; if (this.dirty) { this.dirty = false; } else { this.runHooks(); } } } /** Sets things in motion, unless they are already that is, registering an event handler on <code>document.onmousemove</code>. A half-hearted attempt is made to preserve the old event handler if there is one. */ Mousetracker.prototype.enable = function () { if (this.active) { return; } this.active=true; //~ Save the current handler for mousemove events. This isn't too //~ robust, of course. this.savedHandler=document.onmousemove; //~ Gotta save @tt{this} again for the closure, and use apply for //~ the member function. var savedThis=this; document.onmousemove=function (e) {savedThis.track.apply(savedThis, [e]);}; if (this.loopDelay) { this.timer = setInterval(function() { //log('loop delay in mousetracker is working'); savedThis.runHooks();}, this.loopDelay); } }; /** Disables the tracker, removing the event handler. */ Mousetracker.prototype.disable = function () { if (!this.active) { return; } if (typeof this.savedHandler=='function') { document.onmousemove=this.savedHandler; } else { delete document.onmousemove; } if (this.timer) { clearInterval(this.timer); } this.active=false; }; /** Creates a new Navpopup. Gets a UID for the popup and @param init Contructor object. If <code>init.draggable</code> is true or absent, the popup becomes draggable. @constructor @class The Navpopup class. This generates popup hints, and does some management of them. */ function Navpopup(init) { //alert('new Navpopup(init)'); /** UID for each Navpopup instance. Read-only. @type integer */ this.uid=Navpopup.uid++; /** Read-only flag for current visibility of the popup. @type boolean @private */ this.visible=false; /** Flag to be set when we want to cancel a previous request to show the popup in a little while. @private @type boolean */ this.noshow=false; /** Categorised list of hooks. @see #runHooks @see #addHook @private @type Object */ this.hooks={ 'create': [], 'unhide': [], 'hide': [] }; /** list of unique IDs of hook functions, to avoid duplicates @private */ this.hookIds={}; /** List of downloads associated with the popup. @private @type Array */ this.downloads=[]; /** Number of uncompleted downloads. @type integer */ this.pending=null; /** Tolerance in pixels when detecting whether the mouse has left the popup. @type integer */ this.fuzz=5; /** Flag to toggle running {@link #limitHorizontalPosition} to regulate the popup's position. @type boolean */ this.constrained=true; /** The popup width in pixels. @private @type integer */ this.width=0; /** The popup width in pixels. @private @type integer */ this.height=0; /** The main content DIV element. @type HTMLDivElement */ this.mainDiv=null; this.createMainDiv(); // if (!init || typeof init.draggable=='undefined' || init.draggable) { // this.makeDraggable(true); // } } /** A UID for each Navpopup. This constructor property is just a counter. @type integer @private */ Navpopup.uid=0; /** Retrieves the {@link #visible} attribute, indicating whether the popup is currently visible. @type boolean */ Navpopup.prototype.isVisible=function() { return this.visible; }; /** Repositions popup using CSS style. @private @param {integer} x x-coordinate (px) @param {integer} y y-coordinate (px) @param {boolean} noLimitHor Don't call {@link #limitHorizontalPosition} */ Navpopup.prototype.reposition= function (x,y, noLimitHor) { log ('reposition('+x+','+y+','+noLimitHor+')'); if (typeof x != 'undefined' && x!==null) { this.left=x; } if (typeof y != 'undefined' && y!==null) { this.top=y; } if (typeof this.left != 'undefined' && typeof this.top != 'undefined') { this.mainDiv.style.left=this.left + 'px'; this.mainDiv.style.top=this.top + 'px'; } if (!noLimitHor) { this.limitHorizontalPosition(); } //console.log('navpop'+this.uid+' - (left,top)=(' + this.left + ',' + this.top + '), css=(' //+ this.mainDiv.style.left + ',' + this.mainDiv.style.top + ')'); }; /** Prevents popups from being in silly locations. Hopefully. Should not be run if {@link #constrained} is true. @private */ Navpopup.prototype.limitHorizontalPosition=function() { if (!this.constrained || this.tooWide) { return; } this.updateDimensions(); var x=this.left; var w=this.width; var cWidth=document.body.clientWidth; // log('limitHorizontalPosition: x='+x+ // ', this.left=' + this.left + // ', this.width=' + this.width + // ', cWidth=' + cWidth); if ( (x+w) >= cWidth || ( x > 0 && this.maxWidth && this.width < this.maxWidth && this.height > this.width && x > cWidth - this.maxWidth ) ) { // This is a very nasty hack. There has to be a better way! // We find the "natural" width of the div by positioning it at the far left // then reset it so that it should be flush right (well, nearly) this.mainDiv.style.left='-10000px'; this.mainDiv.style.width = this.maxWidth + 'px'; var naturalWidth=parseInt(this.mainDiv.offsetWidth, 10); var newLeft=cWidth - naturalWidth - 1; if (newLeft < 0) { newLeft = 0; this.tooWide=true; } // still unstable for really wide popups? log ('limitHorizontalPosition: moving to ('+newLeft + ','+ this.top+');' + ' naturalWidth=' + naturalWidth + ', clientWidth=' + cWidth); this.reposition(newLeft, null, true); } }; /** Counter indicating the z-order of the "highest" popup. We start the z-index at 1000 so that popups are above everything else on the screen. @private @type integer */ Navpopup.highest=1000; /** Brings popup to the top of the z-order. We increment the {@link #highest} property of the contructor here. @private */ Navpopup.prototype.raise = function () { this.mainDiv.style.zIndex=Navpopup.highest + 1; ++Navpopup.highest; }; /** Shows the popup provided {@link #noshow} is not true. Updates the position, brings the popup to the top of the z-order and unhides it. */ Navpopup.prototype.show = function () { //document.title+='s'; if (this.noshow) { return; } //document.title+='t'; this.reposition(); this.raise(); this.unhide(); }; /** Runs the {@link #show} method in a little while, unless we're already visible. @param {integer} time Delay in milliseconds @see #showSoonIfStable */ Navpopup.prototype.showSoon = function (time) { if (this.visible) { return; } this.noshow=false; //~ We have to save the value of @tt{this} so that the closure below //~ works. var savedThis=this; //this.start_x = Navpopup.tracker.x; //this.start_y = Navpopup.tracker.y; setTimeout(function () { if (Navpopup.tracker.active) { savedThis.reposition.apply(savedThis, [Navpopup.tracker.x + 2, Navpopup.tracker.y + 2]); } //~ Have to use apply to invoke his member function here savedThis.show.apply(savedThis, []); }, time); }; /** Checks to see if the mouse pointer has stabilised (checking every <code>time</code>/2 milliseconds) and runs the {@link #show} method if it has. This method makes {@link #showSoon} redundant. @param {integer} time The minimum time (ms) before the popup may be shown. */ Navpopup.prototype.showSoonIfStable = function (time) { log ('showSoonIfStable, time='+time); if (this.visible) { return; } this.noshow = false; //~ initialize these variables so that we never run @tt{show} after //~ just half the time this.stable_x = -10000; this.stable_y = -10000; var stableShow = function() { log('stableShow called'); var new_x = Navpopup.tracker.x, new_y = Navpopup.tracker.y; var dx = savedThis.stable_x - new_x, dy = savedThis.stable_y - new_y; var fuzz2 = 0; // savedThis.fuzz * savedThis.fuzz; //document.title += '[' + [savedThis.stable_x,new_x, savedThis.stable_y,new_y, dx, dy, fuzz2].join(',') + '] '; if ( dx * dx <= fuzz2 && dy * dy <= fuzz2 ) { log ('mouse is stable'); clearInterval(savedThis.showSoonStableTimer); savedThis.reposition.apply(savedThis, [new_x + 2, new_y + 2]); savedThis.show.apply(savedThis, []); return; } savedThis.stable_x = new_x; savedThis.stable_y = new_y; }; var savedThis = this; this.showSoonStableTimer = setInterval(stableShow, time/2); }; /** Makes the popup unhidable until we call {@link #unstick}. */ Navpopup.prototype.stick=function() { this.noshow=false; this.sticky=true; }; /** Allows the popup to be hidden. */ Navpopup.prototype.unstick=function() { this.sticky=false; }; /** Sets the {@link #noshow} flag and hides the popup. This should be called when the mouse leaves the link before (or after) it's actually been displayed. */ Navpopup.prototype.banish = function () { log ('banish called'); // hide and prevent showing with showSoon in the future this.noshow=true; if (this.showSoonStableTimer) { log('clearing showSoonStableTimer'); clearInterval(this.showSoonStableTimer); } this.hide(); }; /** Runs hooks added with {@link #addHook}. @private @param {String} key Key name of the {@link #hooks} array - one of 'create', 'unhide', 'hide' @param {String} when Controls exactly when the hook is run: either 'before' or 'after' */ Navpopup.prototype.runHooks = function (key, when) { if (!this.hooks[key]) { return; } var keyHooks=this.hooks[key]; var len=keyHooks.length; for (var i=0; i< len; ++i) { if (keyHooks[i] && keyHooks[i].when == when) { if (keyHooks[i].hook.apply(this, [])) { // remove the hook if (keyHooks[i].hookId) { delete this.hookIds[keyHooks[i].hookId]; } keyHooks[i]=null; } } } }; /** Adds a hook to the popup. Hook functions are run with <code>this</code> set to refer to the Navpopup instance, and no arguments. @param {Function} hook The hook function. Functions that return true are deleted. @param {String} key Key name of the {@link #hooks} array - one of 'create', 'unhide', 'hide' @param {String} when Controls exactly when the hook is run: either 'before' or 'after' @param {String} uid A truthy string identifying the hook function; if it matches another hook in this position, it won't be added again. */ Navpopup.prototype.addHook = function ( hook, key, when, uid ) { when = when || 'after'; if (!this.hooks[key]) { return; } // if uid is specified, don't add duplicates var hookId=null; if (uid) { hookId=[key,when,uid].join('|'); if (this.hookIds[hookId]) { return; } this.hookIds[hookId]=true; } this.hooks[key].push( {hook: hook, when: when, hookId: hookId} ); }; /** Creates the main DIV element, which contains all the actual popup content. Runs hooks with key 'create'. @private */ Navpopup.prototype.createMainDiv = function () { if (this.mainDiv) { return; } this.runHooks('create', 'before'); var mainDiv=document.createElement('div'); var savedThis=this; mainDiv.onclick=function(e) {savedThis.onclickHandler(e);}; mainDiv.className=(this.className) ? this.className : 'navpopup_maindiv'; mainDiv.id=mainDiv.className + this.uid; mainDiv.style.position='absolute'; mainDiv.style.display='none'; mainDiv.className='navpopup'; // easy access to javascript object through DOM functions mainDiv.navpopup=this; this.mainDiv=mainDiv; document.body.appendChild(mainDiv); this.runHooks('create', 'after'); }; /** Calls the {@link #raise} method. @private */ Navpopup.prototype.onclickHandler=function(e) { this.raise(); }; /** Makes the popup draggable, using a {@link Drag} object. @private */ Navpopup.prototype.makeDraggable=function(handleName) { if (!this.mainDiv) { this.createMainDiv(); } var drag=new Drag(); if (!handleName) { drag.startCondition=function(e) { try { if (!e.shiftKey) { return false; } } catch (err) { return false; } return true; }; } var dragHandle = document.getElementById(handleName) || this.mainDiv; var np=this; drag.endHook=function(x,y) { Navpopup.tracker.dirty=true; np.reposition(x,y); }; drag.init(dragHandle,this.mainDiv); }; /** Hides the popup using CSS. Runs hooks with key 'hide'. Sets {@link #visible} appropriately. {@link #banish} should be called externally instead of this method. @private */ Navpopup.prototype.hide = function () { this.runHooks('hide', 'before'); this.abortDownloads(); if (this.sticky) { return; } if (typeof this.visible != 'undefined' && this.visible) { this.mainDiv.style.display='none'; this.visible=false; } this.runHooks('hide', 'after'); }; /** Shows the popup using CSS. Runs hooks with key 'unhide'. Sets {@link #visible} appropriately. {@link #show} should be called externally instead of this method. @private */ Navpopup.prototype.unhide = function () { this.runHooks('unhide', 'before'); if (typeof this.visible != 'undefined' && !this.visible) { this.mainDiv.style.display='inline'; this.visible=true; } this.runHooks('unhide', 'after'); }; /** Sets the <code>innerHTML</code> attribute of the main div containing the popup content. @param {String} html The HTML to set. */ Navpopup.prototype.setInnerHTML = function (html) { this.mainDiv.innerHTML = html; }; /** Updates the {@link #width} and {@link #height} attributes with the CSS properties. @private */ Navpopup.prototype.updateDimensions = function () { this.width=parseInt(this.mainDiv.offsetWidth, 10); this.height=parseInt(this.mainDiv.offsetHeight, 10); }; /** Checks if the point (x,y) is within {@link #fuzz} of the {@link #mainDiv}. @param {integer} x x-coordinate (px) @param {integer} y y-coordinate (px) @type boolean */ Navpopup.prototype.isWithin = function(x,y) { //~ If we're not even visible, no point should be considered as //~ being within the popup. if (!this.visible) { return false; } this.updateDimensions(); var fuzz=this.fuzz || 0; //~ Use a simple box metric here. return (x+fuzz >= this.left && x-fuzz <= this.left + this.width && y+fuzz >= this.top && y-fuzz <= this.top + this.height); }; /** Adds a download to {@link #downloads}. @param {Downloader} download */ Navpopup.prototype.addDownload=function(download) { if (!download) { return; } this.downloads.push(download); }; /** Aborts the downloads listed in {@link #downloads}. @see Downloader#abort */ Navpopup.prototype.abortDownloads=function() { for(var i=0; i<this.downloads.length; ++i) { var d=this.downloads[i]; if (d && d.abort) { d.abort(); } } this.downloads=[]; }; /** A {@link Mousetracker} instance which is a property of the constructor (pseudo-global). */ Navpopup.tracker=new Mousetracker(); // ENDFILE: navpopup.js // STARTFILE: diff.js //<NOLITE> /* * Javascript Diff Algorithm * By John Resig (http://ejohn.org/) and [[:en:User:Lupin]] * * More Info: * http://ejohn.org/projects/javascript-diff-algorithm/ */ function delFmt(x) { if (!x.length) { return ''; } return "<del class='popupDiff'>" + x.join('').split('\n').join('&para;\n') +"</del>"; } function insFmt(x) { if (!x.length) { return ''; } return "<ins class='popupDiff'>" + x.join('').split('\n').join('&para;\n') +"</ins>"; } function countCrossings(a, b, i, eject) { // count the crossings on the edge starting at b[i] if (!b[i].row && b[i].row !== 0) { return -1; } var count=0; for (var j=0; j<a.length; ++j) { if (!a[j].row && a[j].row !== 0) { continue; } if ( (j-b[i].row)*(i-a[j].row) > 0) { if(eject) { return true; } count++; } } return count; } function shortenDiffString(str, context) { var re=RegExp('(<del[\\s\\S]*?</del>|<ins[\\s\\S]*?</ins>)'); var splitted=str.parenSplit(re); var ret=['']; for (var i=0; i<splitted.length; i+=2) { if (splitted[i].length < 2*context) { ret[ret.length-1] += splitted[i]; if (i+1<splitted.length) { ret[ret.length-1] += splitted[i+1]; } continue; } else { if (i > 0) { ret[ret.length-1] += splitted[i].substring(0,context); } if (i+1 < splitted.length) { ret.push(splitted[i].substring(splitted[i].length-context) + splitted[i+1]); } } } while (ret.length > 0 && !ret[0]) { ret = ret.slice(1); } return ret; } function diffString( o, n, simpleSplit ) { var splitRe=RegExp('([[]{2}|[\]]{2}|[{]{2,3}|[}]{2,3}|[|]|=|[*:]+|\\s|\\b)'); o=o.entify(); n=n.entify(); var out, i; if (simpleSplit) { out = diff( o.split(/\b/), n.split(/\b/) ); } else { out = diff( o.parenSplit(splitRe), n.parenSplit(splitRe) ); } var str = ""; var acc=[]; // accumulator for prettier output // crossing pairings -- eg 'A B' vs 'B A' -- cause problems, so let's iron them out // this doesn't always do things optimally but it should be fast enough var maxOutputPair=0; for (i=0; i<out.n.length; ++i) { if ( out.n[i].paired ) { if( maxOutputPair > out.n[i].row ) { // tangle - delete pairing out.o[ out.n[i].row ]=out.o[ out.n[i].row ].text; out.n[i]=out.n[i].text; } if (maxOutputPair < out.n[i].row) { maxOutputPair = out.n[i].row; } } } // output the stuff preceding the first paired old line for (i=0; i<out.o.length && !out.o[i].paired; ++i) { acc.push( out.o[i] ); } str += delFmt(acc); acc=[]; // main loop for ( i = 0; i < out.n.length; ++i ) { // output unpaired new "lines" while ( i < out.n.length && !out.n[i].paired ) { acc.push( out.n[i++] ); } str += insFmt(acc); acc=[]; if ( i < out.n.length ) { // this new "line" is paired with the (out.n[i].row)th old "line" str += out.n[i].text; // output unpaired old rows starting after this new line's partner var m = out.n[i].row + 1; while ( m < out.o.length && !out.o[m].paired ) { acc.push ( out.o[m++] ); } str += delFmt(acc); acc=[]; } } return str; } // see http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Object // FIXME: use obj.hasOwnProperty instead of this kludge! window.jsReservedProperties=RegExp('^(constructor|prototype|__((define|lookup)[GS]etter)__' + '|eval|hasOwnProperty|propertyIsEnumerable' + '|to(Source|String|LocaleString)|(un)?watch|valueOf)$'); function diffBugAlert(word) { if (!diffBugAlert.list[word]) { diffBugAlert.list[word]=1; alert('Bad word: '+word+'\n\nPlease report this bug.'); } } diffBugAlert.list={}; function makeDiffHashtable(src) { var ret={}; for ( var i = 0; i < src.length; i++ ) { if ( jsReservedProperties.test(src[i]) ) { src[i] += '<!-- -->'; } if ( !ret[ src[i] ] ) { ret[ src[i] ] = []; } try { ret[ src[i] ].push( i ); } catch (err) { diffBugAlert(src[i]); } } return ret; } function diff( o, n ) { // pass 1: make hashtable ns with new rows as keys var ns = makeDiffHashtable(n); // pass 2: make hashtable os with old rows as keys var os = makeDiffHashtable(o); // pass 3: pair unique new rows and matching unique old rows var i; for ( i in ns ) { if ( ns[i].length == 1 && os[i] && os[i].length == 1 ) { n[ ns[i][0] ] = { text: n[ ns[i][0] ], row: os[i][0], paired: true }; o[ os[i][0] ] = { text: o[ os[i][0] ], row: ns[i][0], paired: true }; } } // pass 4: pair matching rows immediately following paired rows (not necessarily unique) for ( i = 0; i < n.length - 1; i++ ) { if ( n[i].paired && ! n[i+1].paired && n[i].row + 1 < o.length && ! o[ n[i].row + 1 ].paired && n[i+1] == o[ n[i].row + 1 ] ) { n[i+1] = { text: n[i+1], row: n[i].row + 1, paired: true }; o[n[i].row+1] = { text: o[n[i].row+1], row: i + 1, paired: true }; } } // pass 5: pair matching rows immediately preceding paired rows (not necessarily unique) for ( i = n.length - 1; i > 0; i-- ) { if ( n[i].paired && ! n[i-1].paired && n[i].row > 0 && ! o[ n[i].row - 1 ].paired && n[i-1] == o[ n[i].row - 1 ] ) { n[i-1] = { text: n[i-1], row: n[i].row - 1, paired: true }; o[n[i].row-1] = { text: o[n[i].row-1], row: i - 1, paired: true }; } } return { o: o, n: n }; } //</NOLITE> // ENDFILE: diff.js // STARTFILE: init.js function setSiteInfo() { if (window.popupLocalDebug) { pg.wiki.hostname = 'en.wikipedia.org'; } else { pg.wiki.hostname = location.hostname; // use in preference to location.hostname for flexibility (?) } pg.wiki.wikimedia=RegExp('(wiki([pm]edia|source|books|news|quote|versity)|wiktionary)[.]org').test(pg.wiki.hostname); pg.wiki.wikia=RegExp('[.]wikia[.]com$', 'i').test(pg.wiki.hostname); pg.wiki.isLocal=RegExp('^localhost').test(pg.wiki.hostname); pg.wiki.commons=( pg.wiki.wikimedia && pg.wiki.hostname != 'commons.wikimedia.org') ? 'commons.wikimedia.org' : null; pg.wiki.commonslang = pg.wiki.commons ? pg.wiki.commons.split('.')[0] : null; pg.wiki.lang = pg.wiki.hostname.split('.')[0]; // toolDbName needs pg.wiki.lang and pg.wiki.hostname window.toolDbName && (pg.wiki.userNameCookie=toolDbName(true) + 'UserName'); pg.wiki.prePath=''; if (pg.wiki.hostname == 'secure.wikimedia.org') { var s=document.location.href.split('/'); pg.wiki.prePath=s.slice(3,5).join('/'); pg.wiki.lang=s[4]; } var port = location.port ? ':' + location.port : ''; pg.wiki.sitebase = joinPath([pg.wiki.hostname + port, pg.wiki.prePath]); } function getArticlePath() { if (isFunction(window.siteArticlePath)) { return siteArticlePath(); } return 'wiki'; } function getBotInterfacePath() { if (isFunction(window.siteBotInterfacePath)) { return siteBotInterfacePath(); } var botInterfacePath = pg.wiki.articlePath.replace(/\/index[.]php$/, ''); if (pg.wiki.wikimedia) { botInterfacePath = 'w'; } // as in http://some.thing.com/w/index.php?title=foo else if (pg.wiki.wikia) { botInterfacePath = ''; } return botInterfacePath; } function setTitleBase() { var protocol = ( window.popupLocalDebug ? 'http:' : location.protocol ); pg.wiki.articlePath = getArticlePath(); // as in http://some.thing.com/wiki/Article pg.wiki.botInterfacePath = getBotInterfacePath(); // default mediawiki setting is paths like http://some.thing.com/articlePath/index.php?title=foo var titletail = joinPath([pg.wiki.botInterfacePath, 'index.php?title=']); var titletail2 = joinPath([pg.wiki.botInterfacePath, 'wiki.phtml?title=']); // other sites may need to add code here to set titletail depending on how their urls work pg.wiki.titlebase = protocol + '//' + joinPath([pg.wiki.sitebase, titletail]); pg.wiki.titlebase2 = protocol + '//' + joinPath([pg.wiki.sitebase, titletail2]); pg.wiki.wikibase = protocol + '//' + joinPath([pg.wiki.sitebase, pg.wiki.botInterfacePath]); pg.wiki.articlebase = protocol + '//' + joinPath([pg.wiki.sitebase, pg.wiki.articlePath]); pg.re.basenames = RegExp( '^(' + map( literalizeRegex, [ pg.wiki.titlebase, pg.wiki.titlebase2, pg.wiki.articlebase ]).join('|') + ')' ); } ////////////////////////////////////////////////// // Global regexps function setMainRegex() { var reStart='[^:]*://'; var preTitles = joinPath([literalizeRegex(pg.wiki.botInterfacePath), '(?:index[.]php|wiki[.]phtml)[?]title=']); // slightly ugly hack when pg.wiki.articlePath is empty preTitles += '|' + literalizeRegex( ( pg.wiki.articlePath ? pg.wiki.articlePath + '/' : '')); var reEnd='/(' + preTitles + ')([^&?#]*)[^#]*(?:#(.+))?'; pg.re.main = RegExp(reStart + literalizeRegex(pg.wiki.sitebase) + reEnd); } function setRegexps() { setMainRegex(); var sp=nsRe('Special'); pg.re.urlNoPopup=RegExp('((title=|/)' + sp + '(?:%3A|:)|section=[0-9])') ; pg.re.contribs =RegExp('(title=|/)' + sp + '(?:%3A|:)Contributions' + '(&target=|/|/' + pg.ns.user+':)(.*)') ; pg.re.email =RegExp('(title=|/)' + sp + '(?:%3A|:)Emailuser' + '(&target=|/|/(?:' + pg.ns.user+':)?)(.*)') ; pg.re.backlinks =RegExp('(title=|/)' + sp + '(?:%3A|:)Whatlinkshere' + '(&target=|/)([^&]*)'); //<NOLITE> var im=nsRe('Image'); // note: tries to get images in infobox templates too, e.g. movie pages, album pages etc // (^|\[\[)image: *([^|\]]*[^|\] ]) * // (^|\[\[)image: *([^|\]]*[^|\] ])([^0-9\]]*([0-9]+) *px)? // $4 = 120 as in 120px pg.re.image = RegExp('(^|\\[\\[)' + im + ': *([^|\\]]*[^|\\] ])' + '([^0-9\\]]*([0-9]+) *px)?|(?:\\n *[|]?|[|]) *' + '(' + getValueOf('popupImageVarsRegexp') + ')' + ' *= *(?:\\[\\[ *)?(?:' + im + ':)?' + '([^|]*?)(?:\\]\\])? *[|]? *\\n', 'img') ; pg.re.imageBracketCount = 6; pg.re.category = RegExp('\\[\\[' +nsRe('Category') + ': *([^|\\]]*[^|\\] ]) *', 'i'); pg.re.categoryBracketCount = 1; pg.re.ipUser=RegExp('('+nsRe('User')+':)?' + '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}' + '(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])'); pg.re.stub= RegExp(getValueOf('popupStubRegexp'), 'im'); pg.re.disambig=RegExp(getValueOf('popupDabRegexp'), 'im'); //</NOLITE> // FIXME replace with general parameter parsing function, this is daft pg.re.oldid=RegExp('[?&]oldid=([^&]*)'); pg.re.diff=RegExp('[?&]diff=([^&]*)'); } //<NOLITE> ////////////////////////////////////////////////// // Image sources function setImageSources() { pg.wiki.imageSources=[]; // frequently seen thumbs pg.wiki.imageSources.push( {wiki: pg.wiki.hostname, thumb: true, width: 180}, // default {wiki: pg.wiki.hostname, thumb: true, width: 120} // gallery ); // frequently seen thumbs on commons if (pg.wiki.commons) { pg.wiki.imageSources.push( {wiki: pg.wiki.commons, thumb: true, width: 180}, {wiki: pg.wiki.commons, thumb: true, width: 120} ); } // unusual thumb sizes and full-size pg.wiki.imageSources.push( {wiki: pg.wiki.hostname, thumb: true, width: 200}, // common? {wiki: pg.wiki.hostname, thumb: true, width: 250}, // common? {wiki: pg.wiki.hostname, thumb: true, width: 300}, {wiki: pg.wiki.hostname, thumb: true, width: 210}, {wiki: pg.wiki.hostname, thumb: true, width: 230}, {wiki: pg.wiki.hostname, thumb: false, width: 0} // no comma ); // full-size on commons if (pg.wiki.commons) { pg.wiki.imageSources.push({wiki: pg.wiki.commons, thumb: false, width: 0}); } } //</NOLITE> ////////////////////////////////////////////////// // miscellany function setupCache() { // page caching pg.cache.pages = []; pg.cache.images = []; // global array for 404'ed image urls pg.cache.badImageUrls=[]; } function setMisc() { pg.current.link=null; pg.current.links=[]; pg.current.linksHash={}; // downloading images are put here pg.misc.imageArray=[]; setupCache(); // FIXME what is this for? pg.misc.gImage=null; // global for image // check to see if images are done with this timer pg.timer.image=null; // These are for checkImages() pg.counter.checkImages=0; pg.timer.checkImages=null; pg.timer.checkPopupPosition=null; pg.counter.loop=0; // ids change with each popup: popupImage0, popupImage1 etc pg.idNumber=0; // for myDecodeURI pg.misc.decodeExtras = [ {from: '%2C', to: ',' }, {from: '_', to: ' ' }, {from: '%24', to: '$'}, {from: '%26', to: '&' } // no , ]; } function leadingInteger(s){ var n=s.match(/^(\d*)/)[1]; if (n) { return +n; } return null; } function setBrowserHacks() { var useOriginal=false; // browser-specific hacks if (typeof window.opera != 'undefined') { //if (leadingInteger(opera.version()) < 9) { useOriginal=true; } // v9 beta still seems to have buggy css setDefault('popupNavLinkSeparator', ' &#183; '); } else if (navigator.appName=='Konqueror') { setDefault('popupNavLinkSeparator', ' &bull; '); pg.flag.isKonq=true; } else if ( navigator.vendor && navigator.vendor.toLowerCase().indexOf('apple computer')===0) { pg.flag.isSafari=true; var webkit=+navigator.userAgent.replace(RegExp('^.*AppleWebKit[/](\\d+).*', 'i'), '$1'); if (webkit < 420) { useOriginal=true; } } else if (navigator.appName.indexOf("Microsoft")!=-1) { setDefault('popupNavLinkSeparator', ' &#183; '); useOriginal=true; var ver=+navigator.userAgent.replace(RegExp('^.*MSIE (\\d+).*'), '$1'); pg.flag.isIE=true; pg.flag.IEVersion=ver; } if (pg.flag.isIE && pg.flag.IEVersion < 7 || pg.flag.isKonq || pg.flag.isSafari) { pg.flag.linksLikeIE6=true; } if (useOriginal && pg.structures.original) { setDefault('popupStructure','original'); } } function setupPopups() { // NB translatable strings should be set up first (strings.js) // basics setupDebugging(); setSiteInfo(); setTitleBase(); setOptions(); // see options.js // namespaces etc setNamespaces(); setInterwiki(); // regexps setRegexps(); setRedirs(); // other stuff window.setImageSources && setImageSources(); setBrowserHacks(); setMisc(); setupLivePreview(); // main deal here setupTooltips(); Navpopup.tracker.enable(); setupPopups.completed = true; } // ENDFILE: init.js // STARTFILE: navlinks.js //<NOLITE> ////////////////////////////////////////////////// // navlinks... let the fun begin // function defaultNavlinkSpec() { var str=''; str += '<b><<mainlink|shortcut= >></b>'; if (getValueOf('popupLastEditLink')) { str += '*<<lastEdit|shortcut=/>>|<<lastContrib>>|<<sinceMe>>if(oldid){|<<oldEdit>>|<<diffCur>>}'; } // user links // contribs - log - count - email - block // count only if applicable; block only if popupAdminLinks str += 'if(user){<br><<contribs|shortcut=c>>*<<userlog|shortcut=L|log>>'; str+='if(ipuser){*<<arin>>}if(wikimedia){*<<count|shortcut=#>>}'; str+='if(ipuser){}else{*<<email|shortcut=E>>}if(admin){*<<block|shortcut=b>>|<<blocklog|log>>}}'; // editing links // talkpage -> edit|new - history - un|watch - article|edit // other page -> edit - history - un|watch - talk|edit|new var editstr='<<edit|shortcut=e>>'; var editOldidStr='if(oldid){<<editOld|shortcut=e>>|<<revert|shortcut=v|rv>>|<<edit|cur>>}else{' + editstr + '}' var historystr='<<history|shortcut=h>>if(mainspace_en){|<<editors|shortcut=E|>>}'; var watchstr='<<unwatch|unwatchShort>>|<<watch|shortcut=w|watchThingy>>'; str+='<br>if(talk){' + editOldidStr+'|<<new|shortcut=+>>' + '*' + historystr+'*'+watchstr + '*' + '<b><<article|shortcut=a>></b>|<<editArticle|edit>>' + '}else{' + // not a talk page editOldidStr + '*' + historystr + '*' + watchstr + '*' + '<b><<talk|shortcut=t>></b>|<<editTalk|edit>>|<<newTalk|shortcut=+|new>>' + '}'; // misc links str += '<br><<whatLinksHere|shortcut=l>>*<<relatedChanges|shortcut=r>>*<<move|shortcut=m>>'; // admin links str += 'if(admin){<br><<unprotect|unprotectShort>>|<<protect|shortcut=p>>|<<protectlog|log>>*' + '<<undelete|undeleteShort>>|<<delete|shortcut=d>>|<<deletelog|log>>}'; return str; } function navLinksHTML (article, hint, params) { //oldid, rcid) { var str = '<span class="popupNavLinks">' + defaultNavlinkSpec() + '</span>'; // BAM return navlinkStringToHTML(str, article, params); } function expandConditionalNavlinkString(s,article,z,recursionCount) { var oldid=z.oldid, rcid=z.rcid, diff=z.diff; // nested conditionals (up to 10 deep) are ok, hopefully! (work from the inside out) if (typeof recursionCount!=typeof 0) { recursionCount=0; } var conditionalSplitRegex=RegExp( //(1 if \\( (2 2) \\) {(3 3)} (4 else {(5 5)} 4)1) '(;?\\s*if\\s*\\(\\s*([\\w]*)\\s*\\)\\s*\\{([^{}]*)\\}(\\s*else\\s*\\{([^{}]*?)\\}|))', 'i'); var splitted=s.parenSplit(conditionalSplitRegex); // $1: whole conditional // $2: test condition // $3: true expansion // $4: else clause (possibly empty) // $5: false expansion (possibly null) var numParens=5; var ret = splitted[0]; for (var i=1; i<splitted.length; i=i+numParens+1) { var testString=splitted[i+2-1]; var trueString=splitted[i+3-1]; var falseString=splitted[i+5-1]; if (typeof falseString=='undefined' || !falseString) { falseString=''; } var testResult=null; switch (testString) { case 'user': testResult=(article.userName())?true:false; break; case 'talk': testResult=(article.talkPage())?false:true; // talkPage converts _articles_ to talkPages break; case 'admin': testResult=getValueOf('popupAdminLinks')?true:false; break; case 'oldid': testResult=(typeof oldid != 'undefined' && oldid)?true:false; break; case 'rcid': testResult=(typeof rcid != 'undefined' && rcid)?true:false; break; case 'ipuser': testResult=(article.isIpUser())?true:false; break; case 'mainspace_en': testResult=isInMainNamespace(article) && pg.wiki.hostname=='en.wikipedia.org'; break; case 'wikimedia': testResult=(pg.wiki.wikimedia) ? true : false; break; case 'diff': testResult=(typeof diff != 'undefined' && diff)?true:false; break; } switch(testResult) { case null: ret+=splitted[i]; break; case true: ret+=trueString; break; case false: ret+=falseString; break; } // append non-conditional string ret += splitted[i+numParens]; } if (conditionalSplitRegex.test(ret) && recursionCount < 10) { return expandConditionalNavlinkString(ret,article,z,recursionCount+1); } return ret; } function navlinkStringToArray(s, article, params) { s=expandConditionalNavlinkString(s,article,params); var splitted=s.parenSplit(RegExp('<<(.*?)>>')); var ret=[]; for (var i=0; i<splitted.length; ++i) { if (i%2) { // i odd, so s is a tag var t=new navlinkTag(); var ss=splitted[i].split('|'); t.id=ss[0]; for (var j=1; j<ss.length; ++j) { var sss=ss[j].split('='); if (sss.length>1) { t[sss[0]]=sss[1]; } else { // no assignment (no "="), so treat this as a title (overwriting the last one) t.text=popupString(sss[0]); } } t.article=article; var oldid=params.oldid, rcid=params.rcid, diff=params.diff; if (typeof oldid != 'undefined' && oldid != null) { t.oldid=oldid; } if (typeof rcid != 'undefined' && rcid != null) { t.rcid=rcid; } if (typeof diff != 'undefined' && diff != null) { t.diff=diff; } if (!t.text && t.id != 'mainlink') { t.text=popupString(t.id); } ret.push(t); } else { // plain HTML ret.push(splitted[i]); } } return ret; } function navlinkSubstituteHTML(s) { return s.split('*').join(getValueOf('popupNavLinkSeparator')) .split('<menurow>').join('<li class="popup_menu_row">') .split('</menurow>').join('</li>') .split('<menu>').join('<ul class="popup_menu">') .split('</menu>').join('</ul>'); } function navlinkDepth(magic,s) { return s.split('<' + magic + '>').length - s.split('</' + magic + '>').length; } // navlinkString: * becomes the separator // <<foo|bar=baz|fubar>> becomes a foo-link with attribute bar='baz' // and visible text 'fubar' // if(test){...} and if(test){...}else{...} work too (nested ok) function navlinkStringToHTML(s,article,params) { //limitAlert(navlinkStringToHTML, 5, 'navlinkStringToHTML\n' + article + '\n' + (typeof article)); var p=navlinkStringToArray(s,article,params); var html=''; var menudepth = 0; // nested menus not currently allowed, but doesn't do any harm to code for it var menurowdepth = 0; var wrapping = null; for (var i=0; i<p.length; ++i) { if (typeof p[i] == typeof '') { html+=navlinkSubstituteHTML(p[i]); menudepth += navlinkDepth('menu', p[i]); menurowdepth += navlinkDepth('menurow', p[i]); // if (menudepth === 0) { // tagType='span'; // } else if (menurowdepth === 0) { // tagType='li'; // } else { // tagType = null; // } } else if (typeof p[i].type != 'undefined' && p[i].type=='navlinkTag') { if (menudepth > 0 && menurowdepth === 0) { html += '<li class="popup_menu_item">' + p[i].html() + '</li>'; } else { html+=p[i].html(); } } } return html; } function navlinkTag() { this.type='navlinkTag'; } navlinkTag.prototype.html=function () { this.getNewWin(); this.getPrintFunction(); var html=''; var opening, closing; var tagType='span'; if (!tagType) { opening = ''; closing = ''; } else { opening = '<' + tagType + ' class="popup_' + this.id + '">'; closing = '</' + tagType + '>'; } if (typeof this.print!='function') { errlog ('Oh dear - invalid print function for a navlinkTag, id='+this.id); } else { html=this.print(this); if (typeof html != typeof '') {html='';} else if (typeof this.shortcut!='undefined') html=addPopupShortcut(html, this.shortcut); } return opening + html + closing; }; navlinkTag.prototype.getNewWin=function() { getValueOf('popupLinksNewWindow'); if (typeof pg.option.popupLinksNewWindow[this.id] === 'undefined') { this.newWin=null; } this.newWin=pg.option.popupLinksNewWindow[this.id]; } navlinkTag.prototype.getPrintFunction=function() { //think about this some more // this.id and this.article should already be defined if (typeof this.id!=typeof '' || typeof this.article!=typeof {} ) { return; } var html=''; var a,t; this.noPopup=1; switch (this.id) { case 'contribs': case 'history': case 'whatLinksHere': if (!getValueOf('popupUseQueryInterface')) { break; } case 'userPage': case 'monobook': case 'userTalk': case 'talk': case 'article': case 'lastEdit': this.noPopup=null; } switch (this.id) { case 'email': case 'contribs': case 'block': case 'unblock': case 'userlog': case 'userSpace': this.article=this.article.userName(); } switch (this.id) { case 'userTalk': case 'newUserTalk': case 'editUserTalk': case 'userPage': case 'monobook': case 'editMonobook': case 'blocklog': this.article=this.article.userName(true); // fall through; no break case 'pagelog': case 'deletelog': case 'protectlog': delete this.oldid; } if (this.id=='editMonobook' || this.id=='monobook') { this.article.append('/monobook.js'); } if (this.id != 'mainlink') { // FIXME anchor handling should be done differently with Title object this.article=this.article.removeAnchor(); // if (typeof this.text=='undefined') this.text=popupString(this.id); } switch (this.id) { case 'undelete': this.print=specialLink; this.specialpage='Undelete'; this.sep='/'; break; case 'whatLinksHere': this.print=specialLink; this.specialpage='Whatlinkshere'; break; case 'relatedChanges': this.print=specialLink; this.specialpage='Recentchangeslinked'; break; case 'move': this.print=specialLink; this.specialpage='Movepage'; break; case 'contribs': this.print=specialLink; this.specialpage='Contributions'; break; case 'email': this.print=specialLink; this.specialpage='Emailuser'; break; case 'block': this.print=specialLink; this.specialpage='Blockip'; this.sep='&ip='; break; case 'unblock': this.print=specialLink; this.specialpage='Ipblocklist'; this.sep='&action=unblock&ip='; break; case 'userlog': this.print=specialLink; this.specialpage='Log'; this.sep='&user='; break; case 'blocklog': this.print=specialLink; this.specialpage='Log'; this.sep='&type=block&page='; break; case 'pagelog': this.print=specialLink; this.specialpage='Log'; this.sep='&page='; break; case 'protectlog': this.print=specialLink; this.specialpage='Log'; this.sep='&type=protect&page='; break; case 'deletelog': this.print=specialLink; this.specialpage='Log'; this.sep='&type=delete&page='; break; case 'userSpace': this.print=specialLink; this.specialpage='Prefixindex'; this.sep='&namespace=2&from='; break; case 'search': this.print=specialLink; this.specialpage='Search'; this.sep='&fulltext=Search&search='; break; case 'history': case 'historyfeed': case 'unwatch': case 'watch': case 'unprotect': case 'protect': this.print=wikiLink; this.action=this.id; break; case 'delete': this.print=wikiLink; this.action='delete'; if (this.article.namespace()==pg.ns.image) { var img=this.article.stripNamespace(); this.action+='&image='+img; } break; case 'markpatrolled': case 'edit': // editOld should keep the oldid, but edit should not. delete this.oldid; // fall through case 'view': case 'purge': case 'render': this.print=wikiLink; this.action=this.id; break; case 'raw': this.print=wikiLink; this.action='raw&ctype=text/css'; break; case 'new': this.print=wikiLink; this.action='edit&section=new'; break; case 'mainlink': if (typeof this.text=='undefined') { this.text=this.article.toString().entify(); } if (getValueOf('popupSimplifyMainLink') && isInStrippableNamespace(this.article)) { var s=this.text.split('/'); this.text=s[s.length-1]; if (this.text=='' && s.length > 1) { this.text=s[s.length-2]; } } this.print=titledWikiLink; if (typeof this.title=='undefined' && pg.current.link && typeof pg.current.link.href != 'undefined') { this.title=safeDecodeURI((pg.current.link.originalTitle)?pg.current.link.originalTitle:this.article); if (typeof this.oldid != 'undefined' && this.oldid) { this.title=tprintf('Revision %s of %s', [this.oldid, this.title]); } } this.action='view'; break; case 'userPage': case 'article': case 'monobook': case 'editMonobook': case 'editArticle': delete this.oldid; //alert(this.id+'\n'+this.article + '\n'+ typeof this.article); this.article=this.article.articleFromTalkOrArticle(); //alert(this.id+'\n'+this.article + '\n'+ typeof this.article); this.print=wikiLink; if (this.id.indexOf('edit')==0) { this.action='edit'; } else { this.action='view';} break; case 'userTalk': case 'talk': this.article=this.article.talkPage(); delete this.oldid; this.print=wikiLink; this.action='view'; break; case 'arin': this.print=arinLink; break; case 'count': this.print=kateLink; break; case 'google': this.print=googleLink; break; case 'contribsTree': this.print=contribsTreeLink; break; case 'editors': this.print=editorListLink; break; case 'globalsearch': this.print=globalSearchLink; break; case 'lastEdit': this.print=titledDiffLink; this.title=popupString('Show the last edit'); this.from='prev'; this.to='cur'; break; case 'oldEdit': this.print=titledDiffLink; this.title=popupString('Show the edit made to get revision') + ' ' + this.oldid; this.from='prev'; this.to=this.oldid; break; case 'editOld': this.print=wikiLink; this.action='edit'; break; case 'undo': this.print=wikiLink; this.action='edit&undo='; break; case 'markpatrolled': this.print=wikiLink; this.action='markpatrolled'; case 'revert': this.print=wikiLink; this.action='revert'; break; case 'nullEdit': this.print=wikiLink; this.action='nullEdit'; break; case 'diffCur': this.print=titledDiffLink; this.title=tprintf('Show changes since revision %s', [this.oldid]); this.from=this.oldid; this.to='cur'; break; case 'editUserTalk': case 'editTalk': delete this.oldid; this.article=this.article.talkPage(); this.action='edit'; this.print=wikiLink; break; case 'newUserTalk': case 'newTalk': this.article=this.article.talkPage(); this.action='edit&section=new'; this.print=wikiLink; break; case 'lastContrib': case 'sinceMe': this.print=magicHistoryLink; break; case 'togglePreviews': this.text=popupString(pg.option.simplePopups ? 'enable previews' : 'disable previews'); case 'disablePopups': case 'purgePopups': this.print=popupMenuLink; break; default: this.print=function () {return 'Unknown navlink type: '+this.id+''}; } }; // // end navlinks ////////////////////////////////////////////////// //</NOLITE> // ENDFILE: navlinks.js // STARTFILE: shortcutkeys.js //<NOLITE> function popupHandleKeypress(evt) { var keyCode = window.event ? window.event.keyCode : ( evt.keyCode ? evt.keyCode : evt.which); if (!keyCode || !pg.current.link || !pg.current.link.navpopup) { return; } if (keyCode==27) { // escape killPopup(); return false; // swallow keypress } var letter=String.fromCharCode(keyCode); var links=pg.current.link.navpopup.mainDiv.getElementsByTagName('A'); var startLink=0; var i,j; if (popupHandleKeypress.lastPopupLinkSelected) { for (i=0; i<links.length; ++i) { if (links[i]==popupHandleKeypress.lastPopupLinkSelected) { startLink=i; } } } for (j=0; j<links.length; ++j) { i=(startLink + j + 1) % links.length; if (links[i].getAttribute('popupkey')==letter) { if (evt && evt.preventDefault) evt.preventDefault(); links[i].focus(); popupHandleKeypress.lastPopupLinkSelected=links[i]; return false; // swallow keypress } } // pass keypress on if (document.oldPopupOnkeypress) { return document.oldPopupOnkeypress(evt); } return true; } function addPopupShortcuts() { if (document.onkeypress!=popupHandleKeypress) { document.oldPopupOnkeypress=document.onkeypress; } document.onkeypress=popupHandleKeypress; } function rmPopupShortcuts() { popupHandleKeypress.lastPopupLinkSelected=null; try { if (document.oldPopupOnkeypress && document.oldPopupOnkeypress==popupHandleKeypress) { // panic document.onkeypress=null; //function () {}; return; } document.onkeypress=document.oldPopupOnkeypress; } catch (nasties) { /* IE goes here */ } } function addLinkProperty(html, property) { // take "<a href=...>...</a> and add a property // not sophisticated at all, easily broken var i=html.indexOf('>'); if (i<0) { return html; } return html.substring(0,i) + ' ' + property + html.substring(i); } function addPopupShortcut(html, key) { if (!getValueOf('popupShortcutKeys')) { return html; } var ret= addLinkProperty(html, 'popupkey="'+key+'"'); if (key==' ') { key=popupString('spacebar'); } return ret.replace(RegExp('^(.*?)(title=")(.*?)(".*)$', 'i'),'$1$2$3 ['+key+']$4'); } //</NOLITE> // ENDFILE: shortcutkeys.js // STARTFILE: diffpreview.js //<NOLITE> function loadDiff(article, oldid, diff, navpop) { navpop.diffData={}; var oldRev, newRev; switch (diff) { case 'cur': switch ( oldid ) { case null: case '': case 'prev': // eg newmessages diff link oldRev='0&direction=prev'; newRev=0; break; default: oldRev = oldid; newRev = 0; } break; case 'prev': oldRev = ( oldid || 0 ) + '&direction=prev'; newRev = oldid; break; case 'next': oldRev = oldid; newRev = oldid + '&direction=next'; break; default: oldRev = oldid || 0; newRev = diff || 0; break; } oldRev = oldRev || 0; newRev = newRev || 0; var go = function() { pendingNavpopTask(navpop); getWiki(article, doneDiffNew, newRev, navpop); pendingNavpopTask(navpop); getWiki(article, doneDiffOld, oldRev, navpop); var tz = Cookie.read('popTz'); if (getValueOf('popupUseQueryInterface') && getValueOf('popupAdjustDiffDates') && tz===null) { pendingNavpopTask(navpop); getPageWithCaching(pg.wiki.wikibase + '/query.php?format=json&what=userinfo&uioptions=timecorrection', function(d) { completedNavpopTask(navpop); setTimecorrectionCookie(d); if (diffDownloadsComplete(navpop)) { insertDiff(navpop); } }, navpop); } return true; // remove hook once run } if (navpop.visible || !getValueOf('popupLazyDownloads')) { go(); } else { navpop.addHook(go, 'unhide', 'before', 'DOWNLOAD_DIFFS'); } } function setTimecorrectionCookie(d) { Cookie.create('popTz', getTimeOffset(getJsObj(d.data).meta.user.timecorrection), 1); } function doneDiff(download, isOld) { if (!download.owner || !download.owner.diffData) { return; } var navpop=download.owner; var label= (isOld) ? 'Old' : 'New'; var otherLabel=(isOld) ? 'New' : 'Old'; navpop.diffData[label]=download; completedNavpopTask(download.owner); if (diffDownloadsComplete(navpop)) { insertDiff(navpop); } } function diffDownloadsComplete(navpop) { if (getValueOf('popupUseQueryInterface') && Cookie.read('popTz')===null) { return false; } return navpop.diffData.Old && navpop.diffData.New; } function doneDiffNew(download) { doneDiff(download, false); } function doneDiffOld(download) { doneDiff(download, true); } function rmBoringLines(a,b,context) { if (typeof context == 'undefined') { context=2; } // this is fairly slow... i think it's quicker than doing a word-based diff from the off, though var aa=[], aaa=[]; var bb=[], bbb=[]; var i, j; // first, gather all disconnected nodes in a and all crossing nodes in a and b for (i=0; i<a.length; ++i ) { if(!a[i].paired) { aa[i]=1; } else if (countCrossings(b,a,i, true)) { aa[i]=1; bb[ a[i].row ] = 1; } } // pick up remaining disconnected nodes in b for (i=0; i<b.length; ++i ) { if (bb[i]==1) { continue; } if(!b[i].paired) { bb[i]=1; } } // another pass to gather context: we want the neighbours of included nodes which are not yet included // we have to add in partners of these nodes, but we don't want to add context for *those* nodes in the next pass for (i=0; i<b.length; ++i) { if ( bb[i] == 1 ) { for (j=max(0,i-context); j < min(b.length, i+context); ++j) { if ( !bb[j] ) { bb[j] = 1; aa[ b[j].row ] = 0.5; } } } } for (i=0; i<a.length; ++i) { if ( aa[i] == 1 ) { for (j=max(0,i-context); j < min(a.length, i+context); ++j) { if ( !aa[j] ) { aa[j] = 1; bb[ a[j].row ] = 0.5; } } } } for (i=0; i<bb.length; ++i) { if (bb[i] > 0) { // it's a row we need if (b[i].paired) { bbb.push(b[i].text); } // joined; partner should be in aa else { bbb.push(b[i]); } } } for (i=0; i<aa.length; ++i) { if (aa[i] > 0) { // it's a row we need if (a[i].paired) { aaa.push(a[i].text); } // joined; partner should be in aa else { aaa.push(a[i]); } } } return { a: aaa, b: bbb}; } function stripOuterCommonLines(a,b,context) { var i=0; while (i<a.length && i < b.length && a[i]==b[i]) { ++i; } var j=a.length-1; var k=b.length-1; while ( j>=0 && k>=0 && a[j]==b[k] ) { --j; --k; } return { a: a.slice(max(0,i - 1 - context), min(a.length+1, j + context+1)), b: b.slice(max(0,i - 1 - context), min(b.length+1, k + context+1)) }; } function insertDiff(navpop) { // for speed reasons, we first do a line-based diff, discard stuff that seems boring, then do a word-based diff // FIXME: sometimes this gives misleading diffs as distant chunks are squashed together var oldlines=navpop.diffData.Old.data.split('\n'); var newlines=navpop.diffData.New.data.split('\n'); var inner=stripOuterCommonLines(oldlines,newlines,getValueOf('popupDiffContextLines')); oldlines=inner.a; newlines=inner.b; var truncated=false; getValueOf('popupDiffMaxLines'); if (oldlines.length > pg.option.popupDiffMaxLines || newlines.length > pg.option.popupDiffMaxLines) { // truncate truncated=true; inner=stripOuterCommonLines(oldlines.slice(0,pg.option.popupDiffMaxLines), newlines.slice(0,pg.option.popupDiffMaxLines), pg.option.popupDiffContextLines); oldlines=inner.a; newlines=inner.b; } var lineDiff=diff(oldlines, newlines); var lines2=rmBoringLines(lineDiff.o, lineDiff.n); var oldlines2=lines2.a; var newlines2=lines2.b; var simpleSplit = !String.prototype.parenSplit.isNative; var html='<hr>'; if (getValueOf('popupDiffDates')) { html += diffDatesTable(navpop.diffData.Old, navpop.diffData.New); html += '<hr>'; } html += shortenDiffString( diffString(oldlines2.join('\n'), newlines2.join('\n'), simpleSplit), getValueOf('popupDiffContextCharacters') ).join('<hr>'); setPopupTipsAndHTML(html.split('\n').join('<br>') + (truncated ? '<hr><b>'+popupString('Diff truncated for performance reasons')+'</b>' : '') , 'popupPreview', navpop.idNumber); } function diffDatesTable( oldDl, newDl ) { var html='<table class="popup_diff_dates">'; html += diffDatesTableRow( newDl, tprintf('New revision')); html += diffDatesTableRow( oldDl, tprintf('Old revision')); html += '</table>'; return html; } function diffDatesTableRow( dl, label ) { var txt=''; if (!dl) { txt=popupString('Something went wrong :-('); } else if (!dl.lastModified) { txt= (/^\s*$/.test(dl.data)) ? popupString('Empty revision, maybe non-existent') : popupString('Unknown date'); } else { var datePrint=getValueOf('popupDiffDatePrinter'); if (typeof dl.lastModified[datePrint] == 'function') { if (getValueOf('popupAdjustDiffDates')) { var off; if (off=Cookie.read('popTz')) { var d2=adjustDate(dl.lastModified, off); txt = dayFormat(d2, true) + ' ' + timeFormat(d2, true); } } else { txt = dl.lastModified[datePrint](); } } else { txt = tprintf('Invalid %s %s', ['popupDiffDatePrinter', datePrint]); } } var revlink = generalLink({url: dl.url.replace(/&.*?(oldid=[0-9]+(?:&direction=[^&]*)?).*/, '&$1'), text: label, title: label}); return simplePrintf('<tr><td>%s</td><td>%s</td></tr>', [ revlink, txt ]); } //</NOLITE> // ENDFILE: diffpreview.js // STARTFILE: links.js //<NOLITE> ///////////////////// // LINK GENERATION // ///////////////////// // titledDiffLink --> titledWikiLink --> generalLink // wikiLink --> titledWikiLink --> generalLink // kateLink --> generalLink function titledDiffLink(l) { // article, text, title, from, to) { return titledWikiLink({article: l.article, action: l.to + '&oldid=' + l.from, newWin: l.newWin, noPopup: l.noPopup, text: l.text, title: l.title, /* hack: no oldid here */ actionName: 'diff'}); } function wikiLink(l) { //{article:article, action:action, text:text, oldid, newid}) { if (! (typeof l.article == typeof {} && typeof l.action == typeof '' && typeof l.text==typeof '')) return null; if (typeof l.oldid == 'undefined') l.oldid=null; if (!/^((edit|view|revert|render)$|(raw))/.test(l.action)) { l.oldid=null; } var hint=popupString(l.action + 'Hint'); // revertHint etc etc etc var oldidData=[l.oldid, safeDecodeURI(l.article)]; var revisionString = tprintf('revision %s of %s', oldidData); log('revisionString='+revisionString); switch (l.action) { case 'edit&section=new': hint = popupString('newSectionHint'); break; case 'edit&undo=': l.action += l.diff; hint = popupString('undoHint'); break; case 'raw&ctype=text/css': hint=popupString('rawHint'); break; case 'revert': var p=parseParams(pg.current.link.href); l.action='edit&autoclick=wpSave&actoken=' + autoClickToken() + '&autosummary=' + revertSummary(l.oldid, p.diff); if (p.diff=='prev') { l.action += '&direction=prev'; revisionString = tprintf('the revision prior to revision %s of %s', oldidData); } if (getValueOf('popupRevertSummaryPrompt')) { l.action += '&autosummaryprompt=true'; } if (getValueOf('popupMinorReverts')) { l.action += '&autominor=true'; } log('revisionString is now '+revisionString); break; case 'nullEdit': l.action='edit&autoclick=wpSave&actoken=' + autoClickToken() + '&autosummary=null'; break; case 'historyfeed': l.action='history&feed=rss'; break; case 'markpatrolled': l.action='markpatrolled&rcid='+l.rcid; } if (hint) { if (l.oldid) { hint = simplePrintf(hint, [revisionString]); } else { hint = simplePrintf(hint, [safeDecodeURI(l.article)]); } } else { hint = safeDecodeURI(l.article + '&action=' + l.action) + (l.oldid) ? '&oldid='+l.oldid : ''; } return titledWikiLink({article: l.article, action: l.action, text: l.text, newWin:l.newWin, title: hint, oldid: l.oldid, noPopup: l.noPopup}); } function revertSummary(oldid, diff) { if (getValueOf('popupUseQueryInterface')) { return revertSummaryQueried(oldid, diff); } if (typeof getValueOf('popupTimeOffset') == 'number' && /[?&]action=history/.test(document.location.href)) { var links=document.links; var numlinks=links.length; var date=null, editor=null; var dateRe = RegExp('^([0-9]{2}:[0-9]{2}),\s*(.*[1-3][0-9]{3})$'); for (var i=0; i<numlinks-1; ++i) { if (RegExp('oldid='+oldid).test(links[i].href) && dateRe.test(links[i].innerHTML)) { // help konqueror out by putting the time at the end var ds = links[i].innerHTML.replace(dateRe, '$2 $1'); // d is parsed according to current locale, in FF at least // this is only OK if the user has set the time offset in prefs! var d=new Date(+(new Date(ds)) - 1000*3600*getValueOf('popupTimeOffset')); // strip out zero seconds and timezone in date, since they're prolly bogus date=d.toString().replace(/([0-9]{2}:[0-9]{2}):00.*/, '$1'); editor=Title.fromURL(links[i+1].href).userName(); break; } } if (date && editor && diff != 'prev') { return simplePrintf(getValueOf('popupExtendedRevertSummary'), [date, editor, oldid]); } } if (diff != 'prev') { return simplePrintf(getValueOf('popupRevertSummary'), [ oldid ]); } return simplePrintf(getValueOf('popupRevertToPreviousSummary'), [ oldid ]); } function revertSummaryQueried(oldid, diff) { var ret=''; if (diff == 'prev') { ret=getValueOf('popupQueriedRevertToPreviousSummary'); } else { ret = getValueOf('popupQueriedRevertSummary'); } return ret + '&autorv=' + oldid; } function titledWikiLink(l) { // possible properties of argument: // article, action, text, title, oldid, actionName, className, noPopup // oldid = null is fine here // article and action are mandatory args if (typeof l.article == 'undefined' || typeof l.action=='undefined') { errlog('got undefined article or action in titledWikiLink'); return null; } var base = pg.wiki.titlebase + l.article.urlString(); var url=base; if (typeof l.actionName=='undefined' || !l.actionName) { l.actionName='action'; } // no need to add &action=view, and this confuses anchors if (l.action != 'view') { url = base + '&' + l.actionName + '=' + l.action; } if (typeof l.oldid!='undefined' && l.oldid) { url+='&oldid='+l.oldid; } var cssClass=pg.misc.defaultNavlinkClassname; if (typeof l.className!='undefined' && l.className) { cssClass=l.className; } return generalNavLink({url: url, newWin: l.newWin, title: (typeof l.title != 'undefined') ? l.title : null, text: (typeof l.text!='undefined')?l.text:null, className: cssClass, noPopup:l.noPopup}); } function getLastContrib(wikipage, newWin) { getHistoryInfo(wikipage, function(x){processLastContribInfo(x,{page: wikipage, newWin: newWin})}); } function processLastContribInfo(info, stuff) { if(!info.edits || !info.edits.length) { alert('Popups: an odd thing happened. Please retry.'); return; } if(!info.firstNewEditor) { alert(tprintf('Only found one editor: %s made %s edits', [info.edits[0].editor,info.edits.length])); return; } var newUrl=pg.wiki.titlebase + new Title(stuff.page).urlString() + '&diff=cur&oldid='+info.firstNewEditor.oldid; displayUrl(newUrl, stuff.newWin); } function getDiffSinceMyEdit(wikipage, newWin) { getHistoryInfo(wikipage, function(x){processDiffSinceMyEdit(x,{page: wikipage, newWin: newWin})}); } function processDiffSinceMyEdit(info, stuff) { if(!info.edits || !info.edits.length) { alert('Popups: something fishy happened. Please try again.'); return; } var friendlyName=stuff.page.split('_').join(' '); if(!info.myLastEdit) { alert(tprintf('Couldn\'t find an edit by %s\nin the last %s edits to\n%s', [info.userName, getValueOf('popupHistoryLimit'), friendlyName])); return; } if(info.myLastEdit.index==0) { alert(tprintf("%s seems to be the last editor to the page %s", [info.userName, friendlyName])); return; } var newUrl=pg.wiki.titlebase + new Title(stuff.page).urlString() + '&diff=cur&oldid='+ info.myLastEdit.oldid; displayUrl(newUrl, stuff.newWin); } function displayUrl(url, newWin){ if(newWin) { window.open(url); } else { document.location=url; } } function purgePopups() { processAllPopups(true); setupCache(); // deletes all cached items (not browser cached, though...) pg.option={}; abortAllDownloads(); } function processAllPopups(nullify, banish) { for (var i=0; i<pg.current.links.length; ++i) { if (!pg.current.links[i].navpopup) { continue; } (nullify || banish) && pg.current.links[i].navpopup.banish(); nullify && (pg.current.links[i].navpopup=null); } } function disablePopups(){ processAllPopups(false, true); setupTooltips(null, true); } function togglePreviews() { processAllPopups(true, true); pg.option.simplePopups=!pg.option.simplePopups; abortAllDownloads(); } function magicHistoryLink(l) { // FIXME use onclick change href trick to sort this out instead of window.open var jsUrl='', title=''; switch(l.id) { case 'lastContrib': jsUrl=simplePrintf('javascript:getLastContrib(\'%s\',%s)', [l.article.toString(true).split("'").join("\\'"), l.newWin]); title=popupString('lastContribHint'); break; case 'sinceMe': jsUrl=simplePrintf('javascript:getDiffSinceMyEdit(\'%s\',%s)', [l.article.toString(true).split("'").join("\\'"), l.newWin]); title=popupString('sinceMeHint'); break; } return generalNavLink({url: jsUrl, newWin: false, // can't have new windows with JS links, I think title: title, text: l.text, noPopup: l.noPopup}); } function popupMenuLink(l) { var jsUrl=simplePrintf('javascript:%s()', [l.id]); var title=popupString(simplePrintf('%sHint', [l.id])); return generalNavLink({url: jsUrl, newWin:false, title:title, text:l.text, noPopup:l.noPopup}); } function specialLink(l) { // properties: article, specialpage, text, sep if (typeof l.specialpage=='undefined'||!l.specialpage) return null; var base = pg.wiki.titlebase + pg.ns.special+':'+l.specialpage; if (typeof l.sep == 'undefined' || l.sep===null) l.sep='&target='; var article=l.article.urlString({keepSpaces: l.specialpage=='Search'}); var hint=popupString(l.specialpage+'Hint'); switch (l.specialpage) { case 'Log': switch (l.sep) { case '&user=': hint=popupString('userLogHint'); break; case '&type=block&page=': hint=popupString('blockLogHint'); break; case '&page=': hint=popupString('pageLogHint'); break; case '&type=protect&page=': hint=popupString('protectLogHint'); break; case '&type=delete&page=': hint=popupString('deleteLogHint'); break; default: log('Unknown log type, sep=' + l.sep); hint='Missing hint (FIXME)'; } break; case 'Prefixindex': article += '/'; break; } if (hint) hint = simplePrintf(hint, [safeDecodeURI(l.article)]); else hint = safeDecodeURI(l.specialpage+':'+l.article) ; var url = base + l.sep + article; return generalNavLink({url: url, title: hint, text: l.text, newWin:l.newWin, noPopup:l.noPopup}); } function generalLink(l) { // l.url, l.text, l.title, l.newWin, l.className, l.noPopup if (typeof l.url=='undefined') return null; // only quotation marks in the url can screw us up now... I think var url=l.url.split('"').join('%22'); var ret='<a href="' + url + '"'; if (typeof l.title!='undefined' && l.title) { ret += ' title="' + l.title + '"'; } if (l.noPopup) { ret += ' noPopup=1'; } var newWin; if (typeof l.newWin=='undefined' || l.newWin===null) { newWin=getValueOf('popupNewWindows'); } else { newWin=l.newWin; } if (newWin) { ret += ' target="_blank"'; } if (typeof l.className!='undefined'&&l.className) { ret+=' class="'+l.className+'"'; } ret += '>'; if (typeof l.text==typeof '') { ret+= l.text; } ret +='</a>'; return ret; } function appendParamsToLink(linkstr, params) { var sp=linkstr.parenSplit(RegExp('(href="[^"]+?)"', 'i')); if (sp.length<2) return null; var ret=sp.shift() + sp.shift(); ret += '&' + params + '"'; ret += sp.join(''); return ret; } function changeLinkTargetLink(x) { // newTarget, text, hint, summary, clickButton, minor, title (optional) { if (x.newTarget) { log ('changeLinkTargetLink: newTarget=' + x.newTarget); } // optional: oldTarget (in wikitext) // if x.newTarget omitted or null, remove the link //x.text=encodeURI(x.text); // this buggers things up on zh.wikipedia.org and doesn't seem necessary x.clickButton=encodeURI(x.clickButton); // FIXME: first character of page title as well as namespace should be case insensitive // eg [[category:foo]] and [[Category:Foo]] are equivalent // this'll break if charAt(0) is nasty var cA=literalizeRegex(x.oldTarget); var chs=cA.charAt(0).toUpperCase(); chs='['+chs + chs.toLowerCase()+']'; var currentArticleRegexBit=chs+cA.substring(1); currentArticleRegexBit=currentArticleRegexBit .split(RegExp('[_ ]+', 'g')).join('[_ ]+') .split('\\(').join('(?:%2528|\\()') .split('\\)').join('(?:%2529|\\))'); // leading and trailing space should be ignored, and anchor bits optional: currentArticleRegexBit = '\\s*(' + currentArticleRegexBit + '(?:#[^\\[\\|]*)?)\\s*'; // e.g. Computer (archaic) -> \s*([Cc]omputer[_ ](?:%2528|\()archaic(?:%2528|\)))\s* // autoedit=s~\[\[([Cc]ad)\]\]~[[Computer-aided%20design|$1]]~g;s~\[\[([Cc]AD)[|]~[[Computer-aided%20design|~g var title=x.title || wgPageName.split('_').join(' '); var lk=titledWikiLink({article: new Title(title), newWin:x.newWin, action: 'edit', text: x.text, title: x.hint, className: 'popup_change_title_link' }); var cmd=''; if (x.newTarget) { // escape '&' and other nasties var t=encodeURI(x.newTarget); var s=encodeURI(literalizeRegex(x.newTarget)); cmd += 's~\\[\\['+currentArticleRegexBit+'\\]\\]~[['+t+'|$1]]~g;'; cmd += 's~\\[\\['+currentArticleRegexBit+'[|]~[['+t+'|~g;'; cmd += 's~\\[\\['+s + '\\|' + s + '\\]\\]~[[' + t + ']]~g'; } else { cmd += 's~\\[\\['+currentArticleRegexBit+'\\]\\]~$1~g;'; cmd += 's~\\[\\['+currentArticleRegexBit+'[|](.*?)\\]\\]~$2~g'; } cmd += '&autoclick='+x.clickButton + '&actoken=' + autoClickToken(); cmd += ( x.minor == null ) ? '' : '&autominor='+x.minor; cmd += ( x.watch == null ) ? '' : '&autowatch='+x.watch; cmd += '&autosummary='+x.summary; return appendParamsToLink(lk, 'autoedit='+cmd); } function redirLink(redirMatch, article) { // NB redirMatch is in wikiText var ret=''; if (getValueOf('popupAppendRedirNavLinks') && getValueOf('popupNavLinks')) { ret += '<hr>'; if (getValueOf('popupFixRedirs') && typeof autoEdit != 'undefined' && autoEdit) { log('redirLink: newTarget=' + redirMatch); ret += addPopupShortcut( changeLinkTargetLink( {newTarget: redirMatch, text: popupString('Redirects'), hint: popupString('Fix this redirect'), summary: simplePrintf(getValueOf('popupFixRedirsSummary'), [article.toString(), redirMatch ]), oldTarget: article.toString(), clickButton: getValueOf('popupRedirAutoClick'), minor: true, watch: getValueOf('popupWatchRedirredPages')}) , 'R'); ret += popupString(' to '); } else ret += popupString('Redirects') + popupString(' to '); return ret; } else return '<br> ' + popupString('Redirects') + popupString(' to ') + titledWikiLink({article: new Title().fromWikiText(redirMatch), action: 'view', /* FIXME: newWin */ text: safeDecodeURI(redirMatch), title: popupString('Bypass redirect')}); } function arinLink(l) { if (!saneLinkCheck(l)) { return null; } if ( ! l.article.isIpUser() || ! pg.wiki.wikimedia) return null; var uN=l.article.userName(); return generalNavLink({url:'http://ws.arin.net/cgi-bin/whois.pl?queryinput=' + escape(uN), newWin:l.newWin, title: tprintf('Look up %s in ARIN whois database', [uN]), text: l.text, noPopup:1}); } function toolDbName(cookieStyle) { var ret=null; var theWiki=pg.wiki.hostname.split('.')[1]; if (pg.wiki.hostname==pg.wiki.commons) { ret = 'commonswiki'; } else { switch(theWiki) { case 'wikipedia': case 'wikimedia': ret = pg.wiki.lang + 'wiki'; break; default: ret = pg.wiki.lang + theWiki; break; } } if (!cookieStyle) { ret+= '_p'; } return ret; } function saneLinkCheck(l) { if (typeof l.article != typeof {} || typeof l.text != typeof '') { return false; } return true; } function kateLink(l) { if(!saneLinkCheck(l)) return null; if (! pg.wiki.wikimedia) return null; var uN=l.article.userName(); var tool=getValueOf('popupEditCounterTool'); var url; var defaultToolUrl='http://tools.wikimedia.de/~$3/cgi-bin/count_edits?dbname=$2&user=$1'; switch(tool) { case 'custom': url=simplePrintf(getValueOf('popupEditCounterUrl'), [ escape(uN), toolDbName() ]); break; default: url=simplePrintf(defaultToolUrl, [ escape(uN), toolDbName(), tool ]); } return generalNavLink({url:url, title: tprintf('katelinkHint', [uN]), newWin:l.newWin, text: l.text, noPopup:1}); } function contribsTreeLink(l) { if(!saneLinkCheck(l)) return null; if (! pg.wiki.wikimedia) return null; var uN=l.article.userName(); var url='http://tools.wikimedia.de/~interiot/cgi-bin/contribution_tree?dbname='; url += toolDbName() + '&user='+ escape(uN); return generalNavLink({url:url, title: tprintf('contribsTreeHint', [uN]), newWin:l.newWin, text: l.text, noPopup:1}); } function globalSearchLink(l) { if(!saneLinkCheck(l)) return null; var base='http://vs.aka-online.de/cgi-bin/globalwpsearch.pl?timeout=120&search='; var article=l.article.urlString({keepSpaces:true}); return generalNavLink({url:base + article, newWin:l.newWin, title: tprintf('globalSearchHint', [article]), text: l.text, noPopup:1}); } function googleLink(l) { if(!saneLinkCheck(l)) return null; var base='http://www.google.com/search?q='; var article=l.article.urlString({keepSpaces:true}); return generalNavLink({url:base + '%22' + article + '%22', newWin:l.newWin, title: tprintf('googleSearchHint', [article]), text: l.text, noPopup:1}); } function editorListLink(l) { if(!saneLinkCheck(l)) return null; var article= l.article.articleFromTalkPage() || l.article; var base='http://tools.wikimedia.de/~tim/counter/?page='; return generalNavLink({url:base+article.urlString(), title: tprintf('editorListHint', [article]), newWin:l.newWin, text: l.text, noPopup:1}); } function generalNavLink(l) { l.className = (l.className==null) ? 'popupNavLink' : l.className; return generalLink(l); } ////////////////////////////////////////////////// // magic history links // function getHistoryInfo(wikipage, whatNext) { log('getHistoryInfo'); getHistory(wikipage, whatNext ? function(d){whatNext(processHistory(d));} : processHistory); } // FIXME eliminate pg.idNumber ... how? :-( function getHistory(wikipage, onComplete) { log('getHistory'); var url; if (getValueOf('popupUseQueryInterface')) { url = pg.wiki.wikibase + '/query.php?format=json&what=revisions&titles=' + new Title(wikipage).urlString() + '&rvlimit=' + getValueOf('popupHistoryLimit'); } else { url = pg.wiki.titlebase + new Title(wikipage).urlString() + '&action=history' + '&limit=' + getValueOf('popupHistoryLimit'); } log('getHistory: url='+url); return startDownload(url, pg.idNumber+'history', onComplete); } function processHistory(download) { if (getValueOf('popupUseQueryInterface')) { return processHistoryQuery(download); } return processHistoryScreenScrape(download); } function processHistoryScreenScrape(download) { // screen scrape alert var d=download.data; // pg.misc.data=d; // for debugging var edits=[]; var split=d.split('<li>'); for (var i=0; i<split.length; ++i) { var histRe=RegExp( '^[(].*?type="radio" value="([0-9]*)".*?class=\'history-user\'>' + '<a href="(/wiki/User:|/w/index.php[?]title=(Special:Contributions&amp;target=|User:))([^&"]*)'); var match=histRe.exec(split[i]); if (match) { edits.push({ oldid: match[1], editor: match[4] }); } } var userName=getValueOf('popupUserName') || Cookie.read(pg.wiki.userNameCookie).split('+').join('_'); return finishProcessHistory(edits, userName); } function processHistoryQuery(download) { log ('processHistoryQuery'); var d=download.data; log('d='+d); var jsobj; try { log('trying to parse JSON'); log('jsobj=' + d); eval('jsobj=' + d); log('done eval; jsobj='+jsobj); window.x=jsobj; var p=jsobj['pages']; log('got p'); for (var pageid in p) { var revisions=p[pageid]['revisions']; // we only get the first one break; } log('got revisions'); log(revisions.length +' of them'); } catch (someError) { log('Something went wrong with JSON business'); return finishProcessHistory([]); } var edits=[]; for (var i=0; i<revisions.length; ++i) { edits.push({ oldid: revisions[i]['revid'], editor: revisions[i]['user'] }); } log('processed ' + edits.length + ' edits'); var userName=getValueOf('popupUserName') || unescape(Cookie.read(pg.wiki.userNameCookie).split('+').join(' ')); return finishProcessHistory(edits, userName); } function finishProcessHistory(edits, userName) { var histInfo={}; histInfo.edits=edits; histInfo.userName=userName; for (var i=0; i<edits.length; ++i) { if (typeof histInfo.myLastEdit == 'undefined' && userName && edits[i].editor==userName) { histInfo.myLastEdit={index: i, oldid: edits[i].oldid, previd: (i==0 ? null : edits[i-1].oldid)}; } if (typeof histInfo.firstNewEditor == 'undefined' && edits[i].editor != edits[0].editor) { histInfo.firstNewEditor={index:i, oldid:edits[i].oldid, previd: (i==0 ? null : edits[i-1].oldid)}; } } //pg.misc.historyInfo=histInfo; return histInfo; } //</NOLITE> // ENDFILE: links.js // STARTFILE: options.js ////////////////////////////////////////////////// // options // check for cookies and existing value, else use default function defaultize(x) { var val=null; if (x!='popupCookies') { defaultize('popupCookies'); if (pg.option.popupCookies && (val=Cookie.read(x))) { pg.option[x]=val; return; } } if (pg.option[x]===null || typeof pg.option[x]=='undefined') { if (typeof window[x] != 'undefined' ) pg.option[x]=window[x]; else pg.option[x]=pg.optionDefault[x]; } } function newOption(x, def) { pg.optionDefault[x]=def; } function setDefault(x, def) { return newOption(x, def); } function getValueOf(varName) { defaultize(varName); return pg.option[varName]; } function useDefaultOptions() { // for testing for (var p in pg.optionDefault) { pg.option[p]=pg.optionDefault[p]; if (typeof window[p]!='undefined') { delete window[p]; } } } function setOptions() { // user-settable parameters and defaults // Basic options newOption('popupDelay', 0.5); newOption('popupHideDelay', 0.5); newOption('simplePopups', false); newOption('popupStructure', 'shortmenus'); // see later - default for popupStructure is 'original' if simplePopups is true newOption('popupActionsMenu', true); newOption('popupSetupMenu', true); newOption('popupAdminLinks', false); newOption('popupShortcutKeys', false); newOption('popupHistoricalLinks', true); newOption('popupOnlyArticleLinks', true); newOption('removeTitles', true); newOption('popupMaxWidth', 350); newOption('popupInitialWidth', false); // integer or false newOption('popupSimplifyMainLink', true); newOption('popupAppendRedirNavLinks', true); newOption('popupTocLinks', false); newOption('popupSubpopups', true); newOption('popupUserName', ''); // should be magically detected with cookies if this isn't set newOption('popupDragHandle', false /* 'popupTopLinks'*/); newOption('popupLazyPreviews', true); newOption('popupLazyDownloads', true); newOption('popupAllDabsStubs', false); newOption('popupDebugging', false); newOption('popupAdjustDiffDates', true); newOption('popupActiveNavlinks', true); newOption('popupModifier', false); // ctrl, shift, alt or meta //<NOLITE> // images newOption('popupImages', true); newOption('imagePopupsForImages', true); newOption('popupNeverGetThumbs', false); newOption('popupImagesFromThisWikiOnly', false); newOption('popupMinImageWidth', 50); newOption('popupLoadImagesSequentially', false); //newOption('popupImagesToggleSize', true); newOption('popupThumbAction', 'imagepage'); //'sizetoggle'); newOption('popupImageSize', 60); newOption('popupShowNonCommonsImages', false); // redirs, dabs, reversion newOption('popupFixRedirs', false); newOption('popupRedirAutoClick', 'wpDiff'); newOption('popupFixDabs', false); newOption('popupRevertSummaryPrompt', false); newOption('popupMinorReverts', false); newOption('popupRedlinkRemoval', false); newOption('popupWatchDisambiggedPages', null); newOption('popupWatchRedirredPages', null); // navlinks newOption('popupNavLinks', true); newOption('popupNavLinkSeparator', ' &sdot; '); newOption('popupLastEditLink', true); newOption('popupEditCounterTool', 'interiot'); newOption('popupEditCounterUrl', ''); newOption('popupExtraUserMenu', ''); //</NOLITE> // previews etc newOption('popupPreviews', true); newOption('popupSummaryData', true); newOption('popupMaxPreviewSentences', 5); newOption('popupMaxPreviewCharacters', 600); newOption('popupLastModified', true); newOption('popupPreviewKillTemplates', true); newOption('popupPreviewRawTemplates', false); newOption('popupPreviewFirstParOnly', true); newOption('popupPreviewCutHeadings', true); //<NOLITE> // diffs newOption('popupPreviewDiffs', true); newOption('popupDiffMaxLines', 100); newOption('popupDiffContextLines', 2); newOption('popupDiffContextCharacters', 40); newOption('popupDiffDates', true); newOption('popupDiffDatePrinter', 'toLocaleString'); // edit summaries. God, these are ugly. newOption('popupFixDabsSummary', popupString('defaultpopupFixDabsSummary') ); newOption('popupExtendedRevertSummary', popupString('defaultpopupExtendedRevertSummary') ); newOption('popupTimeOffset', null); newOption('popupRevertSummary', popupString('defaultpopupRevertSummary') ); newOption('popupRevertToPreviousSummary', popupString('defaultpopupRevertToPreviousSummary') ); newOption('popupQueriedRevertSummary', popupString('defaultpopupQueriedRevertSummary') ); newOption('popupQueriedRevertToPreviousSummary', popupString('defaultpopupQueriedRevertToPreviousSummary') ); newOption('popupFixRedirsSummary', popupString('defaultpopupFixRedirsSummary') ); newOption('popupRedlinkSummary', popupString('defaultpopupRedlinkSummary') ); newOption('popupRmDabLinkSummary', popupString('defaultpopupRmDabLinkSummary') ); //</NOLITE> // misc newOption('popupCookies', false); newOption('popupHistoryLimit', 50); //<NOLITE> newOption('popupFilters', [popupFilterStubDetect, popupFilterDisambigDetect, popupFilterPageSize, popupFilterCountLinks, popupFilterCountImages, popupFilterCountCategories, popupFilterLastModified]); newOption('extraPopupFilters', []); newOption('popupOnEditSelection', 'cursor'); newOption('popupUseQueryInterface', true); newOption('popupPreviewHistory', true); newOption('popupImageLinks', true); newOption('popupCategoryMembers', true); newOption('popupHistoryPreviewLimit', 25); newOption('popupContribsPreviewLimit',25); //</NOLITE> // new windows newOption('popupNewWindows', false); newOption('popupLinksNewWindow', {'lastContrib': true, 'sinceMe': true}); // regexps newOption('popupDabRegexp', '([{][{]\\s*disambig|disambig\\s*[}][}]|disamb\\s*[}][}]|dab\\s*[}][}])|[{][{]\\s*(((geo|hn|road?|school|number)dis)|[234][lc][acw]|shipindex)(\\s*[|][^}]*)?\\s*[}][}]|is a .*disambiguation.*page'); newOption('popupStubRegexp', '(sect)?stub[}][}]|This .*-related article is a .*stub'); newOption('popupImageVarsRegexp', 'image|image_(?:file|skyline|name|flag|seal)|cover|badge|logo'); } // ENDFILE: options.js // STARTFILE: strings.js //<NOLITE> ////////////////////////////////////////////////// // Translatable strings ////////////////////////////////////////////////// // // See instructions at // http://en.wikipedia.org/wiki/Wikipedia:Tools/Navigation_popups/Translation pg.string = { ///////////////////////////////////// // summary data, searching etc. ///////////////////////////////////// 'article': 'article', 'category': 'category', 'categories': 'categories', 'image': 'image', 'images': 'images', 'stub': 'stub', 'section stub': 'section stub', 'Empty page': 'Empty page', 'kB': 'kB', 'bytes': 'bytes', 'day': 'day', 'days': 'days', 'hour': 'hour', 'hours': 'hours', 'minute': 'minute', 'minutes': 'minutes', 'second': 'second', 'seconds': 'seconds', 'week': 'week', 'weeks': 'weeks', 'search': 'search', 'SearchHint': 'Find English Wikipedia articles containing %s', 'web': 'web', 'global': 'global', 'globalSearchHint': 'Search across Wikipedias in different languages for %s', 'googleSearchHint': 'Google for %s', ///////////////////////////////////// // article-related actions and info // (some actions also apply to user pages) ///////////////////////////////////// 'actions': 'actions', ///// view articles and view talk 'popupsMenu': 'popups', 'togglePreviewsHint': 'Toggle preview generation in popups on this page', 'toggle previews': 'toggle previews', 'reset': 'reset', 'more...': 'more...', 'disable': 'disable popups', 'disablePopupsHint': 'Disable popups on this page. Reload page to re-enable.', 'historyfeedHint': 'RSS feed of recent changes to this page', 'purgePopupsHint': 'Reset popups, clearing all cached popup data.', 'PopupsHint': 'Reset popups, clearing all cached popup data.', 'spacebar': 'space', 'view': 'view', 'view article': 'view article', 'viewHint': 'Go to %s', 'talk': 'talk', 'talk page': 'talk page', 'this&nbsp;revision': 'this&nbsp;revision', 'revision %s of %s': 'revision %s of %s', 'Revision %s of %s': 'Revision %s of %s', 'the revision prior to revision %s of %s': 'the revision prior to revision %s of %s', 'Toggle image size': 'Click to toggle image size', 'del': 'del', ///// delete, protect, move 'delete': 'delete', 'deleteHint': 'Delete %s', 'undeleteShort': 'un', 'UndeleteHint': 'Show the deletion history for %s', 'protect': 'protect', 'protectHint': 'Restrict editing rights to %s', 'unprotectShort': 'un', 'unprotectHint': 'Allow %s to be edited by anyone again', 'move': 'move', 'move page': 'move page', 'MovepageHint': 'Change the title of %s', 'edit': 'edit', ///// edit articles and talk 'edit article': 'edit article', 'editHint': 'Change the content of %s', 'edit talk': 'edit talk', 'new': 'new', 'new topic': 'new topic', 'newSectionHint': 'Start a new section on %s', 'null edit': 'null edit', 'nullEditHint': 'Submit an edit to %s, making no changes ', 'hist': 'hist', ///// history, diffs, editors, related 'history': 'history', 'historyHint': 'List the changes made to %s', 'last': 'last', 'lastEdit': 'lastEdit', 'mark patrolled': 'mark patrolled', 'markpatrolledHint': 'Mark this edit as patrolled', 'show last edit': 'most recent edit', 'Show the last edit': 'Show the effects of the most recent change', 'lastContrib': 'lastContrib', 'last set of edits': 'latest edits', 'lastContribHint': 'Show the net effect of changes made by the last editor', 'cur': 'cur', 'diffCur': 'diffCur', 'Show changes since revision %s': 'Show changes since revision %s', '%s old': '%s old', // as in 4 weeks old 'oldEdit': 'oldEdit', 'purge': 'purge', 'purgeHint': 'Demand a fresh copy of %s', 'raw': 'source', 'rawHint': 'Download the source of %s', 'render': 'simple', 'renderHint': 'Show a plain HTML version of %s', 'Show the edit made to get revision': 'Show the edit made to get revision', 'sinceMe': 'sinceMe', 'changes since mine': 'diff my edit', 'sinceMeHint': 'Show changes since my last edit', 'Couldn\'t find an edit by %s\nin the last %s edits to\n%s': 'Couldn\'t find an edit by %s\nin the last %s edits to\n%s', 'eds': 'eds', 'editors': 'editors', 'editorListHint': 'List the users who have edited %s', 'related': 'related', 'relatedChanges': 'relatedChanges', 'related changes': 'related changes', 'RecentchangeslinkedHint': 'Show changes in articles related to %s', 'editOld': 'editOld', ///// edit old version, or revert 'rv': 'rv', 'revert': 'revert', 'revertHint': 'Revert to %s', 'defaultpopupRedlinkSummary': 'Removing link to empty page [[%s]] using [[:en:Wikipedia:Tools/Navigation_popups|popups]]', 'defaultpopupFixDabsSummary': 'Disambiguate [[%s]] to [[%s]] using [[:en:Wikipedia:Tools/Navigation_popups|popups]]', 'defaultpopupFixRedirsSummary': 'Redirect bypass from [[%s]] to [[%s]] using [[:en:Wikipedia:Tools/Navigation_popups|popups]]', 'defaultpopupExtendedRevertSummary': 'Revert to revision dated %s by %s, oldid %s using [[:en:Wikipedia:Tools/Navigation_popups|popups]]', 'defaultpopupRevertToPreviousSummary': 'Revert to the revision prior to revision %s using [[:en:Wikipedia:Tools/Navigation_popups|popups]]', 'defaultpopupRevertSummary': 'Revert to revision %s using [[:en:Wikipedia:Tools/Navigation_popups|popups]]', 'defaultpopupQueriedRevertToPreviousSummary': 'Revert to the revision prior to revision $1 dated $2 by $3 using [[:en:Wikipedia:Tools/Navigation_popups|popups]]', 'defaultpopupQueriedRevertSummary': 'Revert to revision $1 dated $2 by $3 using [[:en:Wikipedia:Tools/Navigation_popups|popups]]', 'defaultpopupRmDabLinkSummary': 'Remove link to dab page [[%s]] using [[:en:Wikipedia:Tools/Navigation_popups|popups]]', 'Redirects': 'Redirects', // as in Redirects to ... ' to ': ' to ', // as in Redirects to ... 'Bypass redirect': 'Bypass redirect', 'Fix this redirect': 'Fix this redirect', 'disambig': 'disambig', ///// add or remove dab etc. 'disambigHint': 'Disambiguate this link to [[%s]]', 'Click to disambiguate this link to:': 'Click to disambiguate this link to:', 'remove this link': 'remove this link', 'remove all links to this page from this article': 'remove all links to this page from this article', 'remove all links to this disambig page from this article': 'remove all links to this disambig page from this article', 'mainlink': 'mainlink', ///// links, watch, unwatch 'wikiLink': 'wikiLink', 'wikiLinks': 'wikiLinks', 'links here': 'links here', 'whatLinksHere': 'whatLinksHere', 'what links here': 'what links here', 'WhatlinkshereHint': 'List the pages that are hyperlinked to %s', 'unwatchShort': 'un', 'watchThingy': 'watch', // called watchThingy because {}.watch is a function 'watchHint': 'Add %s to my watchlist', 'unwatchHint': 'Remove %s from my watchlist', 'Only found one editor: %s made %s edits': 'Only found one editor: %s made %s edits', '%s seems to be the last editor to the page %s': '%s seems to be the last editor to the page %s', 'rss': 'rss', ///////////////////////////////////// // diff previews ///////////////////////////////////// 'Diff truncated for performance reasons': 'Diff truncated for performance reasons', 'Old revision': 'Old revision', 'New revision': 'New revision', 'Something went wrong :-(': 'Something went wrong :-(', 'Empty revision, maybe non-existent': 'Empty revision, maybe non-existent', 'Unknown date': 'Unknown date', ///////////////////////////////////// // other special previews ///////////////////////////////////// 'Empty category': 'Empty category', 'Category members (%s shown)': 'Category members (%s shown)', 'No image links found': 'No image links found', 'File links': 'File links', 'not commons': 'There is no file with this name on the Wikimedia Commons.', 'commons only': 'This file is from the Wikimedia Commons.', 'No image found': 'No image found', 'commons dupe': 'The same file appears to be available on the Wikimedia Commons.', 'commons conflict': 'A different file with the same name is available on the Wikimedia Commons.', ///////////////////////////////////// // user-related actions and info ///////////////////////////////////// 'user': 'user', ///// user page, talk, email, space 'user&nbsp;page': 'user&nbsp;page', 'user talk': 'user talk', 'edit user talk': 'edit user talk', 'leave comment': 'leave comment', 'email': 'email', 'email user': 'email user', 'EmailuserHint': 'Send an email to %s', 'space': 'space', // short form for userSpace link 'PrefixindexHint': 'Show pages in the userspace of %s', 'count': 'count', ///// contributions, tree, log 'edit counter': 'edit counter', 'katelinkHint': 'Count the countributions made by %s', 'contribs': 'contribs', 'contributions': 'contributions', 'ContributionsHint': 'List the contributions made by %s', 'tree': 'tree', 'contribsTreeHint': 'Explore %s\'s contributions by namespace and by article', 'log': 'log', 'user log': 'user log', 'userLogHint': 'Show %s\'s user log', 'arin': 'ARIN lookup', ///// ARIN lookup, block user or IP 'Look up %s in ARIN whois database': 'Look up %s in the ARIN whois database', 'unblockShort': 'un', 'block': 'block', 'block user': 'block user', 'IpblocklistHint': 'Unblock %s', 'BlockipHint': 'Prevent %s from editing', 'block log': 'block log', 'blockLogHint': 'Show the block log for %s', 'protectLogHint': 'Show the protection log for %s', 'pageLogHint': 'Show the page log for %s', 'deleteLogHint': 'Show the deletion log for %s', 'Invalid %s %s': 'The option %s is invalid: %s', 'No backlinks found': 'No backlinks found', ' and more': ' and more', 'undo': 'undo', 'undoHint': 'undo this edit', 'Download preview data': 'Download preview data', ///////////////////////////////////// // Autoediting ///////////////////////////////////// 'Enter a non-empty edit summary or press cancel to abort': 'Enter a non-empty edit summary or press cancel to abort', 'Failed to get revision information, please edit manually.\n\n': 'Failed to get revision information, please edit manually.\n\n', 'The %s button has been automatically clicked. Please wait for the next page to load.': 'The %s button has been automatically clicked. Please wait for the next page to load.', 'Could not find button %s. Please check the settings in your javascript file.': 'Could not find button %s. Please check the settings in your javascript file.', ///////////////////////////////////// // Popups setup ///////////////////////////////////// 'Open full-size image': 'Open full-size image', 'zxy': 'zxy' }; function popupString(str) { if (typeof popupStrings != 'undefined' && popupStrings && popupStrings[str]) { return popupStrings[str]; } if (pg.string[str]) { return pg.string[str]; } return str; } function tprintf(str,subs) { if (typeof subs != typeof []) { subs = [subs]; } return simplePrintf(popupString(str), subs); } //</NOLITE> // ENDFILE: strings.js p880kbmgtsdh8nsotrpkjctienarrji 14874 14873 2008-06-05T21:39:44Z Mike.lifeguard 117 [[MediaWiki:Gadget-popups.js]] moved to [[MediaWiki:Gadget-navpop.js]] 14873 javascript text/javascript var popupVersion="Sat Mar 10 21:40:16 UTC 2007"; // STARTFILE: main.js // ********************************************************************** // ** ** // ** changes to this file affect many users. ** // ** please discuss on the talk page before editing ** // ** ** // ********************************************************************** // ** ** // ** if you do edit this file, be sure that your editor recognizes it ** // ** as utf8, or the weird and wonderful characters in the namespaces ** // ** below will be completely broken. You can check with the show ** // ** changes button before submitting the edit. ** // ** test: مدیا מיוחד Мэдыя ** // ** ** // ********************************************************************** //////////////////////////////////////////////////////////////////// // Import stylesheet(s) // if ( window.localCSS ) { document.write('<link rel="stylesheet" type="text/css" href="http://localhost:8080/js/navpop.css">'); } else { document.write('<link rel="stylesheet" type="text/css" href="' + 'http://en.wikipedia.org/w/index.php?title=User:Lupin/navpop.css' + '&action=raw&ctype=text/css&dontcountme=s">'); } ////////////////////////////////////////////////// // Globals // // Trying to shove as many of these as possible into the pg (popup globals) object function pg(){}; // dummy to stop errors window.pg = { re: {}, // regexps ns: {}, // namespaces string: {}, // translatable strings wiki: {}, // local site info misc: {}, // YUCK PHOOEY option: {}, // options, see newOption etc optionDefault: {}, // default option values flag: {}, // misc flags cache: {}, // page and image cache structures: {}, // navlink structures timer: {}, // all sorts of timers (too damn many) counter: {}, // .. and all sorts of counters current: {}, // state info endoflist: null }; window.pop = { // wrap various functions in here init: {}, util: {}, endoflist: null }; function popupsReady() { if (!window.pg) { return false; } if (!pg.flag) { return false; } if (!pg.flag.finishedLoading) { return false; } return true; } //////////////////////////////////////////////////////////////////// // Run things //////////////////////////////////////////////////////////////////// hookEvent('load', setupPopups); /// Local Variables: /// /// mode:c /// /// End: /// // ENDFILE: main.js // STARTFILE: actions.js function setupTooltips(container, remove, force, popData) { log('setupTooltips, container='+container+', remove='+remove); if (!container) { //<NOLITE> // the main initial call if (getValueOf('popupOnEditSelection') && window.doSelectionPopup ) { try { document.editform.wpTextbox1.onmouseup=function() { doSelectionPopup(); }; } catch (neverMind) {} } //</NOLITE> // article/content is a structure-dependent thing container = defaultPopupsContainer(); } if (!remove && !force && container.ranSetupTooltipsAlready) { return; } container.ranSetupTooltipsAlready = !remove; var anchors; anchors=container.getElementsByTagName('A'); setupTooltipsLoop(anchors, 0, 250, 100, remove, popData); } function defaultPopupsContainer() { if (getValueOf('popupOnlyArticleLinks')) { return document.getElementById('article') || document.getElementById('content') || document; } return document; } function setupTooltipsLoop(anchors,begin,howmany,sleep, remove, popData) { log(simplePrintf('setupTooltipsLoop(%s,%s,%s,%s,%s)', arguments)); var finish=begin+howmany; var loopend = min(finish, anchors.length); var j=loopend - begin; log ('setupTooltips: anchors.length=' + anchors.length + ', begin=' + begin + ', howmany=' + howmany + ', loopend=' + loopend + ', remove=' + remove); var doTooltip= remove ? removeTooltip : addTooltip; // try a faster (?) loop construct if (j > 0) { do { var a=anchors[loopend - j]; if (!a || !a.href) { log('got null anchor at index ' + loopend - j); continue; } doTooltip(a, popData); } while (--j); } if (finish < anchors.length) { setTimeout(function() { setupTooltipsLoop(anchors,finish,howmany,sleep,remove,popData);}, sleep); } else { if ( !remove && ! getValueOf('popupTocLinks')) { rmTocTooltips(); } pg.flag.finishedLoading=true; } } // eliminate popups from the TOC // This also kills any onclick stuff that used to be going on in the toc function rmTocTooltips() { var toc=document.getElementById('toc'); if (toc) { var tocLinks=toc.getElementsByTagName('A'); var tocLen = tocLinks.length; for (j=0; j<tocLen; ++j) { removeTooltip(tocLinks[j], true); } } } function addTooltip(a, popData) { if ( !isPopupLink(a) ) { return; } a.onmouseover=mouseOverWikiLink; a.onmouseout= mouseOutWikiLink; a.onmousedown = killPopup; a.hasPopup = true; a.popData = popData; } function removeTooltip(a) { if ( !a.hasPopup ) { return; } a.onmouseover = null; a.onmouseout = null; if (a.originalTitle) { a.title = a.originalTitle; } a.hasPopup=false; } function removeTitle(a) { if (a.originalTitle) { return; } a.originalTitle=a.title; a.title=''; } function restoreTitle(a) { if ( a.title || !a.originalTitle ) { return; } a.title = a.originalTitle; a.originalTitle=''; } function registerHooks(np) { var popupMaxWidth=getValueOf('popupMaxWidth'); if (typeof popupMaxWidth == 'number') { var setMaxWidth = function () { np.mainDiv.style.maxWidth = popupMaxWidth + 'px'; np.maxWidth = popupMaxWidth; // hack for IE // see http://www.svendtofte.com/code/max_width_in_ie/ // use setExpression as documented here on msdn: http://tinyurl dot com/dqljn if (np.mainDiv.style.setExpression) { np.mainDiv.style.setExpression( 'width', 'document.body.clientWidth > ' + popupMaxWidth + ' ? "' +popupMaxWidth + 'px": "auto"'); } }; np.addHook(setMaxWidth, 'unhide', 'before'); } //<NOLITE> if (window.addPopupShortcuts && window.rmPopupShortcuts) { np.addHook(addPopupShortcuts, 'unhide', 'after'); np.addHook(rmPopupShortcuts, 'hide', 'before'); } //</NOLITE> } function mouseOverWikiLink(evt) { if (!window.popupsReady || !window.popupsReady()) { return; } if (!evt && window.event) {evt=window.event}; return mouseOverWikiLink2(this, evt); } function footnoteTarget(a) { var aTitle=Title.fromAnchor(a); // We want ".3A" rather than "%3A" or "?" here, so use the anchor property directly var anch = aTitle.anchor; if ( ! /^(_note-|endnote)/.test(anch) ) { return false; } var lTitle=Title.fromURL(location.href); if ( lTitle.toString(true) != aTitle.toString(true) ) { return false; } var el=document.getElementById(anch); while ( el && typeof el.nodeName == 'string') { var nt = el.nodeName.toLowerCase(); if ( nt == 'li' ) { return el; } else if ( nt == 'body' ) { return false; } else if ( el.parentNode ) { el=el.parentNode; } else { return false; } } return false; } function footnotePreview(x, navpop) { setPopupHTML('<hr>' + x.innerHTML, 'popupPreview', navpop.idNumber, getValueOf('popupSubpopups') ? function() { setupTooltips(document.getElementById('popupPreview' + navpop.idNumber)); } : null); } // var modid=0; // if(!window.opera) { window.opera={postError: console.log}; } function modifierKeyHandler(a) { return function(evt) { // opera.postError('modifierKeyHandler called' + (++modid)); // opera.postError(''+evt + modid); // for (var i in evt) { // opera.postError('' + modid + ' ' + i + ' ' + evt[i]); // } // opera.postError(''+evt.ctrlKey + modid); var mod=getValueOf('popupModifier'); if (!mod) { return true; } if (!evt && window.event) {evt=window.event}; // opera.postError('And now....'+modid); // opera.postError(''+evt+modid); // opera.postError(''+evt.ctrlKey+modid); if ( evt && mod && !evt[mod.toLowerCase() + 'Key'] ) { return true; } mouseOverWikiLink2(a, evt); }; } function mouseOverWikiLink2(a, evt) { // try not to duplicate effort var mod=getValueOf('popupModifier'); if ( evt && mod && !evt[mod.toLowerCase() + 'Key'] ) { // if the modifier is needed and not pressed, listen for it until // we mouseout of this link. restoreTitle(a); var addHandler='addEventListener'; var rmHandler='removeEventListener'; var on=''; if (!document.addEventListener) { addHandler='attachEvent'; rmHandler='detachEvent'; on='on'; } if (!document[addHandler]) { // forget it return; } a.modifierKeyHandler=modifierKeyHandler(a); document[addHandler](on+'keydown', a.modifierKeyHandler, false); a[addHandler](on+'mouseout', function() { document[rmHandler](on+'keydown', a.modifierKeyHandler, false); }, true); return; } if ( getValueOf('removeTitles') ) { removeTitle(a); } if ( a==pg.current.link && a.navpopup && a.navpopup.isVisible() ) { return; } pg.current.link=a; if (getValueOf('simplePopups') && pg.option.popupStructure===null) { // reset *default value* of popupStructure setDefault('popupStructure', 'original'); } var article=(new Title()).fromAnchor(a); // set global variable (ugh) to hold article (wikipage) pg.current.article = article; if (pg.timer.image !== null) { clearInterval(pg.timer.image); pg.timer.image=null; pg.counter.checkImages=0; } if (!a.navpopup) { // FIXME: this doesn't behave well if you mouse out of a popup // directly into a link with the same href if (pg.current.linksHash[a.href] && false) { a.navpopup = pg.current.linksHash[a.href]; } else { a.navpopup=newNavpopup(a, article); pg.current.linksHash[a.href] = a.navpopup; pg.current.links.push(a); } } if (a.navpopup.pending===null || a.navpopup.pending!==0) { // either fresh popups or those with unfinshed business are redone from scratch simplePopupContent(a, article); } a.navpopup.showSoonIfStable(a.navpopup.delay); getValueOf('popupInitialWidth'); clearInterval(pg.timer.checkPopupPosition); pg.timer.checkPopupPosition=setInterval(checkPopupPosition, 600); if(getValueOf('simplePopups')) { return; } if (a.navpopup.pending!==0 ) { nonsimplePopupContent(a, article); } } // simplePopupContent: the content that is shown even when simplePopups is true function simplePopupContent(a, article) { /* FIXME hack */ a.navpopup.hasPopupMenu=false; a.navpopup.setInnerHTML(popupHTML(a)); fillEmptySpans({navpopup:a.navpopup}); var dragHandle = getValueOf('popupDragHandle') || null; if (dragHandle && dragHandle != 'all') { dragHandle += a.navpopup.idNumber; } setTimeout(function(){a.navpopup.makeDraggable(dragHandle);}, 150); //<NOLITE> if (getValueOf('popupRedlinkRemoval') && a.className=='new') { setPopupHTML('<br>'+popupRedlinkHTML(article), 'popupRedlink', a.navpopup.idNumber); } //</NOLITE> } function debugData(navpopup) { if(getValueOf('popupDebugging') && navpopup.idNumber) { setPopupHTML('idNumber='+navpopup.idNumber + ', pending=' + navpopup.pending, 'popupError', navpopup.idNumber); } } function newNavpopup(a, article) { var navpopup = new Navpopup(); navpopup.fuzz=5; navpopup.delay=getValueOf('popupDelay')*1000; // increment global counter now navpopup.idNumber = ++pg.idNumber; navpopup.parentAnchor = a; navpopup.parentPopup = (a.popData && a.popData.owner); navpopup.article = article; registerHooks(navpopup); return navpopup; } function nonsimplePopupContent(a, article) { var diff=null, history=null; var params=parseParams(a.href); var oldid=(typeof params.oldid=='undefined' ? null : params.oldid); //<NOLITE> if(getValueOf('popupPreviewDiffs') && window.loadDiff) { diff=params.diff; } if(getValueOf('popupPreviewHistory') && getValueOf('popupUseQueryInterface')) { history=(params.action=='history'); } //</NOLITE> a.navpopup.pending=0; var previewImage=true; var x; pg.misc.gImage=null; if (x=footnoteTarget(a)) { footnotePreview(x, a.navpopup); //<NOLITE> } else if ( diff || diff === 0 ) { //alert([article,oldid,diff]); loadDiff(article, oldid, diff, a.navpopup); } else if ( history && getValueOf('popupUseQueryInterface') ) { loadQueryPreview('history', article, a.navpopup); } else if ( pg.re.contribs.test(a.href) && getValueOf('popupUseQueryInterface')) { loadQueryPreview('contribs', article, a.navpopup); } else if ( pg.re.backlinks.test(a.href) && getValueOf('popupUseQueryInterface')) { loadQueryPreview('backlinks', article, a.navpopup); } else if ( // FIXME should be able to get all preview combinations with options article.namespace()==pg.ns.image && ( getValueOf('imagePopupsForImages') || ! anchorContainsImage(a) ) ) { if (getValueOf('popupUseQueryInterface')) { loadQueryPreview('imagepagepreview', article, a.navpopup); } else { startArticlePreview(article, oldid, a.navpopup); } loadImages(article); //</NOLITE> } else if (article.namespace() == pg.ns.category && getValueOf('popupCategoryMembers')) { getValueOf('popupUseQueryInterface') && loadQueryPreview('category', article, a.navpopup); startArticlePreview(article, oldid, a.navpopup); } else if (!article.namespace()!=pg.ns.image && previewImage ) { startArticlePreview(article, oldid, a.navpopup); } } function pendingNavpopTask(navpop) { if (navpop && navpop.pending===null) { navpop.pending=0; } ++navpop.pending; debugData(navpop); } function completedNavpopTask(navpop) { if (navpop && navpop.pending) { --navpop.pending; } debugData(navpop); } function startArticlePreview(article, oldid, navpop) { navpop.redir=0; loadPreview(article, oldid, navpop); } function loadPreview(article, oldid, navpop) { pendingNavpopTask(navpop); if (!navpop.redir) { navpop.originalArticle=article; } if (!navpop.visible && getValueOf('popupLazyDownloads')) { var id=(navpop.redir) ? 'DOWNLOAD_PREVIEW_REDIR_HOOK' : 'DOWNLOAD_PREVIEW_HOOK'; navpop.addHook(function() { getWiki(article, insertPreview, oldid, navpop); return true; }, 'unhide', 'before', id); } else { getWiki(article, insertPreview, oldid, navpop); } } function loadPreviewFromRedir(redirMatch, navpop) { // redirMatch is a regex match var target = new Title().fromWikiText(redirMatch[2]); // overwrite (or add) anchor from original target // mediawiki does overwrite; eg [[User:Lupin/foo3#Done]] if ( navpop.article.anchor ) { target.anchor = navpop.article.anchor; } var trailingRubbish=redirMatch[4]; navpop.redir++; navpop.redirTarget=target; //<NOLITE> if (window.redirLink) { var warnRedir = redirLink(target, navpop.article); setPopupHTML(warnRedir, 'popupWarnRedir', navpop.idNumber); } //</NOLITE> navpop.article=target; fillEmptySpans({redir: true, redirTarget: target, navpopup:navpop}); return loadPreview(target, null, navpop); } function insertPreview(download) { if (!download.owner) { return; } var redirMatch = pg.re.redirect.exec(download.data); if (download.owner.redir===0 && redirMatch) { completedNavpopTask(download.owner); loadPreviewFromRedir(redirMatch, download.owner); return; } if (download.owner.visible || !getValueOf('popupLazyPreviews')) { insertPreviewNow(download); } else { var id=(download.owner.redir) ? 'PREVIEW_REDIR_HOOK' : 'PREVIEW_HOOK'; download.owner.addHook( function(){insertPreviewNow(download); return true;}, 'unhide', 'after', id ); } } function insertPreviewNow(download) { if (!download.owner) { return; } var wikiText=download.data; var navpop=download.owner; completedNavpopTask(navpop); var art=navpop.redirTarget || navpop.originalArticle; //<NOLITE> makeFixDabs(wikiText, navpop); if (getValueOf('popupSummaryData') && window.getPageInfo) { var info=getPageInfo(wikiText, download); setPopupTrailer(getPageInfo(wikiText, download), navpop.idNumber); } var imagePage=''; if (art.namespace()==pg.ns.image) { imagePage=art.toString(); } else { imagePage=getValidImageFromWikiText(wikiText); } if(imagePage) { loadImages(Title.fromWikiText(imagePage)); } //</NOLITE> if (getValueOf('popupPreviews')) { insertArticlePreview(download, art, navpop); } } function insertArticlePreview(download, art, navpop) { if (download && typeof download.data == typeof ''){ if (art.namespace()==pg.ns.template && getValueOf('popupPreviewRawTemplates')) { // FIXME compare/consolidate with diff escaping code for wikitext var h='<hr><tt>' + download.data.entify().split('\\n').join('<br>\\n') + '</tt>'; setPopupHTML(h, 'popupPreview', navpop.idNumber); } else { var p=prepPreviewmaker(download.data, art, navpop); p.showPreview(); } } } function prepPreviewmaker(data, article, navpop) { // deal with tricksy anchors var d=anchorize(data, article.anchorString()); var urlBase=joinPath([pg.wiki.articlebase, article.urlString()]); var p=new Previewmaker(d, urlBase, navpop); return p; } // Try to imitate the way mediawiki generates HTML anchors from section titles function anchorize(d, anch) { if (!anch) { return d; } var anchRe=RegExp('=+\\s*' + literalizeRegex(anch).replace(/[_ ]/g, '[_ ]') + '\\s*=+'); var match=d.match(anchRe); if(match && match.length > 0 && match[0]) { return d.substring(d.indexOf(match[0])); } // now try to deal with == foo [[bar|baz]] boom == -> #foo_baz_boom var lines=d.split('\n'); for (var i=0; i<lines.length; ++i) { lines[i]=lines[i].replace(RegExp('[[]{2}([^|\\]]*?[|])?(.*?)[\\]]{2}', 'g'), '$2') .replace(/'''([^'])/g, '$1').replace(RegExp("''([^'])", 'g'), '$1'); if (lines[i].match(anchRe)) { return d.split('\n').slice(i).join('\n').replace(RegExp('^[^=]*'), ''); } } return d; } function killPopup() { if (getValueOf('popupShortcutKeys') && window.rmPopupShortcuts) { rmPopupShortcuts(); } if (!pg) { return; } pg.current.link && pg.current.link.navpopup && pg.current.link.navpopup.banish(); pg.current.link=null; abortAllDownloads(); window.stopImagesDownloading && stopImagesDownloading(); if (pg.timer.checkPopupPosition !== null) { clearInterval(pg.timer.checkPopupPosition); pg.timer.checkPopupPosition=null; } if (pg.timer.checkImages !== null) { clearInterval(pg.timer.checkImages); pg.timer.checkImages=null; } if (pg.timer.image !== null) { clearInterval(pg.timer.image); pg.timer.image=null; } return true; // preserve default action } // ENDFILE: actions.js // STARTFILE: domdrag.js /** @fileoverview The {@link Drag} object, which enables objects to be dragged around. <pre> ************************************************* dom-drag.js 09.25.2001 www.youngpup.net ************************************************** 10.28.2001 - fixed minor bug where events sometimes fired off the handle, not the root. ************************************************* Pared down, some hooks added by [[User:Lupin]] Copyright Aaron Boodman. Saying stupid things daily since March 2001. </pre> */ /** Creates a new Drag object. This is used to make various DOM elements draggable. @constructor */ function Drag () { /** Condition to determine whether or not to drag. This function should take one parameter, an Event. To disable this, set it to <code>null</code>. @type Function */ this.startCondition = null; /** Hook to be run when the drag finishes. This is passed the final coordinates of the dragged object (two integers, x and y). To disables this, set it to <code>null</code>. @type Function */ this.endHook = null; } /** Gets an event in a cross-browser manner. @param {Event} e @private */ Drag.prototype.fixE = function(e) { if (typeof e == 'undefined') { e = window.event; } if (typeof e.layerX == 'undefined') { e.layerX = e.offsetX; } if (typeof e.layerY == 'undefined') { e.layerY = e.offsetY; } return e; }; /** Initialises the Drag instance by telling it which object you want to be draggable, and what you want to drag it by. @param {DOMElement} o The "handle" by which <code>oRoot</code> is dragged. @param {DOMElement} oRoot The object which moves when <code>o</code> is dragged, or <code>o</code> if omitted. */ Drag.prototype.init = function(o, oRoot) { var dragObj = this; this.obj = o; o.onmousedown = function(e) { dragObj.start.apply( dragObj, [e]); }; o.dragging = false; o.draggable = true; o.hmode = true; o.vmode = true; o.root = oRoot && oRoot !== null ? oRoot : o ; if (isNaN(parseInt(o.root.style.left, 10))) { o.root.style.left = "0px"; } if (isNaN(parseInt(o.root.style.top, 10))) { o.root.style.top = "0px"; } o.root.onthisStart = function(){}; o.root.onthisEnd = function(){}; o.root.onthis = function(){}; }; /** Starts the drag. @private @param {Event} e */ Drag.prototype.start = function(e) { var o = this.obj; // = this; e = this.fixE(e); if (this.startCondition && !this.startCondition(e)) { return; } var y = parseInt(o.vmode ? o.root.style.top : o.root.style.bottom, 10); var x = parseInt(o.hmode ? o.root.style.left : o.root.style.right, 10); o.root.onthisStart(x, y); o.lastMouseX = e.clientX; o.lastMouseY = e.clientY; var dragObj = this; o.onmousemoveDefault = document.onmousemove; o.dragging = true; document.onmousemove = function(e) { dragObj.drag.apply( dragObj, [e] ); }; document.onmouseup = function(e) { dragObj.end.apply( dragObj, [e] ); }; return false; }; /** Does the drag. @param {Event} e @private */ Drag.prototype.drag = function(e) { e = this.fixE(e); var o = this.obj; var ey = e.clientY; var ex = e.clientX; var y = parseInt(o.vmode ? o.root.style.top : o.root.style.bottom, 10); var x = parseInt(o.hmode ? o.root.style.left : o.root.style.right, 10 ); var nx, ny; nx = x + ((ex - o.lastMouseX) * (o.hmode ? 1 : -1)); ny = y + ((ey - o.lastMouseY) * (o.vmode ? 1 : -1)); this.obj.root.style[o.hmode ? "left" : "right"] = nx + "px"; this.obj.root.style[o.vmode ? "top" : "bottom"] = ny + "px"; this.obj.lastMouseX = ex; this.obj.lastMouseY = ey; this.obj.root.onthis(nx, ny); return false; }; /** Ends the drag. @private */ Drag.prototype.end = function() { document.onmousemove=this.obj.onmousemoveDefault; document.onmouseup = null; this.obj.dragging = false; if (this.endHook) { this.endHook( parseInt(this.obj.root.style[this.obj.hmode ? "left" : "right"], 10), parseInt(this.obj.root.style[this.obj.vmode ? "top" : "bottom"], 10)); } }; // ENDFILE: domdrag.js // STARTFILE: structures.js //<NOLITE> pg.structures.original={}; pg.structures.original.popupLayout=function () { return ['popupError', 'popupImage', 'popupTopLinks', 'popupTitle', 'popupData', 'popupOtherLinks', 'popupRedir', ['popupWarnRedir', 'popupRedirTopLinks', 'popupRedirTitle', 'popupRedirData', 'popupRedirOtherLinks'], 'popupMiscTools', ['popupRedlink'], 'popupPrePreviewSep', 'popupPreview', 'popupSecondPreview', 'popupPreviewMore', 'popupPostPreview', 'popupFixDab']; }; pg.structures.original.popupRedirSpans=function () { return ['popupRedir', 'popupWarnRedir', 'popupRedirTopLinks', 'popupRedirTitle', 'popupRedirData', 'popupRedirOtherLinks']; }; pg.structures.original.popupTitle=function (x) { log ('defaultstructure.popupTitle'); if (!getValueOf('popupNavLinks')) { return navlinkStringToHTML('<b><<mainlink>></b>',x.article,x.params); } return ''; }; pg.structures.original.popupTopLinks=function (x) { log ('defaultstructure.popupTopLinks'); if (getValueOf('popupNavLinks')) { return navLinksHTML(x.article, x.hint, x.params); } return ''; }; pg.structures.original.popupImage=function(x) { log ('original.popupImage, x.article='+x.article+', x.navpop.idNumber='+x.navpop.idNumber); return imageHTML(x.article, x.navpop.idNumber); }; pg.structures.original.popupRedirTitle=pg.structures.original.popupTitle; pg.structures.original.popupRedirTopLinks=pg.structures.original.popupTopLinks; function copyStructure(oldStructure, newStructure) { pg.structures[newStructure]={}; for (var prop in pg.structures[oldStructure]) { pg.structures[newStructure][prop]=pg.structures[oldStructure][prop]; } } copyStructure('original', 'nostalgia'); pg.structures.nostalgia.popupTopLinks=function(x) { var str=''; str += '<b><<mainlink|shortcut= >></b>'; // user links // contribs - log - count - email - block // count only if applicable; block only if popupAdminLinks str += 'if(user){<br><<contribs|shortcut=c>>'; str+='if(wikimedia){*<<count|shortcut=#>>}'; str+='if(ipuser){}else{*<<email|shortcut=E>>}if(admin){*<<block|shortcut=b>>}}'; // editing links // talkpage -> edit|new - history - un|watch - article|edit // other page -> edit - history - un|watch - talk|edit|new var editstr='<<edit|shortcut=e>>'; var editOldidStr='if(oldid){<<editOld|shortcut=e>>|<<revert|shortcut=v|rv>>|<<edit|cur>>}else{' + editstr + '}' var historystr='<<history|shortcut=h>>'; var watchstr='<<unwatch|unwatchShort>>|<<watch|shortcut=w|watchThingy>>'; str+='<br>if(talk){' + editOldidStr+'|<<new|shortcut=+>>' + '*' + historystr+'*'+watchstr + '*' + '<b><<article|shortcut=a>></b>|<<editArticle|edit>>' + '}else{' + // not a talk page editOldidStr + '*' + historystr + '*' + watchstr + '*' + '<b><<talk|shortcut=t>></b>|<<editTalk|edit>>|<<newTalk|shortcut=+|new>>' + '}'; // misc links str += '<br><<whatLinksHere|shortcut=l>>*<<relatedChanges|shortcut=r>>'; str += 'if(admin){<br>}else{*}<<move|shortcut=m>>'; // admin links str += 'if(admin){*<<unprotect|unprotectShort>>|<<protect|shortcut=p>>*' + '<<undelete|undeleteShort>>|<<delete|shortcut=d>>}'; return navlinkStringToHTML(str, x.article, x.params); }; pg.structures.nostalgia.popupRedirTopLinks=pg.structures.nostalgia.popupTopLinks; /** -- fancy -- **/ copyStructure('original', 'fancy'); pg.structures.fancy.popupTitle=function (x) { return navlinkStringToHTML('<font size=+0><<mainlink>></font>',x.article,x.params); }; pg.structures.fancy.popupTopLinks=function(x) { var hist='<<history|shortcut=h|hist>>|<<lastEdit|shortcut=/|last>>if(mainspace_en){|<<editors|shortcut=E|eds>>}'; var watch='<<unwatch|unwatchShort>>|<<watch|shortcut=w|watchThingy>>'; var move='<<move|shortcut=m|move>>'; return navlinkStringToHTML('if(talk){' + '<<edit|shortcut=e>>|<<new|shortcut=+|+>>*' + hist + '*' + '<<article|shortcut=a>>|<<editArticle|edit>>' + '*' + watch + '*' + move + '}else{<<edit|shortcut=e>>*' + hist + '*<<talk|shortcut=t|>>|<<editTalk|edit>>|<<newTalk|shortcut=+|new>>' + '*' + watch + '*' + move+'}<br>', x.article, x.params); }; pg.structures.fancy.popupOtherLinks=function(x) { var admin='<<unprotect|unprotectShort>>|<<protect|shortcut=p>>*<<undelete|undeleteShort>>|<<delete|shortcut=d|del>>'; var user='<<contribs|shortcut=c>>if(wikimedia){|<<count|shortcut=#|#>>}'; user+='if(ipuser){|<<arin>>}else{*<<email|shortcut=E|'+ popupString('email')+'>>}if(admin){*<<block|shortcut=b>>}'; var normal='<<whatLinksHere|shortcut=l|links here>>*<<relatedChanges|shortcut=r|related>>'; return navlinkStringToHTML('<br>if(user){' + user + '*}if(admin){'+admin+'if(user){<br>}else{*}}' + normal, x.article, x.params); }; pg.structures.fancy.popupRedirTitle=pg.structures.fancy.popupTitle; pg.structures.fancy.popupRedirTopLinks=pg.structures.fancy.popupTopLinks; pg.structures.fancy.popupRedirOtherLinks=pg.structures.fancy.popupOtherLinks; /** -- fancy2 -- **/ // hack for [[User:MacGyverMagic]] copyStructure('fancy', 'fancy2'); pg.structures.fancy2.popupTopLinks=function(x) { // hack out the <br> at the end and put one at the beginning return '<br>'+pg.structures.fancy.popupTopLinks(x).replace(RegExp('<br>$','i'),''); }; pg.structures.fancy2.popupLayout=function () { // move toplinks to after the title return ['popupError', 'popupImage', 'popupTitle', 'popupData', 'popupTopLinks', 'popupOtherLinks', 'popupRedir', ['popupWarnRedir', 'popupRedirTopLinks', 'popupRedirTitle', 'popupRedirData', 'popupRedirOtherLinks'], 'popupMiscTools', ['popupRedlink'], 'popupPrePreviewSep', 'popupPreview', 'popupSecondPreview', 'popupPreviewMore', 'popupPostPreview', 'popupFixDab']; }; /** -- menus -- **/ copyStructure('original', 'menus'); pg.structures.menus.popupLayout=function () { return ['popupError', 'popupImage', 'popupTopLinks', 'popupTitle', 'popupOtherLinks', 'popupRedir', ['popupWarnRedir', 'popupRedirTopLinks', 'popupRedirTitle', 'popupRedirData', 'popupRedirOtherLinks'], 'popupData', 'popupMiscTools', ['popupRedlink'], 'popupPrePreviewSep', 'popupPreview', 'popupSecondPreview', 'popupPreviewMore', 'popupPostPreview', 'popupFixDab']; }; function toggleSticky(uid) { var popDiv=document.getElementById('navpopup_maindiv'+uid); if (!popDiv) { return; } if (!popDiv.navpopup.sticky) { popDiv.navpopup.stick(); } else { popDiv.navpopup.unstick(); popDiv.navpopup.hide(); } } pg.structures.menus.popupTopLinks = function (x, shorter) { // FIXME maybe this stuff should be cached var s=[]; var dropdiv='<div class="popup_drop">'; var enddiv='</div>'; var endspan='</span>'; var hist='<<history|shortcut=h>>'; if (!shorter) { hist = '<menurow>' + hist + '|<<historyfeed|rss>>if(mainspace_en){|<<editors|shortcut=E>>}</menurow>'; } var lastedit='<<lastEdit|shortcut=/|show last edit>>'; var jsHistory='<<lastContrib|last set of edits>><<sinceMe|changes since mine>>'; var linkshere='<<whatLinksHere|shortcut=l|what links here>>'; var related='<<relatedChanges|shortcut=r|related changes>>'; var search='<menurow><<search|shortcut=s>>if(wikimedia){|<<globalsearch|shortcut=g|global>>}' + '|<<google|shortcut=G|web>></menurow>'; var watch='<menurow><<unwatch|unwatchShort>>|<<watch|shortcut=w|watchThingy>></menurow>'; var protect='<menurow><<unprotect|unprotectShort>>|' + '<<protect|shortcut=p>>|<<protectlog|log>></menurow>'; var del='<menurow><<undelete|undeleteShort>>|<<delete|shortcut=d>>|' + '<<deletelog|log>></menurow>'; var move='<<move|shortcut=m|move page>>'; var nullPurge='<menurow><<nullEdit|shortcut=n|null edit>>|<<purge|shortcut=P>></menurow>'; var viewOptions='<menurow><<view|shortcut=v>>|<<render|shortcut=S>>|<<raw>></menurow>'; var editRow='if(oldid){' + '<menurow><<edit|shortcut=e>>|<<editOld|shortcut=e|this&nbsp;revision>></menurow>' + '<menurow><<revert|shortcut=v>>|<<undo>></menurow>' + '}else{<<edit|shortcut=e>>}'; var markPatrolled='if(rcid){<<markpatrolled|mark patrolled>>}'; var newTopic='if(talk){<<new|shortcut=+|new topic>>}'; var protectDelete='if(admin){' + protect + del + '}'; if (getValueOf('popupActionsMenu')) { s.push( '<<mainlink>>*' + dropdiv + menuTitle('actions')); } else { s.push( dropdiv + '<<mainlink>>'); } s.push( '<menu>') s.push( editRow + markPatrolled + newTopic + hist + lastedit ) if (!shorter) { s.push(jsHistory); } s.push( move + linkshere + related) if (!shorter) { s.push(nullPurge + search); } if (!shorter) { s.push(viewOptions); } s.push('<hr>' + watch + protectDelete); s.push('<hr>' + 'if(talk){<<article|shortcut=a|view article>><<editArticle|edit article>>}' + 'else{<<talk|shortcut=t|talk page>><<editTalk|edit talk>>' + '<<newTalk|shortcut=+|new topic>>}</menu>' + enddiv); // user menu starts here var email='<<email|shortcut=E|email user>>'; var contribs= 'if(wikimedia){<menurow>}<<contribs|shortcut=c|contributions>>' + 'if(wikimedia){|<<contribsTree|tree>></menurow>}'; s.push('if(user){*' + dropdiv + menuTitle('user')); s.push('<menu>'); + s.push('<menurow><<userPage|shortcut=u|user&nbsp;page>>|<<userSpace|space>></menurow>'); s.push('<<userTalk|shortcut=t|user talk>><<editUserTalk|edit user talk>>' + '<<newUserTalk|shortcut=+|leave comment>>'); if(!shorter) { s.push( 'if(ipuser){<<arin>>}else{' + email + '}') } else { s.push( 'if(ipuser){}else{' + email + '}') } s.push('<hr>' + contribs + '<<userlog|shortcut=L|user log>>'); s.push('if(wikimedia){<<count|shortcut=#|edit counter>>}'); s.push('if(admin){<menurow><<unblock|unblockShort>>|<<block|shortcut=b|block user>></menurow>}'); s.push('<<blocklog|shortcut=B|block log>>' + getValueOf('popupExtraUserMenu')); s.push('</menu>' + enddiv + '}'); // popups menu starts here if (getValueOf('popupSetupMenu') && !x.navpop.hasPopupMenu /* FIXME: hack */) { x.navpop.hasPopupMenu=true; s.push('*' + dropdiv + menuTitle('popupsMenu') + '<menu>'); s.push('<<togglePreviews|toggle previews>>'); s.push('<<purgePopups|reset>>'); s.push('<<disablePopups|disable>>'); s.push('</menu>'+enddiv); } return navlinkStringToHTML(s.join(''), x.article, x.params); }; function menuTitle(s) { return '<a href="#" noPopup=1>' + popupString(s) + '</a>'; } pg.structures.menus.popupRedirTitle=pg.structures.menus.popupTitle; pg.structures.menus.popupRedirTopLinks=pg.structures.menus.popupTopLinks; copyStructure('menus', 'shortmenus'); pg.structures.shortmenus.popupTopLinks=function(x) { return pg.structures.menus.popupTopLinks(x,true); }; pg.structures.shortmenus.popupRedirTopLinks=pg.structures.shortmenus.popupTopLinks; //</NOLITE> pg.structures.lite={}; pg.structures.lite.popupLayout=function () { return ['popupTitle', 'popupPreview' ]; }; pg.structures.lite.popupTitle=function (x) { log (x.article + ': structures.lite.popupTitle'); //return navlinkStringToHTML('<b><<mainlink>></b>',x.article,x.params); return '<div><span class="popup_mainlink"><b>' + x.article.toString() + '</b></span></div>'; }; // ENDFILE: structures.js // STARTFILE: autoedit.js //<NOLITE> function getParamValue(paramName, h) { if (typeof h == 'undefined' ) { h = document.location.href; } var cmdRe=RegExp('[&?]'+paramName+'=([^&]*)'); var m=cmdRe.exec(h); if (m) { try { return decodeURI(m[1]); } catch (someError) {} } return null; } function substitute(data,cmdBody) { // alert('sub\nfrom: '+cmdBody.from+'\nto: '+cmdBody.to+'\nflags: '+cmdBody.flags); var fromRe=RegExp(cmdBody.from, cmdBody.flags); return data.replace(fromRe, cmdBody.to); } function execCmds(data, cmdList) { for (var i=0; i<cmdList.length; ++i) { data=cmdList[i].action(data, cmdList[i]); } return data; } function parseCmd(str) { // returns a list of commands if (!str.length) { return []; } var p=false; switch (str.charAt(0)) { case 's': p=parseSubstitute(str); break; default: return false; } if (p) { return [p].concat(parseCmd(p.remainder)); } return false; } function unEscape(str, sep) { return str.split('\\\\').join('\\').split('\\'+sep).join(sep).split('\\n').join('\n'); } function parseSubstitute(str) { // takes a string like s/a/b/flags;othercmds and parses it var from,to,flags,tmp; if (str.length<4) { return false; } var sep=str.charAt(1); str=str.substring(2); tmp=skipOver(str,sep); if (tmp) { from=tmp.segment; str=tmp.remainder; } else { return false; } tmp=skipOver(str,sep); if (tmp) { to=tmp.segment; str=tmp.remainder; } else { return false; } flags=''; if (str.length) { tmp=skipOver(str,';') || skipToEnd(str, ';'); if (tmp) {flags=tmp.segment; str=tmp.remainder; } } return {action: substitute, from: from, to: to, flags: flags, remainder: str}; } function skipOver(str,sep) { var endSegment=findNext(str,sep); if (endSegment<0) { return false; } var segment=unEscape(str.substring(0,endSegment), sep); return {segment: segment, remainder: str.substring(endSegment+1)}; } function skipToEnd(str,sep) { return {segment: str, remainder: ''}; } function findNext(str, ch) { for (var i=0; i<str.length; ++i) { if (str.charAt(i)=='\\') { i+=2; } if (str.charAt(i)==ch) { return i; } } return -1; } function setCheckbox(param, box) { var val=getParamValue(param); if (val!==null) { switch (val) { case '1': case 'yes': case 'true': box.checked=true; break; case '0': case 'no': case 'false': box.checked=false; } } } function autoEdit() { if (!setupPopups.completed) { setupPopups(); } if (!document.editform) { return false; } if (window.autoEdit.alreadyRan) { return false; } window.autoEdit.alreadyRan=true; var cmdString=getParamValue('autoedit'); if (cmdString) { try { var editbox=document.editform.wpTextbox1; } catch (dang) { return; } var cmdList=parseCmd(cmdString); var input=editbox.value; var output=execCmds(input, cmdList); editbox.value=output; } setCheckbox('autominor', document.editform.wpMinoredit); setCheckbox('autowatch', document.editform.wpWatchthis); var rvid = getParamValue('autorv'); if (getValueOf('popupUseQueryInterface') && getParamValue('autorv')) { var url=pg.wiki.wikibase + '/query.php?format=json&what=revisions&revids='+rvid; startDownload(url, null, autoEdit2); } else { autoEdit2(); } } function autoEdit2(d) { var summary=getParamValue('autosummary'); var summaryprompt=getParamValue('autosummaryprompt'); var summarynotice=''; if (d && d.data && getParamValue('autorv')) { var s = getRvSummary(summary, d.data); if (s===false) { summaryprompt=true; summarynotice=popupString('Failed to get revision information, please edit manually.\n\n'); summary = simplePrintf(summary, [getParamValue('autorv'), '(unknown)', '(unknown)']); } else { summary = s; } } if (summaryprompt) { var txt= summarynotice + popupString('Enter a non-empty edit summary or press cancel to abort'); var response=prompt(txt, summary); if (response) { summary=response; } else { return; } } if (summary) { document.editform.wpSummary.value=summary; } // Attempt to avoid possible premature clicking of the save button // (maybe delays in updates to the DOM are to blame?? or a red herring) setTimeout(autoEdit3, 100); } function autoClickToken() { return document.cookie.substr(document.cookie.indexOf("session=")+8,4); } function autoEdit3() { if (getParamValue('actoken') != autoClickToken()) return; var btn=getParamValue('autoclick'); if (btn) { if (document.editform && document.editform[btn]) { var button=document.editform[btn]; var msg=tprintf('The %s button has been automatically clicked. Please wait for the next page to load.', [ button.value ]); bannerMessage(msg); document.title='('+document.title+')'; button.click(); } else { alert(tprintf('Could not find button %s. Please check the settings in your javascript file.', [ btn ])); } } } function bannerMessage(s) { var headings=document.getElementsByTagName('h1'); if (headings) { var div=document.createElement('div'); div.innerHTML='<font size=+1><b>' + s + '</b></font>'; headings[0].parentNode.insertBefore(div, headings[0]); } } function getRvSummary(template, json) { var o=getJsObj(json); try { var edit = anyChild(o.pages).revisions[0]; } catch (badness) {return false;} var timestamp = edit.timestamp.split(/[A-Z]/g).join(' ').replace(/^ *| *$/g, ''); return simplePrintf(template, [edit.revid, timestamp, edit.user]); } hookEvent('load', autoEdit); //</NOLITE> // ENDFILE: autoedit.js // STARTFILE: downloader.js /** @fileoverview {@link Downloader}, a xmlhttprequest wrapper, and helper functions. */ /** Creates a new Downloader @constructor @class The Downloader class. Create a new instance of this class to download stuff. @param {String} url The url to download. This can be omitted and supplied later. */ function Downloader(url) { // Source: http://jibbering.com/2002/4/httprequest.html /** xmlhttprequest object which we're wrapping */ this.http = false; /*@cc_on @*/ /*@if (@_jscript_version >= 5) // JScript gives us Conditional compilation, // we can cope with old IE versions. // and security blocked creation of the objects. try { this.http = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { this.http = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { // this.http = false; } } @end @*/ if (! this.http && typeof XMLHttpRequest!='undefined') { this.http = new XMLHttpRequest(); } /** The url to download @type String */ this.url = url; /** A universally unique ID number @type integer */ this.id=null; /** Modification date, to be culled from the incoming headers @type Date @private */ this.lastModified = null; /** What to do when the download completes successfully @type Function @private */ this.callbackFunction = null; /** What to do on failure @type Function @private */ this.onFailure = null; /** Flag set on <code>abort</code> @type boolean */ this.aborted = false; /** HTTP method. See http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html for possibilities. @type String */ this.method='GET'; /** Async flag. @type boolean */ this.async=true; } new Downloader(); /** Submits the http request. */ Downloader.prototype.send = function (x) { if (!this.http) { return null; } return this.http.send(x); }; /** Aborts the download, setting the <code>aborted</code> field to true. */ Downloader.prototype.abort = function () { if (!this.http) { return null; } this.aborted=true; return this.http.abort(); }; /** Returns the downloaded data. */ Downloader.prototype.getData = function () {if (!this.http) { return null; } return this.http.responseText;}; /** Prepares the download. */ Downloader.prototype.setTarget = function () { if (!this.http) { return null; } this.http.open(this.method, this.url, this.async); }; /** Gets the state of the download. */ Downloader.prototype.getReadyState=function () {if (!this.http) { return null; } return this.http.readyState;}; pg.misc.downloadsInProgress = { }; /** Starts the download. Note that setTarget {@link Downloader#setTarget} must be run first */ Downloader.prototype.start=function () { if (!this.http) { return; } pg.misc.downloadsInProgress[this.id] = this; this.http.send(null); }; /** Gets the 'Last-Modified' date from the download headers. Should be run after the download completes. Returns <code>null</code> on failure. @return {Date} */ Downloader.prototype.getLastModifiedDate=function () { if(!this.http) { return null; } var lastmod=null; try { lastmod=this.http.getResponseHeader('Last-Modified'); } catch (err) {} if (lastmod) { return new Date(lastmod); } return null; }; /** Sets the callback function. @param {Function} f callback function, called as <code>f(this)</code> on success */ Downloader.prototype.setCallback = function (f) { if(!this.http) { return; } this.http.onreadystatechange = f; }; Downloader.prototype.getStatus = function() { if (!this.http) { return null; } return this.http.status; }; ////////////////////////////////////////////////// // helper functions /** Creates a new {@link Downloader} and prepares it for action. @param {String} url The url to download @param {integer} id The ID of the {@link Downloader} object @param {Function} callback The callback function invoked on success @return {String/Downloader} the {@link Downloader} object created, or 'ohdear' if an unsupported browser */ function newDownload(url, id, callback, onfailure) { var d=new Downloader(url); if (!d.http) { return 'ohdear'; } d.id=id; d.setTarget(); if (!onfailure) { onfailure=2; } var f = function () { if (d.getReadyState() == 4) { delete pg.misc.downloadsInProgress[this.id]; try { if ( d.getStatus() == 200 ) { d.data=d.getData(); d.lastModified=d.getLastModifiedDate(); callback(d); } else if (typeof onfailure == typeof 1) { if (onfailure > 0) { // retry newDownload(url, id, callback, onfailure - 1); } } else if (typeof onfailure == 'function') { onfailure(d,url,id,callback); } } catch (somerr) { /* ignore it */ } } }; d.setCallback(f); return d; } /** Simulates a download from cached data. The supplied data is put into a {@link Downloader} as if it had downloaded it. @param {String} url The url. @param {integer} id The ID. @param {Function} callback The callback, which is invoked immediately as <code>callback(d)</code>, where <code>d</code> is the new {@link Downloader}. @param {String} data The (cached) data. @param {Date} lastModified The (cached) last modified date. */ function fakeDownload(url, id, callback, data, lastModified, owner) { var d=newDownload(url,callback); d.owner=owner; d.id=id; d.data=data; d.lastModified=lastModified; return callback(d); } /** Starts a download. @param {String} url The url to download @param {integer} id The ID of the {@link Downloader} object @param {Function} callback The callback function invoked on success @return {String/Downloader} the {@link Downloader} object created, or 'ohdear' if an unsupported browser */ function startDownload(url, id, callback) { var d=newDownload(url, id, callback); if (typeof d == typeof '' ) { return d; } d.start(); return d; } /** Aborts all downloads which have been started. */ function abortAllDownloads() { for ( var x in pg.misc.downloadsInProgress ) { try { pg.misc.downloadsInProgress[x].aborted=true; pg.misc.downloadsInProgress[x].abort(); delete pg.misc.downloadsInProgress[x]; } catch (e) { } } } // ENDFILE: downloader.js // STARTFILE: livepreview.js // TODO: location is often not correct (eg relative links in previews) /** * InstaView - a Mediawiki to HTML converter in JavaScript * Version 0.6.1 * Copyright (C) Pedro Fayolle 2005-2006 * http://en.wikipedia.org/wiki/User:Pilaf * Distributed under the BSD license * * Changelog: * * 0.6.1 * - Fixed problem caused by \r characters * - Improved inline formatting parser * * 0.6 * - Changed name to InstaView * - Some major code reorganizations and factored out some common functions * - Handled conversion of relative links (i.e. [[/foo]]) * - Fixed misrendering of adjacent definition list items * - Fixed bug in table headings handling * - Changed date format in signatures to reflect Mediawiki's * - Fixed handling of [[:Image:...]] * - Updated MD5 function (hopefully it will work with UTF-8) * - Fixed bug in handling of links inside images * * To do: * - Better support for <math> * - Full support for <nowiki> * - Parser-based (as opposed to RegExp-based) inline wikicode handling (make it one-pass and bullet-proof) * - Support for templates (through AJAX) * - Support for coloured links (AJAX) */ var Insta = {} function setupLivePreview() { // options Insta.conf = { baseUrl: '', user: {}, wiki: { lang: pg.wiki.lang, interwiki: pg.wiki.interwiki, default_thumb_width: 180 }, paths: { articles: '/' + joinPath([pg.wiki.prePath, pg.wiki.articlePath]) + '/', math: '/math/', // FIXME images: ( window.getImageUrlStart ? getImageUrlStart(pg.wiki.hostname) : ''), images_fallback: 'http://upload.wikimedia.org/wikipedia/commons/', magnify_icon: 'skins/common/images/magnify-clip.png' }, locale: { user: pg.ns.user, image: pg.ns.image, category: pg.ns.category, // shouldn't be used in popup previews, i think months: ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'] } } // options with default values or backreferences with (Insta.conf) { user.name = user.name || 'Wikipedian' user.signature = '[['+locale.user+':'+user.name+'|'+user.name+']]' //paths.images = 'http://upload.wikimedia.org/wikipedia/' + wiki.lang + '/' } // define constants Insta.BLOCK_IMAGE = new RegExp('^\\[\\[(?:Image|'+Insta.conf.locale.image+ '):.*?\\|.*?(?:frame|thumbnail|thumb|none|right|left|center)', 'i'); } Insta.dump = function(from, to) { if (typeof from == 'string') from = document.getElementById(from) if (typeof to == 'string') to = document.getElementById(to) to.innerHTML = this.convert(from.value) } Insta.convert = function(wiki) { var ll = (typeof wiki == 'string')? wiki.replace(/\r/g,'').split(/\n/): wiki, // lines of wikicode o='', // output p=0, // para flag $r // result of passing a regexp to $() // some shorthands function remain() { return ll.length } function sh() { return ll.shift() } // shift function ps(s) { o+=s } // push function f() // similar to C's printf, uses ? as placeholders, ?? to escape question marks { var i=1,a=arguments,f=a[0],o='',c,p for (;i<a.length; i++) if ((p=f.indexOf('?'))+1) { // allow character escaping i -= c=f.charAt(p+1)=='?'?1:0 o += f.substring(0,p)+(c?'?':a[i]) f=f.substr(p+1+c) } else break; return o+f } function html_entities(s) { return s.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;") } function max(a,b) { return (a>b)?a:b } function min(a,b) { return (a<b)?a:b } // return the first non matching character position between two strings function str_imatch(a, b) { for (var i=0, l=min(a.length, b.length); i<l; i++) if (a.charAt(i)!=b.charAt(i)) break return i } // compare current line against a string or regexp // if passed a string it will compare only the first string.length characters // if passed a regexp the result is stored in $r function $(c) { return (typeof c == 'string') ? (ll[0].substr(0,c.length)==c) : ($r = ll[0].match(c)) } function $$(c) { return ll[0]==c } // compare current line against a string function _(p) { return ll[0].charAt(p) } // return char at pos p function endl(s) { ps(s); sh() } function parse_list() { var prev=''; while (remain() && $(/^([*#:;]+)(.*)$/)) { var l_match = $r sh() var ipos = str_imatch(prev, l_match[1]) // close uncontinued lists for (var i=prev.length-1; i >= ipos; i--) { var pi = prev.charAt(i) if (pi=='*') ps('</ul>') else if (pi=='#') ps('</ol>') // close a dl only if the new item is not a dl item (:, ; or empty) else switch (l_match[1].charAt(i)) { case'':case'*':case'#': ps('</dl>') } } // open new lists for (var i=ipos; i<l_match[1].length; i++) { var li = l_match[1].charAt(i) if (li=='*') ps('<ul>') else if (li=='#') ps('<ol>') // open a new dl only if the prev item is not a dl item (:, ; or empty) else switch(prev.charAt(i)) { case'':case'*':case'#': ps('<dl>') } } switch (l_match[1].charAt(l_match[1].length-1)) { case '*': case '#': ps('<li>' + parse_inline_nowiki(l_match[2])); break case ';': ps('<dt>') var dt_match // handle ;dt :dd format if (dt_match = l_match[2].match(/(.*?)(:.*?)$/)) { ps(parse_inline_nowiki(dt_match[1])) ll.unshift(dt_match[2]) } else ps(parse_inline_nowiki(l_match[2])) break case ':': ps('<dd>' + parse_inline_nowiki(l_match[2])) } prev=l_match[1] } // close remaining lists for (var i=prev.length-1; i>=0; i--) ps(f('</?>', (prev.charAt(i)=='*')? 'ul': ((prev.charAt(i)=='#')? 'ol': 'dl'))) } function parse_table() { endl(f('<table?>', $(/^\{\|( .*)$/)? $r[1]: '')) for (;remain();) if ($('|')) switch (_(1)) { case '}': endl('</table>'); return case '-': endl(f('<tr ?>', $(/\|-*(.*)/)[1])); break default: parse_table_data() } else if ($('!')) parse_table_data() else sh() } function parse_table_data() { var td_line, match_i // 1: "|+", '|' or '+' // 2: ?? // 3: attributes ?? // TODO: finish commenting this regexp var td_match = sh().match(/^(\|\+|\||!)((?:([^[|]*?)\|(?!\|))?(.*))$/) if (td_match[1] == '|+') ps('<caption'); else ps('<t' + ((td_match[1]=='|')?'d':'h')) if (typeof td_match[3] != 'undefined') { ps(' ' + td_match[3]) match_i = 4 } else match_i = 2 ps('>') if (td_match[1] != '|+') { // use || or !! as a cell separator depending on context // NOTE: when split() is passed a regexp make sure to use non-capturing brackets td_line = td_match[match_i].split((td_match[1] == '|')? '||': /(?:\|\||!!)/) ps(parse_inline_nowiki(td_line.shift())) while (td_line.length) ll.unshift(td_match[1] + td_line.pop()) } else ps(td_match[match_i]) var tc = 0, td = [] for (;remain(); td.push(sh())) if ($('|')) { if (!tc) break // we're at the outer-most level (no nested tables), skip to td parse else if (_(1)=='}') tc-- } else if (!tc && $('!')) break else if ($('{|')) tc++ if (td.length) ps(Insta.convert(td)) } function parse_pre() { ps('<pre>') do endl(parse_inline_nowiki(ll[0].substring(1)) + "\n"); while (remain() && $(' ')) ps('</pre>') } function parse_block_image() { ps(parse_image(sh())) } function parse_image(str) { //<NOLITE> // get what's in between "[[Image:" and "]]" var tag = str.substring(Insta.conf.locale.image.length + 3, str.length - 2); var width; var attr = [], filename, caption = ''; var thumb=0, frame=0, center=0; var align=''; if (tag.match(/\|/)) { // manage nested links var nesting = 0; var last_attr; for (var i = tag.length-1; i > 0; i--) { if (tag.charAt(i) == '|' && !nesting) { last_attr = tag.substr(i+1); tag = tag.substring(0, i); break; } else switch (tag.substr(i-1, 2)) { case ']]': nesting++; i--; break; case '[[': nesting--; i--; } } attr = tag.split(/\s*\|\s*/); attr.push(last_attr); filename = attr.shift(); var w_match; for (;attr.length; attr.shift()) if (w_match = attr[0].match(/^(\d*)(?:[px]*\d*)?px$/)) width = w_match[1] else switch(attr[0]) { case 'thumb': case 'thumbnail': thumb=true; case 'frame': frame=true; break; case 'none': case 'right': case 'left': center=false; align=attr[0]; break; case 'center': center=true; align='none'; break; default: if (attr.length == 1) caption = attr[0]; } } else filename = tag; var o=''; if (frame) { if (align=='') align = 'right'; o += f("<div class='thumb t?'>", align); if (thumb) { if (!width) width = Insta.conf.wiki.default_thumb_width; o += f("<div style='width:?px;'>?", 2+width*1, make_image(filename, caption, width)) + f("<div class='thumbcaption'><div class='magnify' style='float:right'><a href='?' class='internal' title='Enlarge'><img src='?'></a></div>?</div>", Insta.conf.paths.articles + Insta.conf.locale.image + ':' + filename, Insta.conf.paths.magnify_icon, parse_inline_nowiki(caption) ) } else { o += '<div>' + make_image(filename, caption) + f("<div class='thumbcaption'>?</div>", parse_inline_nowiki(caption)) } o += '</div></div>'; } else if (align != '') { o += f("<div class='float?'><span>?</span></div>", align, make_image(filename, caption, width)); } else { return make_image(filename, caption, width); } return center? f("<div class='center'>?</div>", o): o; //</NOLITE> } function parse_inline_nowiki(str) { var start, lastend=0 var substart=0, nestlev=0, open, close, subloop; var html=''; while (-1 != (start = str.indexOf('<nowiki>', substart))) { html += parse_inline_wiki(str.substring(lastend, start)); start += 8; substart = start; subloop = true; do { open = str.indexOf('<nowiki>', substart); close = str.indexOf('</nowiki>', substart); if (close<=open || open==-1) { if (close==-1) { return html + html_entities(str.substr(start)); } substart = close+9; if (nestlev) { nestlev--; } else { lastend = substart; html += html_entities(str.substring(start, lastend-9)); subloop = false; } } else { substart = open+8; nestlev++; } } while (subloop) } return html + parse_inline_wiki(str.substr(lastend)); } function make_image(filename, caption, width) { //<NOLITE> // uppercase first letter in file name filename = filename.charAt(0).toUpperCase() + filename.substr(1); // replace spaces with underscores filename = filename.replace(/ /g, '_'); caption = strip_inline_wiki(caption); var md5 = hex_md5(filename); var source = md5.charAt(0) + '/' + md5.substr(0,2) + '/' + filename; if (width) width = "width='" + width + "px'"; var img = f("<img onerror=\"this.onerror=null;this.src='?'\" src='?' ? ?>", Insta.conf.paths.images_fallback + source, Insta.conf.paths.images + source, (caption!='')? "alt='" + caption + "'" : '', width); return f("<a class='image' ? href='?'>?</a>", (caption!='')? "title='" + caption + "'" : '', Insta.conf.paths.articles + Insta.conf.locale.image + ':' + filename, img); //</NOLITE> } function parse_inline_images(str) { //<NOLITE> var start, substart=0, nestlev=0; var loop, close, open, wiki, html; while (-1 != (start=str.indexOf('[[', substart))) { if(str.substr(start+2).match(RegExp('^' + Insta.conf.locale.image + ':','i'))) { loop=true; substart=start; do { substart+=2; close=str.indexOf(']]',substart); open=str.indexOf('[[',substart); if (close<=open||open==-1) { if (close==-1) return str; substart=close; if (nestlev) { nestlev--; } else { wiki=str.substring(start,close+2); html=parse_image(wiki); str=str.replace(wiki,html); substart=start+html.length; loop=false; } } else { substart=open; nestlev++; } } while (loop) } else break; } //</NOLITE> return str; } // the output of this function doesn't respect the FILO structure of HTML // but since most browsers can handle it I'll save myself the hassle function parse_inline_formatting(str) { var em,st,i,li,o=''; while ((i=str.indexOf("''",li))+1) { o += str.substring(li,i); li=i+2; if (str.charAt(i+2)=="'") { li++; st=!st; o+=st?'<strong>':'</strong>'; } else { em=!em; o+=em?'<em>':'</em>'; } } return o+str.substr(li); } function parse_inline_wiki(str) { var aux_match; str = parse_inline_images(str); str = parse_inline_formatting(str); // math while (aux_match = str.match(/<(?:)math>(.*?)<\/math>/i)) { var math_md5 = hex_md5(aux_match[1]); str = str.replace(aux_match[0], f("<img src='?.png'>", Insta.conf.paths.math+math_md5)); } // Build a Mediawiki-formatted date string var date = new Date; var minutes = date.getUTCMinutes(); if (minutes < 10) minutes = '0' + minutes; var date = f("?:?, ? ? ? (UTC)", date.getUTCHours(), minutes, date.getUTCDate(), Insta.conf.locale.months[date.getUTCMonth()], date.getUTCFullYear()); // text formatting return str. // signatures replace(/~{5}(?!~)/g, date). replace(/~{4}(?!~)/g, Insta.conf.user.name+' '+date). replace(/~{3}(?!~)/g, Insta.conf.user.name). // [[:Category:...]], [[:Image:...]], etc... replace(RegExp('\\[\\[:((?:'+Insta.conf.locale.category+'|'+Insta.conf.locale.image+'|'+Insta.conf.wiki.interwiki+'):[^|]*?)\\]\\](\w*)','gi'), "<a href='"+Insta.conf.paths.articles+"$1'>$1$2</a>"). // remove straight category and interwiki tags replace(RegExp('\\[\\[(?:'+Insta.conf.locale.category+'|'+Insta.conf.wiki.interwiki+'):.*?\\]\\]','gi'),''). // [[:Category:...|Links]], [[:Image:...|Links]], etc... replace(RegExp('\\[\\[:((?:'+Insta.conf.locale.category+'|'+Insta.conf.locale.image+'|'+Insta.conf.wiki.interwiki+'):.*?)\\|([^\\]]+?)\\]\\](\\w*)','gi'), "<a href='"+Insta.conf.paths.articles+"$1'>$2$3</a>"). // [[/Relative links]] replace(/\[\[(\/[^|]*?)\]\]/g, f("<a href='?$1'>$1</a>", Insta.conf.baseUrl)). // [[/Replaced|Relative links]] replace(/\[\[(\/.*?)\|(.+?)\]\]/g, f("<a href='?$1'>$2</a>", Insta.conf.baseUrl)). // [[Common links]] replace(/\[\[([^|]*?)\]\](\w*)/g, f("<a href='?$1'>$1$2</a>", Insta.conf.paths.articles)). // [[Replaced|Links]] replace(/\[\[(.*?)\|([^\]]+?)\]\](\w*)/g, f("<a href='?$1'>$2$3</a>", Insta.conf.paths.articles)). // [[Stripped:Namespace|Namespace]] replace(/\[\[([^\]]*?:)?(.*?)( *\(.*?\))?\|\]\]/g, f("<a href='?$1$2$3'>$2</a>", Insta.conf.paths.articles)). // External links replace(/\[(https?|news|ftp|mailto|gopher|irc):(\/*)([^\]]*?) (.*?)\]/g, "<a class='external' href='$1:$2$3'>$4</a>"). replace(/\[http:\/\/(.*?)\]/g, "<a class='external' href='http://$1'>[#]</a>"). replace(/\[(news|ftp|mailto|gopher|irc):(\/*)(.*?)\]/g, "<a class='external' href='$1:$2$3'>$1:$2$3</a>"). replace(/(^| )(https?|news|ftp|mailto|gopher|irc):(\/*)([^ $]*[^.,!?;: $])/g, "$1<a class='external' href='$2:$3$4'>$2:$3$4</a>"). replace('__NOTOC__',''). replace('__NOEDITSECTION__',''); } function strip_inline_wiki(str) { return str .replace(/\[\[[^\]]*\|(.*?)\]\]/g,'$1') .replace(/\[\[(.*?)\]\]/g,'$1') .replace(/''(.*?)''/g,'$1'); } // begin parsing for (;remain();) if ($(/^(={1,6})(.*)\1(.*)$/)) { p=0 endl(f('<h?>?</h?>?', $r[1].length, parse_inline_nowiki($r[2]), $r[1].length, $r[3])) } else if ($(/^[*#:;]/)) { p=0 parse_list() } else if ($(' ')) { p=0 parse_pre() } else if ($('{|')) { p=0 parse_table() } else if ($(/^----+$/)) { p=0 endl('<hr>') } else if ($(Insta.BLOCK_IMAGE)) { p=0 parse_block_image() } else { // handle paragraphs if ($$('')) { if (p = (remain()>1 && ll[1]==(''))) endl('<p><br>') } else { if(!p) { ps('<p>') p=1 } ps(parse_inline_nowiki(ll[0]) + ' ') } sh(); } return o }; window.wiki2html=function(txt,baseurl) { Insta.conf.baseUrl=baseurl; return Insta.convert(txt); }; // ENDFILE: livepreview.js // STARTFILE: pageinfo.js //<NOLITE> function popupFilterPageSize(data) { return formatBytes(data.length); } function popupFilterCountLinks(data) { var num=countLinks(data); return String(num) + '&nbsp;' + ((num!=1)?popupString('wikiLinks'):popupString('wikiLink')); } function popupFilterCountImages(data) { var num=countImages(data); return String(num) + '&nbsp;' + ((num!=1)?popupString('images'):popupString('image')); } function popupFilterCountCategories(data) { var num=countCategories(data); return String(num) + '&nbsp;' + ((num!=1)?popupString('categories'):popupString('category')); } function popupFilterLastModified(data,download) { var lastmod=download.lastModified; var now=new Date(); var age=now-lastmod; if (lastmod && getValueOf('popupLastModified')) { return (tprintf('%s old', [formatAge(age)])).replace(RegExp(' ','g'), '&nbsp;'); } return ''; } function formatAge(age) { // coerce into a number var a=0+age, aa=a; var seclen = 1000; var minlen = 60*seclen; var hourlen = 60*minlen; var daylen = 24*hourlen; var weeklen = 7*daylen; var numweeks = (a-a%weeklen)/weeklen; a = a-numweeks*weeklen; var sweeks = addunit(numweeks, 'week'); var numdays = (a-a%daylen)/daylen; a = a-numdays*daylen; var sdays = addunit(numdays, 'day'); var numhours = (a-a%hourlen)/hourlen; a = a-numhours*hourlen; var shours = addunit(numhours,'hour'); var nummins = (a-a%minlen)/minlen; a = a-nummins*minlen; var smins = addunit(nummins, 'minute'); var numsecs = (a-a%seclen)/seclen; a = a-numsecs*seclen; var ssecs = addunit(numsecs, 'second'); if (aa > 4*weeklen) { return sweeks; } if (aa > weeklen) { return sweeks + ' ' + sdays; } if (aa > daylen) { return sdays + ' ' + shours; } if (aa > 6*hourlen) { return shours; } if (aa > hourlen) { return shours + ' ' + smins; } if (aa > 10*minlen) { return smins; } if (aa > minlen) { return smins + ' ' + ssecs; } return ssecs; } function addunit(num,str) { return '' + num + ' ' + ((num!=1) ? popupString(str+'s') : popupString(str)) ;} function runPopupFilters(list, data, download) { var ret=[]; for (var i=0; i<list.length; ++i) { if (list[i] && typeof list[i] == 'function') { var s=list[i](data, download, download.owner.article); if (s) { ret.push(s); } } } return ret; } function getPageInfo(data, download) { if (!data || data.length === 0) { return popupString('Empty page'); } var popupFilters=getValueOf('popupFilters') || []; var extraPopupFilters = getValueOf('extraPopupFilters') || []; var pageInfoArray = runPopupFilters(popupFilters.concat(extraPopupFilters), data, download); var pageInfo=pageInfoArray.join(', '); if (pageInfo !== '' ) { pageInfo = upcaseFirst(pageInfo); } return pageInfo; } // this could be improved! function countLinks(wikiText) { return wikiText.split('[[').length - 1; } // if N = # matches, n = # brackets, then // String.parenSplit(regex) intersperses the N+1 split elements // with Nn other elements. So total length is // L= N+1 + Nn = N(n+1)+1. So N=(L-1)/(n+1). function countImages(wikiText) { return (wikiText.parenSplit(pg.re.image).length - 1) / (pg.re.imageBracketCount + 1); } function countCategories(wikiText) { return (wikiText.parenSplit(pg.re.category).length - 1) / (pg.re.categoryBracketCount + 1); } function popupFilterStubDetect(data, download, article) { var counts=stubCount(data, article); if (counts.real) { return popupString('stub'); } if (counts.sect) { return popupString('section stub'); } return ''; } function popupFilterDisambigDetect(data, download, article) { if (getValueOf('popupOnlyArticleDabStub') && article.namespace()) { return ''; } return (isDisambig(data, article)) ? popupString('disambig') : ''; } function formatBytes(num) { return (num > 949) ? (Math.round(num/100)/10+popupString('kB')) : (num +'&nbsp;' + popupString('bytes')) ; } //</NOLITE> // ENDFILE: pageinfo.js // STARTFILE: titles.js /** @fileoverview Defines the {@link Title} class, and associated crufty functions. <code>Title</code> deals with article titles and their various forms. {@link Stringwrapper} is the parent class of <code>Title</code>, which exists simply to make things a little neater. */ /** Creates a new Stringwrapper. @constructor @class the Stringwrapper class. This base class is not really useful on its own; it just wraps various common string operations. */ function Stringwrapper() { /** Wrapper for this.toString().indexOf() @param {String} x @type integer */ this.indexOf=function(x){return this.toString().indexOf(x);}; /** Returns this.value. @type String */ this.toString=function(){return this.value;}; /** Wrapper for {@link String#parenSplit} applied to this.toString() @param {RegExp} x @type Array */ this.parenSplit=function(x){return this.toString().parenSplit(x);}; /** Wrapper for this.toString().substring() @param {String} x @param {String} y (optional) @type String */ this.substring=function(x,y){ if (typeof y=='undefined') { return this.toString().substring(x); } return this.toString().substring(x,y); }; /** Wrapper for this.toString().split() @param {String} x @type Array */ this.split=function(x){return this.toString().split(x);}; /** Wrapper for this.toString().replace() @param {String} x @param {String} y @type String */ this.replace=function(x,y){ return this.toString().replace(x,y); }; } /** Creates a new <code>Title</code>. @constructor @class The Title class. Holds article titles and converts them into various forms. Also deals with anchors, by which we mean the bits of the article URL after a # character, representing locations within an article. @param {String} value The initial value to assign to the article. This must be the canonical title (see {@link Title#value}. Omit this in the constructor and use another function to set the title if this is unavailable. */ function Title(val) { /** The canonical article title. This must be in UTF-8 with no entities, escaping or nasties. Also, underscores should be replaced with spaces. @type String @private */ this.value=null; /** The canonical form of the anchor. This should be exactly as it appears in the URL, i.e. with the .C3.0A bits in. @type String */ this.anchor=''; this.setUtf(val); } Title.prototype=new Stringwrapper(); /** Returns the canonical representation of the article title, optionally without anchor. @param {boolean} omitAnchor @fixme Decide specs for anchor @return String The article title and the anchor. */ Title.prototype.toString=function(omitAnchor) { return this.value + ( (!omitAnchor && this.anchor) ? '#' + this.anchorString() : '' ); }; Title.prototype.anchorString=function() { if (!this.anchor) { return ''; } var split=this.anchor.parenSplit(/((?:[.][0-9A-F]{2})+)/); var len=split.length; for (var j=1; j<len; j+=2) { // FIXME s/decodeURI/decodeURIComponent/g ? split[j]=decodeURIComponent(split[j].split('.').join('%')).split('_').join(' '); } return split.join(''); }; Title.prototype.urlAnchor=function() { var split=this.anchor.parenSplit('/((?:[%][0-9A-F]{2})+)/'); var len=split.length; for (var j=1; j<len; j+=2) { split[j]=split[j].split('%').join('.'); } return split.join(''); }; Title.prototype.anchorFromUtf=function(str) { this.anchor=encodeURIComponent(str).split('.').join('%2E').split('%').join('.'); }; Title.fromURL=function(h) { return new Title().fromURL(h); }; Title.prototype.fromURL=function(h) { if (typeof h != 'string') { this.value=null; return this; } // NOTE : playing with decodeURI, encodeURI, escape, unescape, // we seem to be able to replicate the IE borked encoding // IE doesn't do this new-fangled utf-8 thing. // and it's worse than that. // IE seems to treat the query string differently to the rest of the url // the query is treated as bona-fide utf8, but the first bit of the url is pissed around with // we fix up & for all browsers, just in case. var splitted=h.split('?'); splitted[0]=splitted[0].split('&').join('%26'); if (pg.flag.linksLikeIE6) { splitted[0]=encodeURI(decode_utf8(splitted[0])); } h=splitted.join('?'); var contribs=pg.re.contribs.exec(h); if (contribs !== null) { if (contribs[1]=='title=') { contribs[3]=contribs[3].split('+').join(' '); } var u=new Title(contribs[3]); this.setUtf(this.decodeNasties(pg.ns.user + ':' + u.stripNamespace())); return this; } var email=pg.re.email.exec(h); if (email !== null) { this.setUtf(this.decodeNasties(pg.ns.user + ':' + new Title(email[3]).stripNamespace())); return this; } var backlinks=pg.re.backlinks.exec(h); if (backlinks) { this.setUtf(this.decodeNasties(new Title(backlinks[3]))); return this; } // no more special cases to check -- // hopefully it's not a disguised user-related or specially treated special page var m=pg.re.main.exec(h); if(m===null) { this.value=null; } else { var fromBotInterface = /[?](.+[&])?title=/.test(h); if (fromBotInterface) { m[2]=m[2].split('+').join('_'); } var extracted = m[2] + (m[3] ? '#' + m[3] : ''); this.setUtf(this.decodeNasties(extracted)); } return this; }; Title.prototype.decodeNasties=function(txt) { var ret= this.decodeEscapes(decodeURI(txt)); ret = ret.replace(/[_ ]*$/, ''); return ret; }; Title.prototype.decodeEscapes=function(txt) { var split=txt.parenSplit(/((?:[%][0-9A-Fa-f]{2})+)/); var len=split.length; for (var i=1; i<len; i=i+2) { // FIXME is decodeURIComponent better? split[i]=unescape(split[i]); } return split.join(''); }; Title.fromAnchor=function(a) { return new Title().fromAnchor(a); }; Title.prototype.fromAnchor=function(a) { if (!a) { this.value=null; return this; } return this.fromURL(a.href); }; Title.fromWikiText=function(txt) { return new Title().fromWikiText(txt); }; Title.prototype.fromWikiText=function(txt) { // FIXME - testing needed if (!pg.flag.linksLikeIE6) { txt=myDecodeURI(txt); } this.setUtf(txt); return this; }; Title.prototype.hintValue=function(){ if(!this.value) { return ''; } return safeDecodeURI(this.value); }; //<NOLITE> Title.prototype.toUserName=function(withNs) { if (this.namespace() != pg.ns.user && this.namespace() != pg.ns.usertalk) { this.value=null; return; } this.value = (withNs ? pg.ns.user + ':' : '') + this.stripNamespace().split('/')[0]; }; Title.prototype.userName=function(withNs) { var t=(new Title(this.value)); t.toUserName(withNs); if (t.value) { return t; } return null; }; Title.prototype.toTalkPage=function() { // convert article to a talk page, or if we can't return null // or, in other words, return null if this ALREADY IS a talk page // and return the corresponding talk page otherwise if (this.value===null) { return null; } var talkRegex=namespaceListToRegex(pg.ns.talkList); if (talkRegex.exec(this.value)) { this.value=null; return null;} var nsReg=namespaceListToRegex(pg.ns.withTalkList); var splitted=this.value.parenSplit(nsReg); if (splitted.length<2) { this.value= (pg.ns.talkList[0]+':'+this.value).split(' ').join('_'); return this.value; } for (var i=0; i< pg.ns.withTalkList.length; ++i) { if (splitted[1]==pg.ns.withTalkList[i]) { splitted[1]=pg.ns.talkList[i]; this.value=splitted.join(':').substring(1).split(' ').join('_'); return this.value; } } this.value=null; return null; }; //</NOLITE> Title.prototype.namespace=function() { var n=this.value.indexOf(':'); if (n<0) { return ''; } var list=pg.ns.list; for (var i=0; i<list.length; ++i) { if (upcaseFirst(list[i]) == this.value.substring(0,n)) { return list[i]; } } return ''; }; //<NOLITE> Title.prototype.talkPage=function() { var t=new Title(this.value); t.toTalkPage(); if (t.value) { return t; } return null; }; Title.prototype.isTalkPage=function() { if (this.talkPage()===null) { return true; } return false; }; Title.prototype.toArticleFromTalkPage=function() { var talkRegex=namespaceListToRegex(pg.ns.talkList); var splitted=this.value.parenSplit(talkRegex); if (splitted.length < 2 || splitted[0].length > 0) { this.value=null; return null; } if (splitted[1]==pg.ns.talkList[0]) { splitted[1]=''; this.value=splitted.join(':').substring(2).split(' ').join('_'); return this.value; } for (var i=1; i< pg.ns.talkList.length; ++i) { if (splitted[1]==pg.ns.talkList[i] || splitted[1]==pg.ns.talkList[i].split(' ').join('_')) { splitted[1]=pg.ns.withTalkList[i]; this.value= splitted.join(':').substring(1).split(' ').join('_'); return this.value; } } this.value=null; return this.value; }; Title.prototype.articleFromTalkPage=function() { var t=new Title(this.value); t.toArticleFromTalkPage(); if (t.value) { return t; } return null; }; Title.prototype.articleFromTalkOrArticle=function() { var t=new Title(this.value); if ( t.toArticleFromTalkPage() ) { return t; } return this; }; Title.prototype.isIpUser=function() { return pg.re.ipUser.test(this.userName()); }; //</NOLITE> Title.prototype.stripNamespace=function(){ // returns a string, not a Title // this isn't very sophisticated // it just removes everything up to the final : // BUG: probably does silly things for images with colons in the name - check it out var list = this.value.split(':'); return list[list.length-1]; }; Title.prototype.setUtf=function(value){ if (!value) { this.value=''; return; } var anch=value.indexOf('#'); if(anch < 0) { this.value=value.split('_').join(' '); this.anchor=''; return; } this.value=value.substring(0,anch).split('_').join(' '); this.anchor=value.substring(anch+1); this.ns=null; // wait until namespace() is called }; Title.prototype.setUrl=function(urlfrag) { var anch=urlfrag.indexOf('#'); this.value=safeDecodeURI(urlfrag.substring(0,anch)); this.anchor=value.substring(anch+1); }; Title.prototype.append=function(x){ this.setUtf(this.value + x); }; Title.prototype.urlString=function(x) { x || ( x={} ); var v=this.toString(true); if (!x.omitAnchor && this.anchor) { v+= '#' + this.urlAnchor(); } if (!x.keepSpaces) { v=v.split(' ').join('_'); } return encodeURI(v).split('&').join('%26').split('?').join('%3F').split('+').join('%2B'); }; Title.prototype.removeAnchor=function() { return new Title(this.toString(true)); }; Title.prototype.toUrl=function() { return pg.wiki.titlebase + this.urlString(); }; function paramValue(param, url) { var s=url.parenSplit(RegExp('[?&]' + literalizeRegex(param) + '=([^?&]*)')); if (!url) { return null; } return s[1] || null; } function parseParams(url) { var ret={}; if (url.indexOf('?')==-1) { return ret; } var s=url.split('?').slice(1).join(); var t=s.split('&'); for (var i=0; i<t.length; ++i) { var z=t[i].split('='); z.push(null); ret[z[0]]=z[1]; } return ret; } // all sorts of stuff here // FIXME almost everything needs to be rewritten function oldidFromAnchor(a) { return paramValue('oldid', a.href); } //function diffFromAnchor(a) { return paramValue('diff', a.href); } function wikiMarkupToAddressFragment (str) { // for images var ret = safeDecodeURI(str); ret = ret.split(' ').join('_'); ret = encodeURI(ret); return ret; } // (a) myDecodeURI (first standard decodeURI, then pg.re.urlNoPopup) // (b) change spaces to underscores // (c) encodeURI (just the straight one, no pg.re.urlNoPopup) function myDecodeURI (str) { var ret; // FIXME decodeURIComponent?? try { ret=decodeURI(str.toString()); } catch (summat) { return str; } for (var i=0; i<pg.misc.decodeExtras.length; ++i) { var from=pg.misc.decodeExtras[i].from; var to=pg.misc.decodeExtras[i].to; ret=ret.split(from).join(to); } return ret; } function safeDecodeURI(str) { var ret=myDecodeURI(str); return ret || str; } /////////// // TESTS // /////////// //<NOLITE> function isIpUser(user) {return pg.re.ipUser.test(user);} function isDisambig(data, article) { if (!getValueOf('popupAllDabsStubs') && article.namespace()) { return false; } return ! article.isTalkPage() && pg.re.disambig.test(data); } function stubCount(data, article) { if (!getValueOf('popupAllDabsStubs') && article.namespace()) { return false; } var sectStub=0; var realStub=0; if (pg.re.stub.test(data)) { var s=data.parenSplit(pg.re.stub); for (var i=1; i<s.length; i=i+2) { if (s[i]) { ++sectStub; } else { ++realStub; } } } return { real: realStub, sect: sectStub }; } function isValidImageName(str){ // extend as needed... return ( str.indexOf('{') == -1 ); } function isInStrippableNamespace(article) { return ( findInArray( pg.ns.nonArticleList, article.namespace() ) > -1 ); } function isInMainNamespace(article) { return !isInStrippableNamespace(article); } function anchorContainsImage(a) { // iterate over children of anchor a // see if any are images if (a===null) { return false; } kids=a.childNodes; for (var i=0; i<kids.length; ++i) { if (kids[i].nodeName=='IMG') { return true; } } return false; } //</NOLITE> function isPopupLink(a) { // NB for performance reasons, TOC links generally return true // they should be stripped out later if (!markNopopupSpanLinks.done) { markNopopupSpanLinks(); } if (a.inNopopupSpan || a.className=='sortheader') { return false; } // FIXME is this faster inline? if (a.onmousedown || a.getAttribute('nopopup')) { return false; } var h=a.href; if (!pg.re.basenames.test(h)) { return false; } if ( !pg.re.urlNoPopup.test(h) ) { return true; } return ( (pg.re.email.test(h) || pg.re.contribs.test(h) || pg.re.backlinks.test(h)) && h.indexOf('&limit=') == -1 ); } function markNopopupSpanLinks() { var s=document.getElementsByTagName('span'); for (var i=0; i<s.length; ++i) { if (s[i].className && s[i].className.toLowerCase()=='nopopups') { var as=s[i].getElementsByTagName('a'); for (var j=0; j<as.length; ++j) { as[j].inNopopupSpan=true; } } } markNopopupSpanLinks.done=true; } // ENDFILE: titles.js // STARTFILE: cookies.js //<NOLITE> ////////////////////////////////////////////////// // Cookie handling // from http://www.quirksmode.org/js/cookies.html var Cookie= { create: function(name,value,days) { var expires; if (days) { var date = new Date(); date.setTime(date.getTime()+(days*24*60*60*1000)); expires = "; expires="+date.toGMTString(); } else { expires = ""; } document.cookie = name+"="+value+expires+"; path=/"; }, read: function(name) { var nameEQ = name + "="; var ca = document.cookie.split(';'); for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==' ') { c = c.substring(1,c.length); } if (c.indexOf(nameEQ) === 0) { return c.substring(nameEQ.length,c.length); } } return null; }, erase: function(name) { Cookie.create(name,"",-1); } }; //</NOLITE> // ENDFILE: cookies.js // STARTFILE: getpage.js ////////////////////////////////////////////////// // Wiki-specific downloading // // Schematic for a getWiki call // // getWiki->-getPageWithCaching // | // false | true // getPage<-[findPictureInCache]->-onComplete(a fake download) // \. // (async)->addPageToCache(download)->-onComplete(download) /** @todo {document} @param {Title} article @param {Function} onComplete @param {integer} oldid @param {Navapopup} owner */ function getWiki(article, onComplete, oldid, owner) { // set ctype=text/css to get around opera gzip bug var url = pg.wiki.titlebase + article.removeAnchor().urlString() + '&action=raw&ctype=text/css'; if (oldid || oldid===0 || oldid==='0') { url += '&oldid='+oldid; } url += '&maxage=0&smaxage=0'; getPageWithCaching(url, onComplete, owner); } // check cache to see if page exists function getPageWithCaching(url, onComplete, owner) { log('getPageWithCaching, url='+url); var i=findInPageCache(url); if (i > -1) { var d=fakeDownload(url, owner.idNumber, onComplete, pg.cache.pages[i].data, pg.cache.pages[i].lastModified, owner); } else { var d=getPage(url, onComplete, owner); if (d && owner && owner.addDownload) { owner.addDownload(d); d.owner=owner; } } } function getPage(url, onComplete, owner) { log('getPage'); var callback= function (d) { if (!d.aborted) {addPageToCache(d); onComplete(d);} }; return startDownload(url, owner.idNumber, callback); } function findInPageCache(url) { for (var i=0; i<pg.cache.pages.length; ++i) { if (url==pg.cache.pages[i].url) { return i; } } return -1; } function addPageToCache(download) { log('addPageToCache '+download.url); var page = {url: download.url, data: download.data, lastModified: download.lastModified}; return pg.cache.pages.push(page); } // ENDFILE: getpage.js // STARTFILE: md5-2.2alpha.js //<NOLITE> /* * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message * Digest Algorithm, as defined in RFC 1321. * Version 2.2-alpha Copyright (C) Paul Johnston 1999 - 2005 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet * Distributed under the BSD License * See http://pajhome.org.uk/crypt/md5 for more info. */ /* * Configurable variables. You may need to tweak these to be compatible with * the server-side, but the defaults work in most cases. */ var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */ var b64pad = ""; /* base-64 pad character. "=" for strict RFC compliance */ /* * These are the functions you'll usually want to call * They take string arguments and return either hex or base-64 encoded strings */ function hex_md5(s) { return rstr2hex(rstr_md5(str2rstr_utf8(s))); } function b64_md5(s) { return rstr2b64(rstr_md5(str2rstr_utf8(s))); } function any_md5(s, e) { return rstr2any(rstr_md5(str2rstr_utf8(s)), e); } function hex_hmac_md5(k, d) { return rstr2hex(rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d))); } function b64_hmac_md5(k, d) { return rstr2b64(rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d))); } function any_hmac_md5(k, d, e) { return rstr2any(rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d)), e); } /* * Perform a simple self-test to see if the VM is working */ function md5_vm_test() { return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72"; } /* * Calculate the MD5 of a raw string */ function rstr_md5(s) { return binl2rstr(binl_md5(rstr2binl(s), s.length * 8)); } /* * Calculate the HMAC-MD5, of a key and some data (raw strings) */ function rstr_hmac_md5(key, data) { var bkey = rstr2binl(key); if(bkey.length > 16) bkey = binl_md5(bkey, key.length * 8); var ipad = Array(16), opad = Array(16); for(var i = 0; i < 16; i++) { ipad[i] = bkey[i] ^ 0x36363636; opad[i] = bkey[i] ^ 0x5C5C5C5C; } var hash = binl_md5(ipad.concat(rstr2binl(data)), 512 + data.length * 8); return binl2rstr(binl_md5(opad.concat(hash), 512 + 128)); } /* * Convert a raw string to a hex string */ function rstr2hex(input) { var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef"; var output = ""; var x; for(var i = 0; i < input.length; i++) { x = input.charCodeAt(i); output += hex_tab.charAt((x >>> 4) & 0x0F) + hex_tab.charAt( x & 0x0F); } return output; } /* * Convert a raw string to a base-64 string */ function rstr2b64(input) { var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; var output = ""; var len = input.length; for(var i = 0; i < len; i += 3) { var triplet = (input.charCodeAt(i) << 16) | (i + 1 < len ? input.charCodeAt(i+1) << 8 : 0) | (i + 2 < len ? input.charCodeAt(i+2) : 0); for(var j = 0; j < 4; j++) { if(i * 8 + j * 6 > input.length * 8) output += b64pad; else output += tab.charAt((triplet >>> 6*(3-j)) & 0x3F); } } return output; } /* * Convert a raw string to an arbitrary string encoding */ function rstr2any(input, encoding) { var divisor = encoding.length; var remainders = Array(); var i, q, x, quotient; /* Convert to an array of 16-bit big-endian values, forming the dividend */ var dividend = Array(input.length / 2); for(i = 0; i < dividend.length; i++) { dividend[i] = (input.charCodeAt(i * 2) << 8) | input.charCodeAt(i * 2 + 1); } /* * Repeatedly perform a long division. The binary array forms the dividend, * the length of the encoding is the divisor. Once computed, the quotient * forms the dividend for the next step. We stop when the dividend is zero. * All remainders are stored for later use. */ while(dividend.length > 0) { quotient = Array(); x = 0; for(i = 0; i < dividend.length; i++) { x = (x << 16) + dividend[i]; q = Math.floor(x / divisor); x -= q * divisor; if(quotient.length > 0 || q > 0) quotient[quotient.length] = q; } remainders[remainders.length] = x; dividend = quotient; } /* Convert the remainders to the output string */ var output = ""; for(i = remainders.length - 1; i >= 0; i--) output += encoding.charAt(remainders[i]); return output; } /* * Encode a string as utf-8. * For efficiency, this assumes the input is valid utf-16. */ function str2rstr_utf8(input) { var output = ""; var i = -1; var x, y; while(++i < input.length) { /* Decode utf-16 surrogate pairs */ x = input.charCodeAt(i); y = i + 1 < input.length ? input.charCodeAt(i + 1) : 0; if(0xD800 <= x && x <= 0xDBFF && 0xDC00 <= y && y <= 0xDFFF) { x = 0x10000 + ((x & 0x03FF) << 10) + (y & 0x03FF); i++; } /* Encode output as utf-8 */ if(x <= 0x7F) output += String.fromCharCode(x); else if(x <= 0x7FF) output += String.fromCharCode(0xC0 | ((x >>> 6 ) & 0x1F), 0x80 | ( x & 0x3F)); else if(x <= 0xFFFF) output += String.fromCharCode(0xE0 | ((x >>> 12) & 0x0F), 0x80 | ((x >>> 6 ) & 0x3F), 0x80 | ( x & 0x3F)); else if(x <= 0x1FFFFF) output += String.fromCharCode(0xF0 | ((x >>> 18) & 0x07), 0x80 | ((x >>> 12) & 0x3F), 0x80 | ((x >>> 6 ) & 0x3F), 0x80 | ( x & 0x3F)); } return output; } /* * Encode a string as utf-16 */ function str2rstr_utf16le(input) { var output = ""; for(var i = 0; i < input.length; i++) output += String.fromCharCode( input.charCodeAt(i) & 0xFF, (input.charCodeAt(i) >>> 8) & 0xFF); return output; } function str2rstr_utf16be(input) { var output = ""; for(var i = 0; i < input.length; i++) output += String.fromCharCode((input.charCodeAt(i) >>> 8) & 0xFF, input.charCodeAt(i) & 0xFF); return output; } /* * Convert a raw string to an array of little-endian words * Characters >255 have their high-byte silently ignored. */ function rstr2binl(input) { var output = Array(input.length >> 2); for(var i = 0; i < output.length; i++) output[i] = 0; for(var i = 0; i < input.length * 8; i += 8) output[i>>5] |= (input.charCodeAt(i / 8) & 0xFF) << (i%32); return output; } /* * Convert an array of little-endian words to a string */ function binl2rstr(input) { var output = ""; for(var i = 0; i < input.length * 32; i += 8) output += String.fromCharCode((input[i>>5] >>> (i % 32)) & 0xFF); return output; } /* * Calculate the MD5 of an array of little-endian words, and a bit length. */ function binl_md5(x, len) { /* append padding */ x[len >> 5] |= 0x80 << ((len) % 32); x[(((len + 64) >>> 9) << 4) + 14] = len; var a = 1732584193; var b = -271733879; var c = -1732584194; var d = 271733878; for(var i = 0; i < x.length; i += 16) { var olda = a; var oldb = b; var oldc = c; var oldd = d; a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936); d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586); c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819); b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330); a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897); d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426); c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341); b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983); a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416); d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417); c = md5_ff(c, d, a, b, x[i+10], 17, -42063); b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162); a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682); d = md5_ff(d, a, b, c, x[i+13], 12, -40341101); c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290); b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329); a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510); d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632); c = md5_gg(c, d, a, b, x[i+11], 14, 643717713); b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302); a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691); d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083); c = md5_gg(c, d, a, b, x[i+15], 14, -660478335); b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848); a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438); d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690); c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961); b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501); a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467); d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784); c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473); b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734); a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558); d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463); c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562); b = md5_hh(b, c, d, a, x[i+14], 23, -35309556); a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060); d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353); c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632); b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640); a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174); d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222); c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979); b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189); a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487); d = md5_hh(d, a, b, c, x[i+12], 11, -421815835); c = md5_hh(c, d, a, b, x[i+15], 16, 530742520); b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651); a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844); d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415); c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905); b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055); a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571); d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606); c = md5_ii(c, d, a, b, x[i+10], 15, -1051523); b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799); a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359); d = md5_ii(d, a, b, c, x[i+15], 10, -30611744); c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380); b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649); a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070); d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379); c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259); b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551); a = safe_add(a, olda); b = safe_add(b, oldb); c = safe_add(c, oldc); d = safe_add(d, oldd); } return Array(a, b, c, d); } /* * These functions implement the four basic operations the algorithm uses. */ function md5_cmn(q, a, b, x, s, t) { return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b); } function md5_ff(a, b, c, d, x, s, t) { return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t); } function md5_gg(a, b, c, d, x, s, t) { return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t); } function md5_hh(a, b, c, d, x, s, t) { return md5_cmn(b ^ c ^ d, a, b, x, s, t); } function md5_ii(a, b, c, d, x, s, t) { return md5_cmn(c ^ (b | (~d)), a, b, x, s, t); } /* * Add integers, wrapping at 2^32. This uses 16-bit operations internally * to work around bugs in some JS interpreters. */ function safe_add(x, y) { var lsw = (x & 0xFFFF) + (y & 0xFFFF); var msw = (x >> 16) + (y >> 16) + (lsw >> 16); return (msw << 16) | (lsw & 0xFFFF); } /* * Bitwise rotate a 32-bit number to the left. */ function bit_rol(num, cnt) { return (num << cnt) | (num >>> (32 - cnt)); } //</NOLITE> // ENDFILE: md5-2.2alpha.js // STARTFILE: parensplit.js ////////////////////////////////////////////////// // parenSplit // String.prototype.parenSplit should do what ECMAscript says // String.prototype.split does, interspersing paren matches between // the split elements if (String('abc'.split(/(b)/))!='a,b,c') { // broken String.split, e.g. konq, IE String.prototype.parenSplit=function (re) { re=nonGlobalRegex(re); var s=this; var m=re.exec(s); var ret=[]; while (m && s) { // without the following loop, we have // 'ab'.parenSplit(/a|(b)/) != 'ab'.split(/a|(b)/) for(var i=0; i<m.length; ++i) { if (typeof m[i]=='undefined') m[i]=''; } ret.push(s.substring(0,m.index)); ret = ret.concat(m.slice(1)); s=s.substring(m.index + m[0].length); m=re.exec(s); } ret.push(s); return ret; }; } else { String.prototype.parenSplit=function (re) { return this.split(re); }; String.prototype.parenSplit.isNative=true; } function nonGlobalRegex(re) { var s=re.toString(); flags=''; for (var j=s.length; s.charAt(j) != '/'; --j) { if (s.charAt(j) != 'g') { flags += s.charAt(j); } } var t=s.substring(1,j); return RegExp(t,flags); } // ENDFILE: parensplit.js // STARTFILE: tools.js // IE madness with encoding // ======================== // // suppose throughout that the page is in utf8, like wikipedia // // if a is an anchor DOM element and a.href should consist of // // http://host.name.here/wiki/foo?bar=baz // // then IE gives foo as "latin1-encoded" utf8; we have foo = decode_utf8(decodeURI(foo_ie)) // but IE gives bar=baz correctly as plain utf8 // // --------------------------------- // // IE's xmlhttp doesn't understand utf8 urls. Have to use encodeURI here. // // --------------------------------- // // summat else // Source: http://aktuell.de.selfhtml.org/artikel/javascript/utf8b64/utf8.htm //<NOLITE> function encode_utf8(rohtext) { // dient der Normalisierung des Zeilenumbruchs rohtext = rohtext.replace(/\r\n/g,"\n"); var utftext = ""; for(var n=0; n<rohtext.length; n++) { // ermitteln des Unicodes des aktuellen Zeichens var c=rohtext.charCodeAt(n); // alle Zeichen von 0-127 => 1byte if (c<128) utftext += String.fromCharCode(c); // alle Zeichen von 127 bis 2047 => 2byte else if((c>127) && (c<2048)) { utftext += String.fromCharCode((c>>6)|192); utftext += String.fromCharCode((c&63)|128);} // alle Zeichen von 2048 bis 66536 => 3byte else { utftext += String.fromCharCode((c>>12)|224); utftext += String.fromCharCode(((c>>6)&63)|128); utftext += String.fromCharCode((c&63)|128);} } return utftext; } function getJsObj(json) { var jsobj; try { eval('jsobj='+json); return jsobj; } catch (someError) { log('Something went wrong with getJsobj, json='+json); return 1; } } function anyChild(obj) { for (var p in obj) { return obj[p]; } return null; } //</NOLITE> function decode_utf8(utftext) { var plaintext = ""; var i=0, c=0, c1=0, c2=0; // while-Schleife, weil einige Zeichen uebersprungen werden while(i<utftext.length) { c = utftext.charCodeAt(i); if (c<128) { plaintext += String.fromCharCode(c); i++;} else if((c>191) && (c<224)) { c2 = utftext.charCodeAt(i+1); plaintext += String.fromCharCode(((c&31)<<6) | (c2&63)); i+=2;} else { c2 = utftext.charCodeAt(i+1); c3 = utftext.charCodeAt(i+2); plaintext += String.fromCharCode(((c&15)<<12) | ((c2&63)<<6) | (c3&63)); i+=3;} } return plaintext; } function upcaseFirst(str) { if (typeof str != typeof '' || str=='') return ''; return str.charAt(0).toUpperCase() + str.substring(1); } function findInArray(arr, foo) { if (!arr || !arr.length) { return -1; } var len=arr.length; for (var i=0; i<len; ++i) { if (arr[i]==foo) { return i; } } return -1; } function nextOne (array, value) { // NB if the array has two consecutive entries equal // then this will loop on successive calls var i=findInArray(array, value); if (i<0) { return null; } return array[i+1]; } function literalizeRegex(str){ return str.replace(RegExp('([-.|()\\+?*^${}\\[\\]])', 'g'), '\\$1'); } String.prototype.entify=function() { //var shy='&shy;'; return this.split('&').join('&amp;').split('<').join('&lt;').split('>').join('&gt;'/*+shy*/).split('"').join('&quot;'); }; function findThis(array, value) { if (typeof array.length == 'undefined') { return null; } for (var i=0; i<array.length; ++i) { if (array[i]==value) { return i; } } return null; } function removeNulls(list) { var ret=[]; for (var i=0; i<list.length; ++i) { if (list[i]) { ret.push(list[i]); } } return ret; } function joinPath(list) { return removeNulls(list).join('/'); } function simplePrintf(str, subs) { if (!str || !subs) { return str; } var ret=[]; var s=str.parenSplit(/(%s|\$[0-9]+)/); var i=0; do { ret.push(s.shift()); if ( !s.length ) { break; } var cmd=s.shift(); if (cmd == '%s') { if ( i < subs.length ) { ret.push(subs[i]); } else { ret.push(cmd); } ++i; } else { var j=parseInt( cmd.replace('$', ''), 10 ) - 1; if ( j > -1 && j < subs.length ) { ret.push(subs[j]); } else { ret.push(cmd); } } } while (s.length > 0); return ret.join(''); } function max(a,b){return a<b ? b : a;} function min(a,b){return a>b ? b : a;} function isString(x) { return (typeof x === 'string' || x instanceof String); } //function isNumber(x) { return (typeof x === 'number' || x instanceof Number); } function isRegExp(x) { return x instanceof RegExp; } function isArray (x) { return x instanceof Array; } function isObject(x) { return x instanceof Object; } function isFunction(x) { return !isRegExp(x) && (typeof x === 'function' || x instanceof Function); } function repeatString(s,mult) { var ret=''; for (var i=0; i<mult; ++i) { ret += s; } return ret; } function zeroFill(s, min) { min = min || 2; var t=s.toString(); return repeatString('0', min - t.length) + t; } function map(f, o) { if (isArray(o)) { return map_array(f,o); } return map_object(f,o); } function map_array(f,o) { var ret=[]; for (var i=0; i<o.length; ++i) { ret.push(f(o[i])); } return ret; } function map_object(f,o) { var ret={}; for (var i in o) { ret[o]=f(o[i]); } return ret; } // ENDFILE: tools.js // STARTFILE: dab.js //<NOLITE> ////////////////////////////////////////////////// // Dab-fixing code // function retargetDab(newTarget, oldTarget, friendlyCurrentArticleName, titleToEdit) { log('retargetDab: newTarget='+newTarget + ' oldTarget=' + oldTarget); return changeLinkTargetLink( {newTarget: newTarget, text: newTarget.split(' ').join('&nbsp;'), hint: tprintf('disambigHint', [newTarget]), summary: simplePrintf( getValueOf('popupFixDabsSummary'), [friendlyCurrentArticleName, newTarget ]), clickButton: 'wpDiff', minor: true, oldTarget: oldTarget, watch: getValueOf('popupWatchDisambiggedPages'), title: titleToEdit}); } function listLinks(wikitext, oldTarget, titleToEdit) { // mediawiki strips trailing spaces, so we do the same // testcase: http://en.wikipedia.org/w/index.php?title=Radial&oldid=97365633 var reg=RegExp('\\[\\[([^|]*?) *(\\||\\]\\])', 'gi'); var ret=[]; var splitted=wikitext.parenSplit(reg); // ^[a-z]+ should match interwiki links, hopefully (case-insensitive) // and ^[a-z]* should match those and [[:Category...]] style links too var omitRegex=RegExp('^[a-z]*:|^[Ss]pecial:|^[Ii]mage|^[Cc]ategory'); var friendlyCurrentArticleName= oldTarget.toString(); for (var i=1; i<splitted.length; i=i+3) { if (typeof splitted[i] == typeof 'string' && splitted[i].length>0 && !omitRegex.test(splitted[i])) { ret.push( retargetDab(splitted[i], oldTarget, friendlyCurrentArticleName, titleToEdit) ); } /* if */ } /* for loop */ ret = rmDupesFromSortedList(ret.sort()); var wikTarget='wiktionary:' + friendlyCurrentArticleName.replace( RegExp('^(.+)\\s+[(][^)]+[)]\\s*$'), '$1' ); ret.push( retargetDab(wikTarget, oldTarget, friendlyCurrentArticleName, titleToEdit) ); ret.push(changeLinkTargetLink( { newTarget: null, text: popupString('remove this link').split(' ').join('&nbsp;'), hint: popupString("remove all links to this disambig page from this article"), clickButton: "wpDiff", oldTarget: oldTarget, summary: simplePrintf(getValueOf('popupRmDabLinkSummary'), [friendlyCurrentArticleName]), watch: getValueOf('popupWatchDisambiggedPages'), title: titleToEdit })); return ret; } function rmDupesFromSortedList(list) { var ret=[]; for (var i=0; i<list.length; ++i) { if (ret.length===0 || list[i]!=ret[ret.length-1]) { ret.push(list[i]); } } return ret; } function makeFixDab(data, navpop) { // grab title from parent popup if there is one; default exists in changeLinkTargetLink var titleToEdit=(navpop.parentPopup && navpop.parentPopup.article.toString()); var list=listLinks(data, navpop.originalArticle, titleToEdit); if (list.length===0) { log('listLinks returned empty list'); return null; } var html='<hr>' + popupString('Click to disambiguate this link to:') + '<br>'; html+=list.join(', '); return html; } function makeFixDabs(wikiText, navpop) { if (getValueOf('popupFixDabs') && isDisambig(wikiText, navpop.article) && Title.fromURL(location.href).namespace() != pg.ns.special && navpop.article.talkPage() ) { setPopupHTML(makeFixDab(wikiText, navpop), 'popupFixDab', navpop.idNumber); } } function popupRedlinkHTML(article) { return changeLinkTargetLink( { newTarget: null, text: popupString('remove this link').split(' ').join('&nbsp;'), hint: popupString("remove all links to this page from this article"), clickButton: "wpDiff", oldTarget: article.toString(), summary: simplePrintf(getValueOf('popupRedlinkSummary'), [article.toString()])}); } //</NOLITE> // ENDFILE: dab.js // STARTFILE: htmloutput.js function appendPopupContent(obj, elementId, popupId, onSuccess) { return setPopupHTML(obj, elementId, popupId, onSuccess, true); } // this has to use a timer loop as we don't know if the DOM element exists when we want to set the text function setPopupHTML (str, elementId, popupId, onSuccess, append) { if (elementId=='popupPreview') { } if (typeof popupId === 'undefined') { //console.error('popupId is not defined in setPopupHTML, html='+str.substring(0,100)); popupId = pg.idNumber; } var popupElement=document.getElementById(elementId+popupId); if (popupElement) { if (!append) { popupElement.innerHTML=''; } if (isString(str)) { popupElement.innerHTML+=str; } else { popupElement.appendChild(str); } if (onSuccess) { onSuccess(); } setTimeout(checkPopupPosition, 100); return true; } else { // call this function again in a little while... setTimeout(function(){ setPopupHTML(str,elementId,popupId,onSuccess); }, 600); } return null; } //<NOLITE> function setImageStatus(str, id) {return; } // setPopupHTML(str, 'popupImageStatus', id);} function setPopupTrailer(str,id) {return setPopupHTML(str, 'popupData', id);} //</NOLITE> function fillEmptySpans(args) { return fillEmptySpans2(args); } // args.navpopup is mandatory // optional: args.redir, args.redirTarget // FIXME: ye gods, this is ugly stuff function fillEmptySpans2(args) { // if redir is present and true then redirTarget is mandatory var redir=true; if (typeof args != 'object' || typeof args.redir == 'undefined' || !args.redir) { redir=false; } var a=args.navpopup.parentAnchor; var article, hint=null, oldid=null, params={}; if (redir && typeof args.redirTarget == typeof {}) { article=args.redirTarget; //hint=article.hintValue(); } else { article=(new Title()).fromAnchor(a); hint=a.originalTitle || article.hintValue(); params=parseParams(a.href); oldid=(getValueOf('popupHistoricalLinks')) ? params.oldid : null; rcid=params.rcid; } var x={ article:article, hint: hint, oldid: oldid, rcid: rcid, navpop:args.navpopup, params:params }; var structure=pg.structures[getValueOf('popupStructure')]; if (typeof structure != 'object') { setPopupHTML('popupError', 'Unknown structure (this should never happen): '+ pg.option.popupStructure, args.navpopup.idNumber); return; } var spans=flatten(pg.misc.layout); var numspans = spans.length; var redirs=pg.misc.redirSpans; for (var i=0; i<numspans; ++i) { var f=findThis(redirs, spans[i]); //log('redir='+redir+', f='+f+', spans[i]='+spans[i]); if ( (f!==null && !redir) || (f===null && redir) ) { //log('skipping this set of the loop'); continue; } var structurefn=structure[spans[i]]; var setfn = setPopupHTML; if (getValueOf('popupActiveNavlinks') && spans[i].indexOf('popupTopLinks')==0) { setfn = setPopupTipsAndHTML; } switch (typeof structurefn) { case 'function': //log('running '+spans[i]+'({article:'+x.article+', hint:'+x.hint+', oldid: '+x.oldid+'})'); setfn(structurefn(x), spans[i], args.navpopup.idNumber); break; case 'string': setfn(structurefn, spans[i], args.navpopup.idNumber); break; default: errlog('unknown thing with label '+spans[i]); break; } } } // flatten an array function flatten(list, start) { var ret=[]; if (typeof start == 'undefined') { start=0; } for (var i=start; i<list.length; ++i) { if (typeof list[i] == typeof []) { return ret.concat(flatten(list[i])).concat(flatten(list, i+1)); } else { ret.push(list[i]); } } return ret; } // Generate html for whole popup function popupHTML (a) { getValueOf('popupStructure'); var structure=pg.structures[pg.option.popupStructure]; if (typeof structure != 'object') { //return 'Unknown structure: '+pg.option.popupStructure; // override user choice pg.option.popupStructure=pg.optionDefault.popupStructure; return popupHTML(a); } if (typeof structure.popupLayout != 'function') { return 'Bad layout'; } pg.misc.layout=structure.popupLayout(); if (typeof structure.popupRedirSpans == 'function') { pg.misc.redirSpans=structure.popupRedirSpans(); } else { pg.misc.redirSpans=[]; } return makeEmptySpans(pg.misc.layout, a.navpopup); } function makeEmptySpans (list, navpop) { var ret=''; for (var i=0; i<list.length; ++i) { if (typeof list[i] == typeof '') { ret += emptySpanHTML(list[i], navpop.idNumber, 'div'); } else if (typeof list[i] == typeof [] && list[i].length > 0 ) { ret = ret.parenSplit(RegExp('(</[^>]*?>$)')).join(makeEmptySpans(list[i], navpop)); } else if (typeof list[i] == typeof {} && list[i].nodeType ) { ret += emptySpanHTML(list[i].name, navpop.idNumber, list[i].nodeType); } } return ret; } function emptySpanHTML(name, id, tag, classname) { tag = tag || 'span'; if (!classname) { classname = emptySpanHTML.classAliases[name]; } classname = classname || name; if (name == getValueOf('popupDragHandle')) { classname += ' popupDragHandle'; } return simplePrintf('<%s id="%s" class="%s"></%s>', [tag, name + id, classname, tag]); } emptySpanHTML.classAliases={ 'popupSecondPreview': 'popupPreview' }; // generate html for popup image // <a id="popupImageLinkn"><img id="popupImagen"> // where n=idNumber function imageHTML(article, idNumber) { return simplePrintf('<a id="popupImageLink$1">' + '<img align="right" valign="top" id="popupImg$1" style="display: none;"></img>' + '</a>', [ idNumber ]); } function popTipsSoonFn(id, when, popData) { when || ( when=250 ); var popTips=function(){ setupTooltips(document.getElementById(id), false, true, popData); }; return function() { setTimeout( popTips, when, popData ); }; } function setPopupTipsAndHTML(html, divname, idnumber, popData) { setPopupHTML(html, divname, idnumber, getValueOf('popupSubpopups') ? popTipsSoonFn(divname + idnumber, null, popData) : null); } // ENDFILE: htmloutput.js // STARTFILE: mouseout.js ////////////////////////////////////////////////// // fuzzy checks function fuzzyCursorOffMenus(x,y, fuzz, parent) { if (!parent) { return null; } var uls=parent.getElementsByTagName('ul'); for (var i=0; i<uls.length; ++i) { if (uls[i].className=='popup_menu') { if (uls[i].offsetWidth > 0) return false; } // else {document.title+='.';} } return true; } function checkPopupPosition () { // stop the popup running off the right of the screen // FIXME avoid pg.current.link pg.current.link && pg.current.link.navpopup && pg.current.link.navpopup.limitHorizontalPosition(); } function mouseOutWikiLink () { if (!window.popupsReady || !window.popupsReady()) { return; } //console ('mouseOutWikiLink'); var a=this; if (a.navpopup==null) return; if ( ! a.navpopup.isVisible() ) { a.navpopup.banish(); return; } Navpopup.tracker.addHook(posCheckerHook(a.navpopup)); } function posCheckerHook(navpop) { return function() { if (!navpop.isVisible()) { return true; /* remove this hook */ } if (Navpopup.tracker.dirty) { return false; } var x=Navpopup.tracker.x, y=Navpopup.tracker.y; var mouseOverNavpop = navpop.isWithin(x,y,navpop.fuzz, navpop.mainDiv) || !fuzzyCursorOffMenus(x,y,navpop.fuzz, navpop.mainDiv); // FIXME it'd be prettier to do this internal to the Navpopup objects var t=getValueOf('popupHideDelay'); if (t) { t = t * 1000; } if (!t) { if(!mouseOverNavpop) { navpop.banish(); return true; /* remove this hook */ } return false; } // we have a hide delay set var d=+(new Date()); if ( !navpop.mouseLeavingTime ) { navpop.mouseLeavingTime = d; return false; } if ( mouseOverNavpop ) { navpop.mouseLeavingTime=null; return false; } if (d - navpop.mouseLeavingTime > t) { navpop.mouseLeavingTime=null; navpop.banish(); return true; /* remove this hook */ } return false; }; } function runStopPopupTimer(navpop) { // at this point, we should have left the link but remain within the popup // so we call this function again until we leave the popup. if (!navpop.stopPopupTimer) { navpop.stopPopupTimer=setInterval(posCheckerHook(navpop), 500); navpop.addHook(function(){clearInterval(navpop.stopPopupTimer);}, 'hide', 'before'); } } // ENDFILE: mouseout.js // STARTFILE: previewmaker.js /** @fileoverview Defines the {@link Previewmaker} object, which generates short previews from wiki markup. */ /** Creates a new Previewmaker @constructor @class The Previewmaker class. Use an instance of this to generate short previews from Wikitext. @param {String} wikiText The Wikitext source of the page we wish to preview. @param {String} baseUrl The url we should prepend when creating relative urls. @param {Navpopup} owner The navpop associated to this preview generator */ function Previewmaker(wikiText, baseUrl, owner) { /** The wikitext which is manipulated to generate the preview. */ this.originalData=wikiText; this.setData(); this.baseUrl=baseUrl; this.owner=owner; this.maxCharacters=getValueOf('popupMaxPreviewCharacters'); this.maxSentences=getValueOf('popupMaxPreviewSentences'); } Previewmaker.prototype.setData=function() { var maxSize=max(10000, 2*this.maxCharacters); this.data=this.originalData.substring(0,maxSize); }; /** Remove HTML comments @private */ Previewmaker.prototype.killComments = function () { // this also kills trailing spaces and one trailing newline, eg [[diamyo]] this.data=this.data.replace(RegExp('<!--[\\s\\S]*?--> *\\n?', 'g'), ''); }; /** @private */ Previewmaker.prototype.killDivs = function () { // say goodbye, divs (can be nested, so use * not *?) this.data=this.data.replace(RegExp('< *div[^>]* *>[\\s\\S]*?< */ *div *>', 'gi'), ''); }; /** @private */ Previewmaker.prototype.killGalleries = function () { this.data=this.data.replace(RegExp('< *gallery[^>]* *>[\\s\\S]*?< */ *gallery *>', 'gi'), ''); }; /** @private */ Previewmaker.prototype.kill = function(opening, closing, subopening, subclosing, repl) { var oldk=this.data; var k=this.killStuff(this.data, opening, closing, subopening, subclosing, repl); while (k.length < oldk.length) { oldk=k; k=this.killStuff(k, opening, closing, subopening, subclosing, repl); } this.data=k; }; /** @private */ Previewmaker.prototype.killStuff = function (txt, opening, closing, subopening, subclosing, repl) { var op=this.makeRegexp(opening); var cl=this.makeRegexp(closing, '^'); var sb=subopening ? this.makeRegexp(subopening, '^') : null; var sc=subclosing ? this.makeRegexp(subclosing, '^') : cl; if (!op || !cl) { alert('Navigation Popups error: op or cl is null! something is wrong.'); return; } if (!op.test(txt)) { return txt; } var ret=''; var opResult = op.exec(txt); ret = txt.substring(0,opResult.index); txt=txt.substring(opResult.index+opResult[0].length); var depth = 1; while (txt.length > 0) { var removal=0; if (depth==1 && cl.test(txt)) { depth--; removal=cl.exec(txt)[0].length; } else if (depth > 1 && sc.test(txt)) { depth--; removal=sc.exec(txt)[0].length; }else if (sb && sb.test(txt)) { depth++; removal=sb.exec(txt)[0].length; } if ( !removal ) { removal = 1; } txt=txt.substring(removal); if (depth==0) { break; } } return ret + (repl || '') + txt; }; /** @private */ Previewmaker.prototype.makeRegexp = function (x, prefix, suffix) { prefix = prefix || ''; suffix = suffix || ''; var reStr=''; var flags=''; if (isString(x)) { reStr=prefix + literalizeRegex(x) + suffix; } else if (isRegExp(x)) { var s=x.toString().substring(1); var sp=s.split('/'); flags=sp[sp.length-1]; sp[sp.length-1]=''; s=sp.join('/'); s=s.substring(0,s.length-1); reStr= prefix + s + suffix; } else { log ('makeRegexp failed'); } log ('makeRegexp: got reStr=' + reStr + ', flags=' + flags); return RegExp(reStr, flags); }; /** @private */ Previewmaker.prototype.killBoxTemplates = function () { // taxobox removal... in fact, there's a saudiprincebox_begin, so let's be more general // also, have float_begin, ... float_end this.kill(RegExp('[{][{][^{}\\s|]*?(float|box)[_ ](begin|start)', 'i'), /[}][}]\s*/, '{{'); // infoboxes etc // from [[User:Zyxw/popups.js]]: kill frames too this.kill(RegExp('[{][{][^{}\\s|]*?(infobox|elementbox|frame)[_ ]', 'i'), /[}][}]\s*/, '{{'); }; /** @private */ Previewmaker.prototype.killTemplates = function () { this.kill('{{', '}}', '{', '}', ' '); }; /** @private */ Previewmaker.prototype.killTables = function () { // tables are bad, too // this can be slow, but it's an inprovement over a browser hang // torture test: [[Comparison_of_Intel_Central_Processing_Units]] this.kill('{|', /[|]}\s*/, '{|'); this.kill(/<table.*?>/i, /<\/table.*?>/i, /<table.*?>/i); // remove lines starting with a pipe for the hell of it (?) this.data=this.data.replace(RegExp('^[|].*$', 'mg'), ''); }; /** @private */ Previewmaker.prototype.killImages = function () { // images and categories are a nono this.kill(RegExp('[[][[]\\s*(' + pg.ns.image + '|' + pg.ns.category + ')\\s*:', 'i'), /\]\]\s*/, '[', ']'); }; /** @private */ Previewmaker.prototype.killHTML = function () { // kill <ref ...>...</ref> this.kill(/<ref\b.*?>/i, /<\/ref>/i); // let's also delete entire lines starting with <. it's worth a try. this.data=this.data.replace(RegExp('(^|\\n) *<.*', 'g'), '\n'); // and those pesky html tags, but not <nowiki> or <blockquote> var splitted=this.data.parenSplit(/(<.*?>)/); var len=splitted.length; for (var i=1; i<len; i=i+2) { switch (splitted[i]) { case '<nowiki>': case '</nowiki>': break; default: if (! /^< *\/? *blockquote\b/i.test(splitted[i])) { splitted[i]=''; } } } this.data=splitted.join(''); }; /** @private */ Previewmaker.prototype.killChunks = function() { // heuristics alert // chunks of italic text? you crazy, man? var italicChunkRegex=new RegExp ("((^|\\n)\\s*:*\\s*''[^']([^']|'''|'[^']){20}(.|\\n[^\\n])*''[.!?\\s]*\\n)+", 'g'); // keep stuff separated, though, so stick in \n (fixes [[Union Jack]]? this.data=this.data.replace(italicChunkRegex, '\n'); }; /** @private */ Previewmaker.prototype.mopup = function () { // we simply *can't* be doing with horizontal rules right now this.data=this.data.replace(RegExp('^-{4,}','mg'),''); // no indented lines this.data=this.data.replace(RegExp('(^|\\n) *:[^\\n]*','g'), ''); // replace __TOC__, __NOTOC__ and whatever else there is // this'll probably do this.data=this.data.replace(RegExp('^__[A-Z_]*__ *$', 'gmi'),''); }; /** @private */ Previewmaker.prototype.firstBit = function () { // dont't be givin' me no subsequent paragraphs, you hear me? /// first we "normalize" section headings, removing whitespace after, adding before var d=this.data; if (getValueOf('popupPreviewCutHeadings')) { this.data=this.data.replace(RegExp('\\s*(==+[^=]*==+)\\s*', 'g'), '\n\n$1 '); /// then we want to get rid of paragraph breaks whose text ends badly this.data=this.data.replace(RegExp('([:;]) *\\n{2,}', 'g'), '$1\n'); this.data=this.data.replace(RegExp('^[\\s\\n]*'), ''); stuff=(RegExp('^([^\\n]|\\n[^\\n\\s])*')).exec(this.data); if (stuff) { d = stuff[0]; } if (!getValueOf('popupPreviewFirstParOnly')) { d = this.data; } /// now put \n\n after sections so that bullets and numbered lists work d=d.replace(RegExp('(==+[^=]*==+)\\s*', 'g'), '$1\n\n'); } // superfluous sentences are RIGHT OUT. // note: exactly 1 set of parens here needed to make the slice work d = d.parenSplit(RegExp('([!?.]+["'+"'"+']*\\s)','g')); // leading space is bad, mmkay? d[0]=d[0].replace(RegExp('^\\s*'), ''); var notSentenceEnds=RegExp('([^.][a-z][.] *[a-z]|etc|sic|Dr|Mr|Mrs|Ms|St|no|op|cit|\\[[^\\]]*|\\s[A-Zvclm])$', 'i'); d = this.fixSentenceEnds(d, notSentenceEnds); this.fullLength=d.join('').length; var maxChars=getValueOf('popupMaxPreviewCharacters') + this.extraCharacters; var n=this.maxSentences; var dd=this.firstSentences(d,n); do { dd=this.firstSentences(d,n); --n; } while ( dd.length > this.maxCharacters && n != 0 ); this.data = dd; }; /** @private */ Previewmaker.prototype.fixSentenceEnds = function(strs, reg) { // take an array of strings, strs // join strs[i] to strs[i+1] & strs[i+2] if strs[i] matches regex reg var abbrevRe=/\b[a-z][^a-z]*$/i; for (var i=0; i<strs.length-2; ++i) { if (reg.test(strs[i])) { a=[]; for (var j=0; j<strs.length; ++j) { if (j<i) a[j]=strs[j]; if (j==i) a[i]=strs[i]+strs[i+1]+strs[i+2]; if (j>i+2) a[j-2]=strs[j]; } return this.fixSentenceEnds(a,reg); } // BUGGY STUFF - trying to fix up [[S. C. Johnson & Son]] preview if (false && abbrevRe.test(strs[i])) { var j=i, buf=''; do { buf=buf+strs[i]+strs[i+1]; i=i+2; } while (i<strs.length-2 && abbrevRe.test(strs[i])); strs[i]=buf+strs[i]; var a=(j?strs.slice(0,j-1):[]).concat(strs.slice(i)); return this.fixSentenceEnds(a,reg); } } return strs; }; /** @private */ Previewmaker.prototype.firstSentences = function(strs, howmany) { var t=strs.slice(0, 2*howmany); return t.join(''); }; /** @private */ Previewmaker.prototype.killBadWhitespace = function() { // also cleans up isolated '''', eg [[Suntory Sungoliath]] this.data=this.data.replace(RegExp('^ *\'+ *$', 'gm'), ''); }; /** Runs the various methods to generate the preview. The preview is stored in the <code>html</html> field. @private */ Previewmaker.prototype.makePreview = function() { if (this.owner.article.namespace()!=pg.ns.template) { this.killComments(); this.killDivs(); this.killGalleries(); this.killBoxTemplates(); if (getValueOf('popupPreviewKillTemplates')) { this.killTemplates(); } else { this.killMultilineTemplates(); } this.killTables(); this.killImages(); this.killHTML(); this.killChunks(); this.mopup(); this.firstBit(); this.killBadWhitespace(); } this.html=wiki2html(this.data, this.baseUrl); // needs livepreview this.fixHTML(); this.stripLongTemplates(); }; Previewmaker.prototype.editSummaryPreview=function() { var c=this.data; var re=/^\/[*] +(.*?) +[*]\/(.*)/; if (re.test(c)) { var section=c.replace(re, '$1'); var t=new Title().fromURL(this.baseUrl); t.anchorFromUtf(section); // work around livepreview brokenness with anchors: // pass .-escaped anchor instead of literal value c=c.replace(re, '[[' + t.toString(true).split("'").join('%27') + '#' + t.anchor.split("'").join('%27') + '|&rarr;]]' + '<span class=autocomment>$1</span>$2'); } this.html=wiki2html(c, this.baseUrl); return this.html; }; //<NOLITE> /** Test function for debugging preview problems one step at a time. */ function previewSteps(txt) { try { txt=txt || document.editform.wpTextbox1.value; } catch (err) { if (pg.cache.pages.length > 0) { txt=pg.cache.pages[pg.cache.pages.length-1].data; } else { alert('provide text or use an edit page'); } } txt=txt.substring(0,10000); var base=pg.wiki.articlebase + Title.fromURL(document.location.href).urlString(); var p=new Previewmaker(txt, base, pg.current.link.navpopup); if (this.owner.article.namespace() != pg.ns.template) { p.killComments(); if (!confirm('done killComments(). Continue?\n---\n' + p.data)) { return; } p.killDivs(); if (!confirm('done killDivs(). Continue?\n---\n' + p.data)) { return; } p.killGalleries(); if (!confirm('done killGalleries(). Continue?\n---\n' + p.data)) { return; } p.killBoxTemplates(); if (!confirm('done killBoxTemplates(). Continue?\n---\n' + p.data)) { return; } if (getValueOf('popupPreviewKillTemplates')) { p.killTemplates(); if (!confirm('done killTemplates(). Continue?\n---\n' + p.data)) { return; } } else { p.killMultilineTemplates(); if (!confirm('done killMultilineTemplates(). Continue?\n---\n' + p.data)) { return; } } p.killTables(); if (!confirm('done killTables(). Continue?\n---\n' + p.data)) { return; } p.killImages(); if (!confirm('done killImages(). Continue?\n---\n' + p.data)) { return; } p.killHTML(); if (!confirm('done killHTML(). Continue?\n---\n' + p.data)) { return; } p.killChunks(); if (!confirm('done killChunks(). Continue?\n---\n' + p.data)) { return; } p.mopup(); if (!confirm('done mopup(). Continue?\n---\n' + p.data)) { return; } p.firstBit(); if (!confirm('done firstBit(). Continue?\n---\n' + p.data)) { return; } p.killBadWhitespace(); if (!confirm('done killBadWhitespace(). Continue?\n---\n' + p.data)) { return; } } p.html=wiki2html(p.data, base); // needs livepreview p.fixHTML(); if (!confirm('done fixHTML(). Continue?\n---\n' + p.html)) { return; } p.stripLongTemplates(); if (!confirm('done stripLongTemplates(). Continue?\n---\n' + p.html)) { return; } alert('finished preview - end result follows.\n---\n' + p.html); } //</NOLITE> /** Works around a quoting bug in livepreview. <code>wiki2html('[[Foo\'s "bar"]]')</code> gives @literal{<a href='Foo's "bar"'>} which doesn't do very well. We change this into @literal{<a href="Foo's %22bar%22">} @private */ Previewmaker.prototype.fixHTML = function() { if(!this.html) return; // all links seem to have potential issues with quotation marks var splitted=this.html.parenSplit(/href='([^>]*)'/g); var ret=''; for (var i=0; i<splitted.length; ++i) { if(i%2==0) { ret += splitted[i]; continue; } if(i%2==1) { ret += 'href="' + splitted[i].split('"').join('%22') + '"'; } } // fix question marks in wiki links // maybe this'll break some stuff :-( ret=ret.replace(RegExp('\(<a href="/' + pg.wiki.articlePath + '/[^"]*\)[?]\(.*?"\)', 'g'), '$1%3F$2'); // FIXME fix up % too this.html=ret; }; /** Generates the preview and displays it in the current popup. Does nothing if the generated preview is invalid or consists of whitespace only. Also activates wikilinks in the preview for subpopups if the popupSubpopups option is true. */ Previewmaker.prototype.showPreview = function () { this.makePreview(); if (typeof this.html != typeof '') return; if (RegExp('^\\s*$').test(this.html)) return; setPopupHTML('<hr>', 'popupPrePreviewSep', this.owner.idNumber); setPopupTipsAndHTML(this.html, 'popupPreview', this.owner.idNumber, { owner: this.owner }); var more = (this.fullLength > this.data.length) ? this.moreLink() : ''; setPopupHTML(more, 'popupPreviewMore', this.owner.idNumber); }; /** @private */ Previewmaker.prototype.moreLink=function() { var a=document.createElement('a'); a.className='popupMoreLink'; a.innerHTML=popupString('more...'); var savedThis=this; a.onclick=function() { savedThis.maxCharacters+=2000; savedThis.maxSentences+=20; savedThis.setData(); savedThis.showPreview(); } return a; } /** @private */ Previewmaker.prototype.stripLongTemplates = function() { // operates on the HTML! this.html=this.html.replace(RegExp('^.{0,1000}[{][{][^}]*?(<(p|br)( /)?>\\s*){2,}([^{}]*?[}][}])?', 'gi'), ''); this.html=this.html.split('\n').join(' '); // workaround for <pre> templates this.html=this.html.replace(RegExp('[{][{][^}]*<pre>[^}]*[}][}]','gi'), ''); }; /** @private */ Previewmaker.prototype.killMultilineTemplates = function() { this.kill('{{{', '}}}'); this.kill(RegExp('\\s*[{][{][^{}]*\\n'), '}}', '{{'); }; // ENDFILE: previewmaker.js // STARTFILE: querypreview.js //<NOLITE> function loadQueryPreview(queryType, article, navpop) { var art=new Title(article).urlString(); var url=pg.wiki.wikibase + '/query.php?format=json&'; var htmlGenerator=function(a,d){alert('invalid html generator');}; switch (queryType) { case 'history': url += 'titles=' + art + '&what=revisions|userinfo&uioptions=timecorrection&rvcomments&rvlimit=' + getValueOf('popupHistoryPreviewLimit'); htmlGenerator=historyPreviewHTML; break; case 'imagelinks': // redundant case url += 'titles=' + art + '&what=imagelinks&ilfilter=all'; htmlGenerator=imagelinksPreviewHTML; break; case 'category': url += 'what=category&cptitle=' + art; htmlGenerator=categoryPreviewHTML; break; case 'contribs': url += 'what=usercontribs|userinfo&uioptions=timecorrection&titles=' + art + '&uccomments' + '&uclimit=' + getValueOf('popupContribsPreviewLimit'); htmlGenerator=contribsPreviewHTML; break; case 'imagepagepreview': var trail='&what=imageinfo|content|imagelinks&ilfilter=all'; if (!getValueOf('popupImageLinks')) { trail = '&what=imageinfo|content'; } if (pg.wiki.commons) { trail += '&iishared'; } url += 'titles=' + art + trail; htmlGenerator=imagepagePreviewHTML; break; case 'sharedimagepage': url += 'titles=' + art + '&what=content&proxylang=' + pg.wiki.commonslang; htmlGenerator=sharedImagePagePreviewHTML; break; case 'backlinks': url += 'what=backlinks&titles=' + art; htmlGenerator=backlinksPreviewHTML; break; } pendingNavpopTask(navpop); var callback=function(d){ showQueryPreview(queryType, htmlGenerator(article,d,navpop), navpop.idNumber, navpop, d); }; var go = function(){ getPageWithCaching(url, callback, navpop); return true; } if (navpop.visible || !getValueOf('popupLazyDownloads')) { go(); } else { navpop.addHook(go, 'unhide', 'before', 'DOWNLOAD_'+queryType+'_QUERY_DATA'); } } function showQueryPreview(queryType, html, id, navpop, download) { var target='popupPreview'; switch (queryType) { case 'imagelinks': case 'category': target='popupPostPreview'; break; case 'sharedimagepage': target='popupSecondPreview'; break; } setPopupTipsAndHTML(html, target, id); completedNavpopTask(navpop); } function backlinksPreviewHTML(article, download, navpop) { var jsObj=getJsObj(download.data); try { var page=anyChild(jsObj.pages); var list=page.backlinks; } catch (someError) { return 'backlinksPreviewHTML went wonky'; } var html=[]; if (!list) { return popupString('No backlinks found'); } for (var i=0; i<list.length; ++i) { var t=new Title(list[i]['*']); html.push('<a href="' + pg.wiki.titlebase + t.urlString() + '">' + t + '</a>'); } html=html.join(', '); if (jsObj.query && jsObj.query.backlinks && jsObj.query.backlinks.next) { html += popupString(' and more'); } return html; } function sharedImagePagePreviewHTML(article, download, navpop) { var jsObj=getJsObj(download.data); try { var page=anyChild(jsObj.pages); var content=(page && page.content) ? page.content['*'] : null; } catch (someError) { return 'sharedimagepage preview failed :( is the query.php extension installed?'; } var ret=''; if (content) { var p=prepPreviewmaker(content, article, navpop); p.makePreview(); if (p.html) { ret += '<hr>' + p.html; } } return ret; } function imagepagePreviewHTML(article, download, navpop) { var jsObj=getJsObj(download.data); try { var page=anyChild(jsObj['pages']); var content=(page && page.content) ? page.content['*'] : null; var a=page.image; var b=page.sharedimage; } catch (someError) { return 'imagepage preview failed :( is the query.php extension installed?'; } var ret=''; if (content) { var p=prepPreviewmaker(content, article, navpop); p.makePreview(); if (p.html) { ret += '<hr>' + p.html; } } var sharingInfo=getSharingInfo(a,b); if (sharingInfo) { ret += '<hr>' + sharingInfo; } if (content!==null && getValueOf('popupSummaryData')) { var info=getPageInfo(content, download); log(info); setPopupTrailer(info, navpop.idNumber); } if (!a && b) { loadQueryPreview('sharedimagepage', article, navpop); } showQueryPreview('imagelinks', imagelinksPreviewHTML(article,download), navpop.idNumber, download); return ret; } function getSharingInfo(a,b) { if (!pg.wiki.commons) { return ''; } var sharingInfo=''; if (a && b) { if (checkSameImage(a,b)) { sharingInfo = popupString('commons dupe'); } else { sharingInfo = popupString('commons conflict'); } } else if (a && !b) { // nothing interesting if (getValueOf('popupShowNonCommonsImages')) { sharingInfo = popupString('not commons'); } } else if (!a && b) { sharingInfo = popupString('commons only'); } else { sharingInfo = popupString('No image found'); } return sharingInfo; } function checkSameImage(a,b){ return (a['size']==b['size'] && a['width']==b['width'] && a['bits']==b['bits'] && a['media']==b['media'] && a['mime']==b['mime']); } function imagelinksPreviewHTML(article, download) { var jsobj=getJsObj(download.data); try { var list=anyChild(jsobj['pages'])['imagelinks']; if (!list) { return popupString('No image links found'); } } catch(someError) { return 'Image links preview generation failed :( Is the query.php extension installed?'; } var ret=[]; for (var i=0; i<list.length; ++i) { ret.push(list[i]['*']); } if (ret.length === 0) { return popupString('No image links found'); } return '<h2>' + popupString('File links') + '</h2>' + linkList(ret); } function categoryPreviewHTML(article, download) { var jsobj=getJsObj(download.data); try{ var list=jsobj['pages']; } catch(someError) { return 'Category preview failed :( Is the query.php extension installed?'; } var ret=[]; for (var p in list) { ret.push(list[p]['title']); } if (ret.length === 0) { return popupString('Empty category'); } return '<h2>' + tprintf('Category members (%s shown)', [ret.length]) + '</h2>' +linkList(ret); } function linkList(list) { list.sort(function(x,y) { return (x==y ? 0 : (x<y ? -1 : 1)); }); var buf=[]; for (var i=0; i<list.length; ++i) { buf.push(wikiLink({article: new Title(list[i]), text: list[i].split(' ').join('&nbsp;'), action: 'view'})); } return buf.join(', '); } function contribsPreviewHTML(article, download, navpop) { return historyPreviewHTML(article, download, navpop, true); } function historyPreviewHTML(article, download, navpop, reallyContribs) { var jsobj=getJsObj(download.data); try { var tz=jsobj.meta.user.timecorrection; var edits=anyChild(jsobj.pages)[reallyContribs ? 'contributions' : 'revisions']; } catch (someError) { return 'Preview failed :-( Is the query.php extension installed?'; } var timeOffset = getTimeOffset(tz); Cookie.create('popTz', timeOffset, 1); var ret=editPreviewTable(article, edits, reallyContribs, timeOffset); return ret; } function getTimeOffset(tz) { return ( tz && tz.indexOf(':') > -1 ) ? ( parseInt(tz,10)*60 + parseInt(tz.split(':')[1],10) ) : 0; } function editPreviewTable(article, h, reallyContribs, timeOffset) { var html=['<table>']; var day=null; var curart=article; for (var i=0; i<h.length; ++i) { if (reallyContribs) { var page=h[i]['*']; curart = new Title(page); } var minor=typeof h[i]['minor']=='undefined' ? '' : '<b>m </b>'; var editDate=adjustDate(getDateFromTimestamp(h[i].timestamp), timeOffset); var thisDay = dayFormat(editDate); var thisTime = timeFormat(editDate); if (thisDay==day) { thisDay=''; } else { day=thisDay; } if (thisDay) { html.push( '<tr><td colspan=3><span class="popup_history_date">' + thisDay+'</span></td></tr>' ); } html.push('<tr class="popup_history_row_' + ( (i%2) ? 'odd' : 'even') + '">'); html.push('<td>(<a href="' + pg.wiki.titlebase + new Title(curart).urlString() + '&diff=prev&oldid=' + h[i]['revid'] + '">' + popupString('last') + '</a>)</td>'); html.push('<td>' + '<a href="' + pg.wiki.titlebase + new Title(curart).urlString() + '&oldid=' + h[i]['revid'] + '">' + thisTime + '</a></td>'); var col3url='', col3txt=''; if (!reallyContribs) { var user=h[i]['user']; col3url=pg.wiki.titlebase + pg.ns.user + ':' + new Title(user).urlString(); col3txt=user; } else { col3url=pg.wiki.titlebase + curart.urlString(); col3txt=page; // FIXME do we have to escape this? } html.push('<td>' + (reallyContribs ? minor : '') + '<a href="' + col3url + '">' + col3txt + '</a></td>'); var comment=''; var c=h[i].comment || h[i]['*']; if (c) { comment=new Previewmaker(c, new Title(curart).toUrl()).editSummaryPreview(); } html.push('<td>' + (!reallyContribs ? minor : '') + comment + '</td>'); html.push('</tr>'); html=[html.join('')]; } html.push('</table>'); return html.join(''); } function getDateFromTimestamp(t) { var s=t.split(/[^0-9]/); switch(s.length) { case 0: return null; case 1: return new Date(s[0]); case 2: return new Date(s[0], s[1]-1); case 3: return new Date(s[0], s[1]-1, s[2]); case 4: return new Date(s[0], s[1]-1, s[2], s[3]); case 5: return new Date(s[0], s[1]-1, s[2], s[3], s[4]); case 6: return new Date(s[0], s[1]-1, s[2], s[3], s[4], s[5]); default: return new Date(s[0], s[1]-1, s[2], s[3], s[4], s[5], s[6]); } } function adjustDate(d, offset) { // offset is in minutes var o=offset * 60 * 1000; return new Date( +d + o); } function dayFormat(editDate, utc) { if (utc) { return map(zeroFill, [editDate.getUTCFullYear(), editDate.getUTCMonth()+1, editDate.getUTCDate()]).join('-'); } return map(zeroFill, [editDate.getFullYear(), editDate.getMonth()+1, editDate.getDate()]).join('-'); } function timeFormat(editDate, utc) { if (utc) { return map(zeroFill, [editDate.getUTCHours(), editDate.getUTCMinutes(), editDate.getUTCSeconds()]).join(':'); } return map(zeroFill, [editDate.getHours(), editDate.getMinutes(), editDate.getSeconds()]).join(':'); } //</NOLITE> // ENDFILE: querypreview.js // STARTFILE: debug.js //////////////////////////////////////////////////////////////////// // Debugging functions //////////////////////////////////////////////////////////////////// function log(){}; // dummy to stop errors function setupDebugging() { //<NOLITE> // debugging - change DEBUG to NONE to switch off if (window.popupDebug) { // popupDebug is set from .version window.log=function(x) { //if(gMsg!='')gMsg += '\n'; gMsg+=time() + ' ' + x; }; if (pg.debugLevel != log.None) { window.logger.debug(x); } } window.errlog=function(x) { if (pg.debugLevel != log.None) { window.logger.error(x); } } pg.debugLevel=Log.DEBUG; window.logger = new Log(pg.debugLevel, Log.popupLogger); log('Initializing logger'); } else { //</NOLITE> window.log = function(x) {}; window.errlog = function(x) {}; //<NOLITE> } //</NOLITE> } // ENDFILE: debug.js // STARTFILE: images.js //<NOLITE> // FIXME rewrite ALL of this // How the URLs for images in the popup come about // loadPreview // | // getWiki // |<----------------see other schematic for details // insertPreview (insertPreview = onComplete) // | // | insertPreview gets a wikiText fragment from // | the wikiText downloaded by getWiki // | // [wikiMarkupToAddressFragment] // | // | mouseOverWikiLink (gets an "address fragment", // | | no processing needed) // \->-*loadThisImage---<----loadImages // | // [image(Thumb)URL]-->--hopefully valid image urls // FIXME get rid of pg.idNumber function sequentialLoadThisImage (image) { if (!getValueOf('popupImages')) { return false; } if (!isValidImageName(image)) { return false; } var imageUrls=getImageUrls(image); if (!imageUrls) { return null; } var img=new Image(); img.isNew=true; img.pg.idNumber=pg.idNumber; img.counter=1; img.onload = function () { // clear status thingy setImageStatus(''); var i=findThis(imageUrls, this.src); var goodSrc=this.src; var setPopupImage=function () { var popupImage=document.getElementById("popupImage"+this.pg.idNumber); if (popupImage && typeof popupImage.src != 'undefined') { clearInterval(pg.timer.image); popupImage.src=goodSrc; popupImage.width=getValueOf('popupImageSize'); popupImage.style.display='inline'; setPopupImageLink(image, pg.wiki.imageSources[i].wiki); return true; } else { return false; } }; pg.timer.image=setInterval(setPopupImage, 250); pg.cache.images.push(goodSrc); }; img.onerror = function () { pg.cache.badImageUrls.push(this.src); }; img.setNext = function () { var currentSrc=null; var newSrc; if (!this.isNew) { currentSrc=this.src; } this.isNew=false; newSrc= (currentSrc) ? nextOne(imageUrls, currentSrc) : imageUrls[0]; while (findThis(pg.cache.badImageUrls, newSrc)) { newSrc=nextOne(imageUrls, newSrc); if (!newSrc) { setImageStatus (' :-('); return; } } setImageStatus(' '+findThis(imageUrls, newSrc)); this.src=newSrc; }; // start the ball rolling img.setNext(); } function loadThisImageAtThisUrl(image, url) { log('loading "best" image:\n'+url); pg.misc.gImage=new Title(image.toString()); pg.misc.imageArray = []; pg.misc.imageArray[0] = new Image(); pg.misc.imageArray[0].src=url; if (pg.timer.image || pg.timer.image===0) { clearInterval(pg.timer.image); pg.counter.checkImages=0; } pg.timer.image=setInterval(checkImages, 250); return; } // methinks this is unbelievably silly // it dovetails with the parallel image loader function function checkImages() { //log('checkImages: pg.counter.loop='+pg.counter.loop+'; pg.counter.checkImages='+pg.counter.checkImages); if (pg.timer.checkImages || pg.timer.checkImages===0) { clearInterval(pg.timer.checkImages); pg.timer.checkImages=null; if (pg.counter.loop > 10) {pg.counter.loop=0; log('too many iterations of checkImages'); return;} pg.counter.loop++; } else pg.counter.checkImages++; var status = ( pg.counter.checkImages % 2 ) ? ':' : '.' ; setImageStatus(status); if (pg.counter.checkImages > 100) { pg.counter.checkImages = 0; log ('pg.counter.checkImages too big in checkImages; returning'); clearInterval(pg.timer.image); } var popupImage=null; popupImage=document.getElementById("popupImg"+pg.idNumber); if (popupImage == null) { // this doesn't seem to happen any more in practise for some reason // still, I'll leave it in log('checkImages: document.getElementById("popupImg'+pg.idNumber+'") is null! retrying in 333ms...'); pg.timer.checkImages=setInterval("checkImages()",333); return; } log('checkImages: found element popupImg'+pg.idNumber+', and src='+popupImage.src); // get the first image to successfully load // and put it in the popupImage for(var i = 0; i < pg.misc.imageArray.length; ++i) { if(isImageOk(pg.misc.imageArray[i])) { // stop all the gubbins, assign the image and return log('checkImages: got at pos '+i+', src='+pg.misc.imageArray[i].src); clearInterval(pg.timer.image); if(pg.misc.gImage && pg.misc.gImage.namespace() == pg.ns.image) { popupImage.src=pg.misc.imageArray[i].src; popupImage.width=getValueOf('popupImageSize'); popupImage.style.display='inline'; // should we check to see if it's already there? maybe... pg.cache.images.push(pg.misc.imageArray[i].src); setPopupImageLink(pg.misc.gImage, pg.wiki.imageSources[i].wiki); stopImagesDownloading(); } setImageStatus(''); // reset evil nonconstant globals delete pg.misc.imageArray; pg.misc.imageArray=[]; pg.timer.image=null; pg.counter.checkImages=0; pg.counter.loop=0; return popupImage.src; } } log('checkImages: no good image found. retrying in a tic...'); pg.timer.checkImages=setInterval("checkImages()",333); } function stopImagesDownloading() { pg.misc.gImage=null; if (pg.misc.imageArray == null) { return null; } for (var i=0; i<pg.misc.imageArray.length; ++i) { //pg.misc.imageArray[i].src=''; // this is a REALLY BAD IDEA delete pg.misc.imageArray[i]; //pg.misc.imageArray[i] = new Image(); } pg.misc.imageArray = []; } function toggleSize() { var imgContainer=this; if (!imgContainer) { alert('imgContainer is null :/'); return;} img=imgContainer.firstChild; if (!img) { alert('img is null :/'); return;} if (!img.style.width || img.style.width=='') { img.style.width='100%'; } else { img.style.width=''; } } function setPopupImageLink (img, wiki) { if( wiki === null || img === null ) { return null; } var a=document.getElementById("popupImageLink"+pg.idNumber); if (a === null) { return null; } switch (getValueOf('popupThumbAction')) { case 'imagepage': if (pg.current.article.namespace()!=pg.ns.image) { a.href=pg.wiki.titlebase + img.urlString(); // FIXME: unreliable pg.idNumber popTipsSoonFn('popupImage' + pg.idNumber)(); break; } // else fall through case 'sizetoggle': a.onclick=toggleSize; a.title=popupString('Toggle image size'); return; case 'linkfull': var linkURL = imageURL(img, wiki); if (linkURL) { a.href = linkURL; a.title=popupString('Open full-size image'); } return; } } function isImageOk(img) { // IE test if (!img.complete) { return false; } // gecko test if (typeof img.naturalWidth != "undefined" && img.naturalWidth == 0) { return false; } // test for konqueror and opera // note that img.width must not be defined in the html with a width="..." // for this to work. // konq seems to give "broken images" width 16, presumably an icon width // this test would probably work in gecko too, *except for very small images* if (typeof img.width == 'undefined' || img.width <= 16) { return false; } // No other way of checking: assume it's ok. return true; } // those odd a/a5/ bits of image urls function imagePathComponent(article) { // article is string, no namespace // FIXME needs testing with odd characters var forhash=article.split(' ').join('_'); var hash=hex_md5(forhash); return hash.substring(0,1) + '/' + hash.substring(0,2) + '/'; } function getImageUrlStart(wiki) { // this returns a trailing slash switch (wiki) { case 'en.wikipedia.org': return 'http://upload.wikimedia.org/wikipedia/en/'; case pg.wiki.commons: return 'http://upload.wikimedia.org/wikipedia/commons/'; case 'en.wiktionary.org': return 'http://en.wiktionary.org/upload/en/'; case 'secure.wikimedia.org': return joinPath(['http://upload.wikimedia.org', pg.wiki.prePath]) + '/'; break; default: // unsupported - take a guess if (pg.wiki.wikimedia) { return 'http://upload.wikimedia.org/wikipedia/' + pg.wiki.lang +'/'; } /* this should work for wikicities */ return 'http://' + wiki + '/images/'; } } function imageURL(img, wiki) { if (getValueOf('popupImagesFromThisWikiOnly') && wiki != pg.wiki.hostname) return null; var imgurl=null; var pathcpt = imagePathComponent(img.stripNamespace()); imgurl=getImageUrlStart(wiki) + pathcpt + img.stripNamespace().split(' ').join('_'); return imgurl; } function imageThumbURL(img, wiki, width) { // // eg http://upload.wikimedia.org/wikipedia/en/thumb/6/61/ // Rubiks_cube_solved.jpg/120px-Rubiks_cube_solved.jpg // ^^^^^^^^^^^^^^^^^^^^^^^ // wikicities omits this bit // AND wikicities needs a new pathcpt for each filename including thumbs if (getValueOf('popupImagesFromThisWikiOnly') && wiki != pg.wiki.hostname) return null; if (getValueOf('popupNeverGetThumbs')) return null; var imgurl=null; var stripped=img.stripNamespace(); var pathcpt; if (pg.wiki.wikimedia) pathcpt = imagePathComponent(stripped); else pathcpt = imagePathComponent(width+'px-'+stripped); imgurl=getImageUrlStart(wiki) + "thumb/" + pathcpt; if (pg.wiki.wikimedia) imgurl += stripped + '/'; imgurl += width +"px-" + stripped; return imgurl; } function loadImages(image) { if (typeof image.stripNamespace != 'function') { alert('loadImages bad'); } if (getValueOf('popupLoadImagesSequentially')) { return sequentialLoadThisImage(image); } return parallelLoadThisImage(image); } function getImageUrls(image) { if (typeof image.stripNamespace != 'function') { alert('getImageUrls bad'); } var imageUrls=[]; for (var i=0; i<pg.wiki.imageSources.length; ++i) { var url; if (pg.wiki.imageSources[i].thumb) { url=imageThumbURL(image, pg.wiki.imageSources[i].wiki, pg.wiki.imageSources[i].width); } else { url=imageURL(image, pg.wiki.imageSources[i].wiki); } for (var j=0; j<pg.cache.images.length; ++j) { if (url == pg.cache.images[j]) { loadThisImageAtThisUrl(image, url); return null; } } if (url!=null) imageUrls.push(url); } return imageUrls; } // this is probably very wasteful indeed of bandwidth // hey ho function parallelLoadThisImage (image) { if (typeof image.stripNamespace != 'function') { alert('parallelLoadThisImage bad'); } if (!getValueOf('popupImages')) return; if (!isValidImageName(image)) return false; var imageUrls=getImageUrls(image); if (!imageUrls) return null; for (var i=0; i<imageUrls.length; ++i) { var url = imageUrls[i]; pg.misc.imageArray[i]=new Image(); pg.misc.imageArray[i].src=url; } if (pg.timer.image != null) { clearInterval(pg.timer.image); pg.counter.checkImages=0; } pg.misc.gImage=new Title(image.toString()); pg.timer.image=setInterval("checkImages()", 250); return true; } function getValidImageFromWikiText(wikiText) { var imagePage=null; // nb in pg.re.image we're interested in the second bracketed expression // this may change if the regex changes :-( //var match=pg.re.image.exec(wikiText); var matched=null; var match; // strip html comments, used by evil bots :-( var t = removeMatchesUnless(wikiText, RegExp('(<!--[\\s\\S]*?-->)'), 1, RegExp('^<!--[^[]*popup', 'i')); while ( match = pg.re.image.exec(t) ) { // now find a sane image name - exclude templates by seeking { var m = match[2] || match[6]; var pxWidth=match[4]; if ( isValidImageName(m) && (!pxWidth || parseInt(pxWidth,10) >= getValueOf('popupMinImageWidth')) ) { matched=m; break; } } pg.re.image.lastIndex=0; if (!matched) { return null; } return pg.ns.image+':'+upcaseFirst(matched); } function removeMatchesUnless(str, re1, parencount, re2) { var split=str.parenSplit(re1); var c=parencount + 1; for (var i=0; i<split.length; ++i) { if ( i%c === 0 || re2.test(split[i]) ) { continue; } split[i]=''; } return split.join(''); } //</NOLITE> // ENDFILE: images.js // STARTFILE: namespaces.js // Set up namespaces and other non-strings.js localization // (currently that means redirs too) // Put the right namespace list into pg.ns.list, based on pg.wiki.lang // Default to english if nothing seems to fit function setNamespaceList() { var m="Media"; var list = [m, "Special", "Talk", "User", "User talk", "Wikipedia", "Wikipedia talk", "Image", "Image talk", "MediaWiki", "MediaWiki talk", "Template", "Template talk", "Help", "Help talk", "Category", "Category talk", "Portal", "Portal talk"]; var nsIndex = { '': 0, 'Special': 1, 'Talk': 2, 'User': 3, 'User talk': 4, 'Wikipedia': 5, 'Wikipedia talk': 6, 'Image': 7, 'Image talk': 8, 'MediaWiki': 9, 'MediaWiki talk': 10, 'Template': 11, 'Template talk': 12, 'Help': 13, 'Help talk': 14, 'Category': 15, 'Category talk':16, 'Portal': 17, 'Portal talk': 18}; var nsLists = { //<NOLITE> "af": [m, "Spesiaal", "Bespreking", "Gebruiker", "Gebruikerbespreking", "Wikipedia", "Wikipediabespreking", "Beeld", "Beeldbespreking", "MediaWiki", "MediaWikibespreking", "Sjabloon", "Sjabloonbespreking", "Hulp", "Hulpbespreking", "Kategorie", "Kategoriebespreking"], "als": [m, "Spezial", "Diskussion", "Benutzer", "Benutzer Diskussion", "Wikipedia", "Wikipedia Diskussion", "Bild", "Bild Diskussion", "MediaWiki", "MediaWiki Diskussion", "Vorlage", "Vorlage Diskussion", "Hilfe", "Hilfe Diskussion", "Kategorie", "Kategorie Diskussion"], "ar": ["ملف", "خاص", "نقاش", "مستخدم", "نقاش المستخدم", "ويكيبيديا", "نقاش ويكيبيديا", "صورة", "نقاش الصورة", "ميدياويكي", "نقاش ميدياويكي", "Template", "نقاش Template", "مساعدة", "نقاش المساعدة", "تصنيف", "نقاش التصنيف"], "ast": [m, "Especial", "Discusión", "Usuariu", "Usuariu discusión", "Uiquipedia", "Uiquipedia discusión", "Imaxen", "Imaxen discusión", "MediaWiki", "MediaWiki discusión", "Plantilla", "Plantilla discusión", "Ayuda", "Ayuda discusión", "Categoría", "Categoría discusión"], "be": ["Мэдыя", "Спэцыяльныя", "Абмеркаваньне", "Удзельнік", "Гутаркі ўдзельніка", "Вікіпэдыя", "Абмеркаваньне Вікіпэдыя", "Выява", "Абмеркаваньне выявы", "MediaWiki", "Абмеркаваньне MediaWiki", "Шаблён", "Абмеркаваньне шаблёну", "Дапамога", "Абмеркаваньне дапамогі", "Катэгорыя", "Абмеркаваньне катэгорыі"], "bg": ["Медия", "Специални", "Беседа", "Потребител", "Потребител беседа", "Уикипедия", "Уикипедия беседа", "Картинка", "Картинка беседа", "МедияУики", "МедияУики беседа", "Шаблон", "Шаблон беседа", "Помощ", "Помощ беседа", "Категория", "Категория беседа"], "bm": [m, "Special", "Discuter", "Utilisateur", "Discussion Utilisateur", "Wikipedia", "Discussion Wikipedia", "Image", "Discussion Image", "MediaWiki", "Discussion MediaWiki", "Modèle", "Discussion Modèle", "Aide", "Discussion Aide", "Catégorie", "Discussion Catégorie"], "bn": ["বিশেষ", "আলাপ", "ব্যবহারকারী", "ব্যবহারকারী আলাপ", "উইকিপেডিয়া", "উইকিপেডিয়া আলাপ", "চিত্র", "চিত্র আলাপ", "MediaWik i আলাপ", m, "MediaWiki", "Template", "Template talk", "Help", "Help talk", "Category", "Category talk"], "br": [m, "Dibar", "Kaozeal", "Implijer", "Kaozeadenn Implijer", "Wikipedia", "Kaozeadenn Wikipedia", "Skeudenn", "Kaozeadenn Skeudenn", "MediaWiki", "Kaozeadenn MediaWiki", "Patrom", "Kaozeadenn Patrom", "Skoazell", "Kaozeadenn Skoazell", "Rummad", "Kaozeadenn Rummad"], "ca": [m, "Especial", "Discussió", "Usuari", "Usuari Discussió", "Viquipèdia", "Viquipèdia Discussió", "Imatge", "Imatge Discussió", "MediaWiki", "MediaWiki Discussió", "Template", "Template Discussió", "Ajuda", "Ajuda Discussió", "Categoria", "Categoria Discussió"], "cs": ["Média", "Speciální", "Diskuse", "Wikipedista", "Wikipedista diskuse", "Wikipedie", "Wikipedie diskuse", "Soubor", "Soubor diskuse", "MediaWiki", "MediaWiki diskuse", "Šablona", "Šablona diskuse", "Nápověda", "Nápověda diskuse", "Kategorie", "Kategorie diskuse"], "csb": [m, "Specjalnô", "Diskùsëjô", "Brëkòwnik", "Diskùsëjô brëkòwnika", "Wiki", "Diskùsëjô Wiki", "Òbrôzk", "Diskùsëjô òbrôzków", "MediaWiki", "Diskùsëjô MediaWiki", "Szablóna", "Diskùsëjô Szablónë", "Pòmòc", "Diskùsëjô Pòmòcë", "Kategòrëjô", "Diskùsëjô Kategòrëji"], "cv": ["Медиа", "Ятарлă", "Сӳтсе явасси", "Хутшăнакан", "Хутшăнаканăн канашлу страници", "Wikipedia", "0", "Ӳкерчĕк", "Ӳкерчĕке сӳтсе явмалли", "MediaWiki", "MediaWiki сӳтсе явмалли", "Шаблон", "Шаблона сӳтсе явмалли", "Пулăшу", "Пулăшăва сӳтсе явмалли", "Категори", "Категорине сӳтсе явмалли"], "cy": [m, "Arbennig", "Sgwrs", "Defnyddiwr", "Sgwrs Defnyddiwr", "Wicipedia", "Sgwrs Wicipedia", "Delwedd", "Sgwrs Delwedd", "MediaWiki", "Sgwrs MediaWiki", "Nodyn", "Sgwrs Nodyn", "Help", "Help talk", "Category", "Category talk"], "da": [m, "Speciel", "Diskussion", "Bruger", "Brugerdiskussion", "Wikipedia", "Wikipedia-diskussion", "Billede", "Billeddiskussion", "MediaWiki", "MediaWiki-diskussion", "Skabelon", "Skabelondiskussion", "Hjælp", "Hjælpdiskussion", "Kategori", "Kategoridiskussion", "Portal", "Portaldiskussion"], "de": [m, "Spezial", "Diskussion", "Benutzer", "Benutzer Diskussion", "Wikipedia", "Wikipedia Diskussion", "Bild", "Bild Diskussion", "MediaWiki", "MediaWiki Diskussion", "Vorlage", "Vorlage Diskussion", "Hilfe", "Hilfe Diskussion", "Kategorie", "Kategorie Diskussion", "Portal", "Portal Diskussion"], "el": ["Μέσον", "Ειδικό", "Συζήτηση", "Χρήστης", "Συζήτηση χρήστη", "Βικιπαίδεια", "Βικιπαίδεια συζήτηση", "Εικόνα", "Συζήτηση εικόνας", "MediaWiki", "MediaWiki talk", "Πρότυπο", "Συζήτηση προτύπου", "Βοήθεια", "Συζήτηση βοήθειας", "Κατηγορία", "Συζήτηση κατηγορίας"], "eo": [m, "Speciala", "Diskuto", "Vikipediisto", "Vikipediista diskuto", "Vikipedio", "Vikipedio diskuto", "Dosiero", "Dosiera diskuto", "MediaWiki", "MediaWiki diskuto", "Ŝablono", "Ŝablona diskuto", "Helpo", "Helpa diskuto", "Kategorio", "Kategoria diskuto"], "es": [m, "Especial", "Discusión", "Usuario", "Usuario Discusión", "Wikipedia", "Wikipedia Discusión", "Imagen", "Imagen Discusión", "MediaWiki", "MediaWiki Discusión", "Plantilla", "Plantilla Discusión", "Ayuda", "Ayuda Discusión", "Categoría", "Categoría Discusión"], "et": ["Meedia", "Eri", "Arutelu", "Kasutaja", "Kasutaja arutelu", "Vikipeedia", "Vikipeedia arutelu", "Pilt", "Pildi arutelu", "MediaWiki", "MediaWiki arutelu", "Mall", "Malli arutelu", "Juhend", "Juhendi arutelu", "Kategooria", "Kategooria arutelu"], "eu": [m, "Aparteko", "Eztabaida", "Lankide", "Lankide eztabaida", "Wikipedia", "Wikipedia eztabaida", "Irudi", "Irudi eztabaida", "MediaWiki", "MediaWiki eztabaida", "Template", "Template talk", "Help", "Help talk", "Category", "Category talk"], "fa": ["مدیا", "ویژه", "بحث", "کاربر", "بحث کاربر", "ویکی‌پدیا", "بحث ویکی‌پدیا", "تصویر", "بحث تصویر", "مدیاویکی", "بحث مدیاویکی", "الگو", "بحث الگو", "راهنما", "بحث راهنما", "رده", "بحث رده"], "fi": [m, "Toiminnot", "Keskustelu", "Käyttäjä", "Keskustelu käyttäjästä", "Wikipedia", "Keskustelu Wikipediasta", "Kuva", "Keskustelu kuvasta", "MediaWiki", "MediaWiki talk", "Malline", "Keskustelu mallineesta", "Ohje", "Keskustelu ohjeesta", "Luokka", "Keskustelu luokasta"], "fo": ["Miðil", "Serstakur", "Kjak", "Brúkari", "Brúkari kjak", "Wikipedia", "Wikipedia kjak", "Mynd", "Mynd kjak", "MidiaWiki", "MidiaWiki kjak", "Fyrimynd", "Fyrimynd kjak", "Hjálp", "Hjálp kjak", "Bólkur", "Bólkur kjak"], "fr": [m, "Special", "Discuter", "Utilisateur", "Discussion Utilisateur", "Wikipédia", "Discussion Wikipédia", "Image", "Discussion Image", "MediaWiki", "Discussion MediaWiki", "Modèle", "Discussion Modèle", "Aide", "Discussion Aide", "Catégorie", "Discussion Catégorie", "Portail", "Discussion Portail"], "fur": [m, "Speciâl", "Discussion", "Utent", "Discussion utent", "Vichipedie", "Discussion Vichipedie", "Figure", "Discussion figure", "MediaWiki", "Discussion MediaWiki", "Model", "Discussion model", "Jutori", "Discussion jutori", "Categorie", "Discussion categorie"], "fy": [m, "Wiki", "Oerlis", "Meidogger", "Meidogger oerlis", "Wikipedy", "Wikipedy oerlis", "Ofbyld", "Ofbyld oerlis", "MediaWiki", "MediaWiki oerlis", "Berjocht", "Berjocht oerlis", "Hulp", "Hulp oerlis", "Kategory", "Kategory oerlis"], "ga": ["Meán", "Speisialta", "Plé", "Úsáideoir", "Plé úsáideora", "Vicipéid", "Plé Vicipéide", "Íomhá", "Plé íomhá", "MediaWiki", "Plé MediaWiki", "Teimpléad", "Plé teimpléid", "Cabhair", "Plé cabhrach", "Catagóir", "Plé catagóire"], "gu": [m, "Special", "Talk", "User", "User talk", "વિકિપીડિયા", "વિકિપીડિયા talk", "Image", "Image talk", "MediaWiki", "MediaWiki talk", "Template", "Template talk", "Help", "Help talk", "Category", "Category talk"], "he": [m, "מיוחד", "שיחה", "משתמש", "שיחת משתמש", "ויקיפדיה", "שיחת ויקיפדיה", "תמונה", "שיחת תמונה", "MediaWiki", "שיחת MediaWiki", "תבנית", "שיחת תבנית", "עזרה", "שיחת עזרה", "קטגוריה", "שיחת קטגוריה"], "hi": [m, "विशेष", "वार्ता", "सदस्य", "सदस्य वार्ता", "विकिपीडिया", "विकिपीडिया वार्ता", "चित्र", "चित्र वार्ता", "MediaWiki", "MediaWiki talk", "Template", "Template talk", "श्रेणी", "श्रेणी वार्ता", "Help", "Help talk"], "hr": ["Mediji", "Posebno", "Razgovor", "Suradnik", "Razgovor sa suradnikom", "Wikipedia", "Razgovor Wikipedia", "Slika", "Razgovor o slici", "MediaWiki", "MediaWiki razgovor", "Predložak", "Razgovor o predlošku", "Pomoć", "Razgovor o pomoći", "Kategorija", "Razgovor o kategoriji"], "hu": ["Média", "Speciális", "Vita", "User", "User vita", "Wikipédia", "Wikipédia vita", "Kép", "Kép vita", "MediaWiki", "MediaWiki vita", "Sablon", "Sablon vita", "Segítség", "Segítség vita", "Kategória", "Kategória vita"], "ia": [m, "Special", "Discussion", "Usator", "Discussion Usator", "Wikipedia", "Discussion Wikipedia", "Imagine", "Discussion Imagine", "MediaWiki", "Discussion MediaWiki", "Template", "Template talk", "Help", "Help talk", "Category", "Category talk"], "id": [m, "Istimewa", "Bicara", "Pengguna", "Bicara Pengguna", "Wikipedia", "Pembicaraan Wikipedia", "Gambar", "Pembicaraan Gambar", "MediaWiki", "Pembicaraan MediaWiki", "Templat", "Pembicaraan Templat", "Bantuan", "Pembicaraan Bantuan", "Kategori", "Pembicaraan Kategori"], "is": ["Miðill", "Kerfissíða", "Spjall", "Notandi", "Notandaspjall", "Wikipedia", "Wikipediaspjall", "Mynd", "Myndaspjall", "Melding", "Meldingarspjall", "Snið", "Sniðaspjall", "Hjálp", "Hjálparspjall", "Flokkur", "Flokkaspjall"], "it": [m, "Speciale", "Discussione", "Utente", "Discussioni utente", "Wikipedia", "Discussioni Wikipedia", "Immagine", "Discussioni immagine", "MediaWiki", "Discussioni MediaWiki", "Template", "Discussioni template", "Aiuto", "Discussioni aiuto", "Categoria", "Discussioni categoria"], "ja": [m, "特別", "ノート", "利用者", "利用者‐会話", "Wikipedia", "Wikipedia‐ノート", "画像", "画像‐ノート", "MediaWiki", "MediaWiki‐ノート", "Template", "Template‐ノート", "Help", "Help‐ノート", "Category", "Category‐ノート"], "ka": ["მედია", "სპეციალური", "განხილვა", "მომხმარებელი", "მომხმარებელი განხილვა", "ვიკიპედია", "ვიკიპედია განხილვა", "სურათი", "სურათი განხილვა", "მედიავიკი", "მედიავიკი განხილვა", "თარგი", "თარგი განხილვა", "დახმარება", "დახმარება განხილვა", "კატეგორია", "კატეგორია განხილვა"], "ko": [m, "특수기능", "토론", "사용자", "사용자토론", "위키백과", "위키백과토론", "그림", "그림토론", "분류", "분류토론", "MediaWiki", "MediaWiki talk", "Template", "Template talk", "Help", "Help talk"], "ku": ["Medya", "Taybet", "Nîqaş", "Bikarhêner", "Bikarhêner nîqaş", "Wîkîpediya", "Wîkîpediya nîqaş", "Wêne", "Wêne nîqaş", "MediaWiki", "MediaWiki nîqaş", "Şablon", "Şablon nîqaş", "Alîkarî", "Alîkarî nîqaş", "Kategorî", "Kategorî nîqaş"], "la": ["Specialis", "Disputatio", "Usor", "Disputatio Usoris", "Vicipaedia", "Disputatio Vicipaediae", "Imago", "Disputatio Imaginis", "MediaWiki", "Disputatio MediaWiki", "Formula", "Disputatio Formulae", "Auxilium", "Disputatio Auxilii", "Categoria", "Disputatio Categoriae", m], "li": [m, "Speciaal", "Euverlik", "Gebroeker", "Euverlik gebroeker", "Wikipedia", "Euverlik Wikipedia", "Aafbeilding", "Euverlik afbeelding", "MediaWiki", "Euverlik MediaWiki", "Sjabloon", "Euverlik sjabloon", "Help", "Euverlik help", "Kategorie", "Euverlik kategorie"], "lt": ["Medija", "Specialus", "Aptarimas", "Naudotojas", "Naudotojo aptarimas", "Wikipedia", "Wikipedia aptarimas", "Vaizdas", "Vaizdo aptarimas", "MediaWiki", "MediaWiki aptarimas", "Šablonas", "Šablono aptarimas", "Pagalba", "Pagalbos aptarimas", "Kategorija", "Kategorijos aptarimas"], "mk": ["Медија", "Специјални", "Разговор", "Корисник", "Корисник разговор", "Wikipedia", "Wikipedia разговор", "Слика", "Слика разговор", "МедијаВики", "МедијаВики разговор", "Шаблон", "Шаблон разговор", "Помош", "Помош разговор", "Категорија", "Категорија разговор"], "ms": [m, "Istimewa", "Perbualan", "Pengguna", "Perbualan Pengguna", "Wikipedia", "Perbualan Wikipedia", "Imej", "Imej Perbualan", "MediaWiki", "MediaWiki Perbualan", "Template", "Template talk", "Help", "Help talk", "Category", "Category talk"], "mt": [m, "Special", "Talk", "User", "User talk", "Wikipedija", "Wikipedija talk", "Image", "Image talk", "MediaWiki", "MediaWiki talk", "Template", "Template talk", "Help", "Help talk", "Category", "Category talk"], "nap": [m, "Speciale", "Discussione", "Utente", "Discussioni utente", "Wikipedia", "Discussioni Wikipedia", "Immagine", "Discussioni immagine", "MediaWiki", "Discussioni MediaWiki", "Template", "Discussioni template", "Aiuto", "Discussioni aiuto", "Categoria", "Discussioni categoria"], "nds": [m, "Spezial", "Diskuschoon", "Bruker", "Bruker Diskuschoon", "Wikipedia", "Wikipedia Diskuschoon", "Bild", "Bild Diskuschoon", "MediaWiki", "MediaWiki Diskuschoon", "Vörlaag", "Vörlaag Diskuschoon", "Hülp", "Hülp Diskuschoon", "Kategorie", "Kategorie Diskuschoon"], "nl": [m, "Speciaal", "Overleg", "Gebruiker", "Overleg gebruiker", "Wikipedia", "Overleg Wikipedia", "Afbeelding", "Overleg afbeelding", "MediaWiki", "Overleg MediaWiki", "Sjabloon", "Overleg sjabloon", "Help", "Overleg help", "Categorie", "Overleg categorie"], "nn": ["Filpeikar", "Spesial", "Diskusjon", "Brukar", "Brukardiskusjon", "Wikipedia", "Wikipedia-diskusjon", "Fil", "Fildiskusjon", "MediaWiki", "MediaWiki-diskusjon", "Mal", "Maldiskusjon", "Hjelp", "Hjelpdiskusjon", "Kategori", "Kategoridiskusjon"], "no": ["Medium", "Spesial", "Diskusjon", "Bruker", "Brukerdiskusjon", "Wikipedia", "Wikipedia-diskusjon", "Bilde", "Bildediskusjon", "MediaWiki", "MediaWiki-diskusjon", "Mal", "Maldiskusjon", "Hjelp", "Hjelpdiskusjon", "Kategori", "Kategoridiskusjon"], "nv": [m, "Special", "Naaltsoos baa yinísht'į́", "Choinish'įįhí", "Choinish'įįhí baa yinísht'į́", "Wikiibíídiiya", "Wikiibíídiiya baa yinísht'į́", "E'elyaaígíí", "E'elyaaígíí baa yinísht'į́", "MediaWiki", "MediaWiki baa yinísht'į́", "Template", "Template talk", "Aná'álwo'", "Aná'álwo' baa yinísht'į́", "T'ááłáhági át'éego", "T'ááłáhági át'éego baa yinísht'į́"], "oc": ["Especial", "Discutir", "Utilisator", "Discutida Utilisator", "Oiquipedià", "Discutida Oiquipedià", "Image", "Discutida Image", "MediaWiki", "MediaWiki talk", "Template", "Template talk", m, "Help", "Help talk", "Category", "Category talk"], "os": [m, "Сæрмагонд", "Дискусси", "Архайæг", "Архайæджы дискусси", "Wikipedia", "0", "Ныв", "Нывы тыххæй дискусси", "MediaWiki", "Дискусси MediaWiki", "Шаблон", "Шаблоны тыххæй дискусси", "Æххуыс", "Æххуысы тыххæй дискусси", "Категори", "Категорийы тыххæй дискусси"], "pa": ["ਮੀਡੀਆ", "ਖਾਸ", "ਚਰਚਾ", "ਮੈਂਬਰ", "ਮੈਂਬਰ ਚਰਚਾ", "Wikipedia", "Wikipedia ਚਰਚਾ", "ਤਸਵੀਰ", "ਤਸਵੀਰ ਚਰਚਾ", "ਮੀਡੀਆਵਿਕਿ", "ਮੀਡੀਆਵਿਕਿ ਚਰਚਾ", "ਨਮੂਨਾ", "ਨਮੂਨਾ ਚਰਚਾ", "ਮਦਦ", "ਮਦਦ ਚਰਚਾ", "ਸ਼੍ਰੇਣੀ", "ਸ਼੍ਰੇਣੀ ਚਰਚਾ"], "pl": [m, "Specjalna", "Dyskusja", "Wikipedysta", "Dyskusja Wikipedysty", "Wikipedia", "Dyskusja Wikipedii", "Grafika", "Dyskusja grafiki", "MediaWiki", "Dyskusja MediaWiki", "Szablon", "Dyskusja szablonu", "Pomoc", "Dyskusja pomocy", "Kategoria", "Dyskusja kategorii", "Portal", "Dyskusja portalu"], "pt": [m, "Especial", "Discussão", "Usuário", "Usuário Discussão", "Wikipedia", "Wikipedia Discussão", "Imagem", "Imagem Discussão", "MediaWiki", "MediaWiki Discussão", "Predefinição", "Predefinição Discussão", "Ajuda", "Ajuda Discussão", "Categoria", "Categoria Discussão"], "ro": [m, "Special", "Discuţie", "Utilizator", "Discuţie Utilizator", "Wikipedia", "Discuţie Wikipedia", "Imagine", "Discuţie Imagine", "MediaWiki", "Discuţie MediaWiki", "Format", "Discuţie Format", "Ajutor", "Discuţie Ajutor", "Categorie", "Discuţie Categorie"], "ru": ["Медиа", "Служебная", "Обсуждение", "Участник", "Обсуждение участника", "Википедия", "Обсуждение Википедии", "Изображение", "Обсуждение изображения", "MediaWiki", "Обсуждение MediaWiki", "Шаблон", "Обсуждение шаблона", "Справка", "Обсуждение справки", "Категория", "Обсуждение категории"], "sc": ["Speciale", "Contièndha", "Utente", "Utente discussioni", "Wikipedia", "Wikipedia discussioni", "Immàgini", "Immàgini contièndha", m, "MediaWiki", "MediaWiki talk", "Template", "Template talk", "Help", "Help talk", "Category", "Category talk"], "sk": ["Médiá", "Špeciálne", "Diskusia", "Redaktor", "Diskusia s redaktorom", "Wikipédia", "Diskusia k Wikipédii", "Obrázok", "Diskusia k obrázku", "MediaWiki", "Diskusia k MediaWiki", "Šablóna", "Diskusia k šablóne", "Pomoc", "Diskusia k pomoci", "Kategória", "Diskusia ku kategórii"], "sl": [m, "Posebno", "Pogovor", "Uporabnik", "Uporabniški pogovor", "Wikipedija", "Pogovor k Wikipediji", "Slika", "Pogovor k sliki", "MediaWiki", "MediaWiki talk", "Template", "Template talk", "Help", "Help talk", "Category", "Category talk"], "sq": [m, "Speciale", "Diskutim", "Përdoruesi", "Përdoruesi diskutim", "Wikipedia", "Wikipedia diskutim", "Figura", "Figura diskutim", "MediaWiki", "MediaWiki diskutim", "Stampa", "Stampa diskutim", "Ndihmë", "Ndihmë diskutim", "Category", "Category talk"], "sr": [m, "Посебно", "Разговор", "Корисник", "Разговор са корисником", "Википедија", "Разговор о Википедији", "Слика", "Разговор о слици", "МедијаВики", "Разговор о МедијаВикију", "Шаблон", "Разговор о шаблону", "Помоћ", "Разговор о помоћи", "Категорија", "Разговор о категорији", "Портал", "Разговор о порталу"], "sv": [m, "Special", "Diskussion", "Användare", "Användardiskussion", "Wikipedia", "Wikipediadiskussion", "Bild", "Bilddiskussion", "MediaWiki", "MediaWiki diskussion", "Mall", "Malldiskussion", "Hjälp", "Hjälp diskussion", "Kategori", "Kategoridiskussion"], "ta": ["ஊடகம்", "சிறப்பு", "பேச்சு", "பயனர்", "பயனர் பேச்சு", "Wikipedia", "Wikipedia பேச்சு", "படிமம்", "படிமப் பேச்சு", "மீடியாவிக்கி", "மீடியாவிக்கி பேச்சு", "வார்ப்புரு", "வார்ப்புரு பேச்சு", "உதவி", "உதவி பேச்சு", "பகுப்பு", "பகுப்பு பேச்சு"], "th": [m, "พิเศษ", "พูดคุย", "ผู้ใช้", "คุยเกี่ยวกับผู้ใช้", "Wikipedia", "Wikipedia talk", "ภาพ", "คุยเกี่ยวกับภาพ", "MediaWiki", "คุยเกี่ยวกับ MediaWiki", "Template", "Template talk", "Help", "Help talk", "Category", "Category talk"], "tlh": ["Doch", "le'", "ja'chuq", "lo'wI'", "lo'wI' ja'chuq", "wIqIpe'DIya", "wIqIpe'DIya ja'chuq", "nagh beQ", "nagh beQ ja'chuq", "MediaWiki", "MediaWiki ja'chuq", "chen'ay'", "chen'ay' ja'chuq", "QaH", "QaH ja'chuq", "Segh", "Segh ja'chuq"], "tr": [m, "Özel", "Tartışma", "Kullanıcı", "Kullanıcı mesaj", "Vikipedi", "Vikipedi tartışma", "Resim", "Resim tartışma", "MedyaViki", "MedyaViki tartışma", "Şablon", "Şablon tartışma", "Yardım", "Yardım tartışma", "Kategori", "Kategori tartışma"], "tt": [m, "Maxsus", "Bäxäs", "Äğzä", "Äğzä bäxäse", "Wikipedia", "Wikipedia bäxäse", "Räsem", "Räsem bäxäse", "MediaWiki", "MediaWiki bäxäse", "Ürnäk", "Ürnäk bäxäse", "Yärdäm", "Yärdäm bäxäse", "Törkem", "Törkem bäxäse"], "uk": ["Медіа", "Спеціальні", "Обговорення", "Користувач", "Обговорення користувача", "Wikipedia", "Обговорення Wikipedia", "Зображення", "Обговорення зображення", "MediaWiki", "Обговорення MediaWiki", "Шаблон", "Обговорення шаблону", "Довідка", "Обговорення довідки", "Категорія", "Обговорення категорії"], "vi": ["Phương tiện", "Đặc biệt", "Thảo luận", "Thành viên", "Thảo luận Thành viên", "Wikipedia", "Thảo luận Wikipedia", "Hình", "Thảo luận Hình", "MediaWiki", "Thảo luận MediaWiki", "Tiêu bản", "Thảo luận Tiêu bản", "Trợ giúp", "Thảo luận Trợ giúp", "Thể loại", "Thảo luận Thể loại"], "wa": [m, "Sipeciås", "Copene", "Uzeu", "Uzeu copene", "Wikipedia", "Wikipedia copene", "Imådje", "Imådje copene", "MediaWiki", "MediaWiki copene", "Modele", "Modele copene", "Aidance", "Aidance copene", "Categoreye", "Categoreye copene"] //</NOLITE> }; pg.ns.list = nsLists[pg.wiki.lang] || list; pg.ns.index = nsIndex; } function namespaceListToRegex(list) {return RegExp('^('+list.join('|').split(' ').join('[ _]')+'):');}; // function setNamespaceList is ugly as sin, moved to later in the code function setNamespaces() { setNamespaceList(); pg.ns.withTalkList=[null]; // NB root (article) corresponds with this entry, null pg.ns.talkList=[pg.ns.list[2]]; // if the number of namespaces changes then this will have to be changed // maybe the easiest way is to specify the arrays by hand as in the comments following the loop for (var i=3; i+1<pg.ns.list.length; i=i+2) { pg.ns.withTalkList.push(pg.ns.list[i]); pg.ns.talkList.push(pg.ns.list[i+1]); } // ALERT! SILLY HARDCODED VALUES FOLLOW! pg.ns.special = pg.ns.list[pg.ns.index.Special]; pg.ns.image = pg.ns.list[pg.ns.index.Image]; pg.ns.user = pg.ns.list[pg.ns.index.User]; pg.ns.usertalk = pg.ns.list[pg.ns.index['User talk']]; pg.ns.category = pg.ns.list[pg.ns.index.Category]; pg.ns.template = pg.ns.list[pg.ns.index.Template]; pg.ns.nonArticleList=pg.ns.list.slice(0,2).concat(pg.ns.list.slice(2)); } function setRedirs() { var r='redirect'; var R='REDIRECT'; var redirLists={ //<NOLITE> 'ar': [ R, 'تحويل' ], 'be': [ r, 'перанакіраваньне' ], 'bg': [ r, 'пренасочване', 'виж' ], 'bs': [ r, 'Preusmjeri', 'preusmjeri', 'PREUSMJERI' ], 'cs': [ R, 'PŘESMĚRUJ' ], 'cy': [ r, 'ail-cyfeirio' ], 'et': [ r, 'suuna' ], 'ga': [ r, 'athsheoladh' ], 'he': [ R, 'הפניה' ], 'is': [ r, 'tilvísun', 'TILVÍSUN' ], 'mk': [ r, 'пренасочување', 'види' ], 'nds': [ r, 'wiederleiden' ], 'nn': [ r, 'omdiriger' ], 'pt': [ R, 'redir' ], 'ru': [ R, 'ПЕРЕНАПРАВЛЕНИЕ', 'ПЕРЕНАПР' ], 'sk': [ r, 'presmeruj' ], 'sr': [ r, 'Преусмери', 'преусмери', 'ПРЕУСМЕРИ', 'Preusmeri', 'preusmeri', 'PREUSMERI' ], 'tt': [ 'yünältü' ], 'vi': [ r, 'đổi' ] // no comma //</NOLITE> }; var redirList=redirLists[ pg.wiki.lang ] || [r, R]; // Mediawiki is very tolerant about what comes after the #redirect at the start pg.re.redirect=RegExp('^\\s*[#](' + redirList.join('|') + ').*?\\[{2}([^\\|\\]]*)(|[^\\]]*)?\\]{2}\\s*(.*)', 'i'); } function setInterwiki() { if (pg.wiki.wikimedia) { pg.wiki.interwiki='aa|ab|af|ak|als|am|an|ang|ar|arc|as|ast|av|ay|az|ba|be|ber|bg|bh|bi|bm|bn|bdf|bo|br|bs|ca|ce|ceb|ch|cho|chr|chy|co|commons|cr|cs|csb|cu|cv|cy|da|de|dv|dz|el|en|eo|es|et|eu|fa|ff|fi|fiu-vro|fj|fo|fr|fur|fy|ga|gd|gil|gl|gn|got|gu|gv|ha|haw|he|hi|ho|hr|ht|hu|hy|hz|ia|id|ie|ig|ii|ik|io|is|it|iu|ja|jbo|jv|ka|kg|ki|kj|kk|kl|km|kn|ko|kr|ks|ku|kv|kw|ky|la|lad|lan|lb|lg|li|ln|lo|lt|lu|lv|mg|mh|mi|mk|ml|mn|mo|mr|ms|mt|mus|my|na|nah|nap|nb|nd|nds|ne|ng|nl|nn|no|nr|nv|ny|oc|oj|om|or|os|pa|pam|pi|pl|ps|pt|qu|rm|rn|ro|roa-rup|ru|rw|sa|sc|scn|sco|sd|se|sg|sh|si|simple|sk|sl|sm|smg|sn|so|sq|sr|ss|st|su|sv|sw|ta|te|tg|th|ti|tk|tl|tlh|tn|to|tpi|tr|ts|tt|tum|tw|ty|ug|uk|ur|uz|ve|vi|vk|vo|wa|war|wen|wo|xh|yi|yo|za|zh|zh-min-nan|zu'; pg.re.interwiki=RegExp('^'+pg.wiki.interwiki+':'); } else { pg.wiki.interwiki=null; pg.re.interwiki=RegExp('^$'); } } function nsRe(label) { var l=upcaseFirst(label); return nsRegexString(pg.ns.list[pg.ns.index[l]], l); } function nsRegexString(str, extra) { return '(?:' + str + '|' + encodeURI(str) + (extra ? '|' + extra : '') + ')'; } function nsRegex(str, extra) { return RegExp(nsRegexString(str, extra)); } // ENDFILE: namespaces.js // STARTFILE: selpop.js //<NOLITE> function getEditboxSelection() { // see http://www.webgurusforum.com/8/12/0 try { var editbox=document.editform.wpTextbox1; } catch (dang) { return; } // IE, Opera if (document.selection) { return document.selection.createRange().text; } // Mozilla var selStart = editbox.selectionStart; var selEnd = editbox.selectionEnd; return (editbox.value).substring(selStart, selEnd); } function doSelectionPopup() { // popup if the selection looks like [[foo|anything afterwards at all // or [[foo|bar]]text without ']]' // or [[foo|bar]] var sel=getEditboxSelection(); var open=sel.indexOf('[['); var pipe=sel.indexOf('|'); var close=sel.indexOf(']]'); if (open == -1 || ( pipe == -1 && close == -1) ) { return; } if (pipe != -1 && open > pipe || close != -1 && open > close) { return; } if (getValueOf('popupOnEditSelection')=='boxpreview') { return doSeparateSelectionPopup(sel); } var article=new Title(sel.substring(open+2, (pipe < 0) ? close : pipe)).urlString(); if (close > 0 && sel.substring(close+2).indexOf('[[') >= 0) { return; } var a=document.createElement('a'); a.href=pg.wiki.titlebase + article; mouseOverWikiLink2(a); if (a.navpopup) { a.navpopup.addHook(function(){runStopPopupTimer(a.navpopup);}, 'unhide', 'after'); } } function doSeparateSelectionPopup(str) { var div=document.getElementById('selectionPreview'); if (!div) { div = document.createElement('div'); div.id='selectionPreview'; try { var box=document.editform.wpTextbox1; } catch (oopsie) { return; } box.parentNode.insertBefore(div, box); } div.innerHTML=wiki2html(str); div.ranSetupTooltipsAlready = false; popTipsSoonFn('selectionPreview')(); } //</NOLITE> // ENDFILE: selpop.js // STARTFILE: navpopup.js /** @fileoverview Defines two classes: {@link Navpopup} and {@link Mousetracker}. <code>Navpopup</code> describes popups: when they appear, where, what they look like and so on. <code>Mousetracker</code> "captures" the mouse using <code>document.onmousemove</code>. */ /** Creates a new Mousetracker. @constructor @class The Mousetracker class. This monitors mouse movements and manages associated hooks. */ function Mousetracker() { /** Interval to regularly run the hooks anyway, in milliseconds. @type Integer */ this.loopDelay=400; /** Timer for the loop. @type Timer */ this.timer=null; /** Flag - are we switched on? @type Boolean */ this.active=false; /** Flag - are we probably inaccurate, i.e. not reflecting the actual mouse position? */ this.dirty=true; /** Array of hook functions. @private @type Array */ this.hooks=[]; } /** Adds a hook, to be called when we get events. @param {Function} f A function which is called as <code>f(x,y)</code>. It should return <code>true</code> when it wants to be removed, and <code>false</code> otherwise. */ Mousetracker.prototype.addHook = function (f) { this.hooks.push(f); }; /** Runs hooks, passing them the x and y coords of the mouse. Hook functions that return true are passed to {@link Mousetracker#removeHooks} for removal. @private */ Mousetracker.prototype.runHooks = function () { if (!this.hooks || !this.hooks.length) { return; } //log('Mousetracker.runHooks; we got some hooks to run'); var remove=false; var removeObj={}; // this method gets called a LOT - // pre-cache some variables var x=this.x, y=this.y, len = this.hooks.length; for (var i=0; i<len; ++i) { //~ run the hook function, and remove it if it returns true if (this.hooks[i](x, y)===true) { remove=true; removeObj[i]=true; } } if (remove) { this.removeHooks(removeObj); } }; /** Removes hooks. @private @param {Object} removeObj An object whose keys are the index numbers of functions for removal, with values that evaluate to true */ Mousetracker.prototype.removeHooks = function(removeObj) { var newHooks=[]; var len = this.hooks.length; for (var i=0; i<len; ++i) { if (! removeObj[i]) { newHooks.push(this.hooks[i]); } } this.hooks=newHooks; }; /** Event handler for mouse wiggles. We simply grab the event, set x and y and run the hooks. This makes the cpu all hot and bothered :-( @private @param {Event} e Mousemove event */ Mousetracker.prototype.track=function (e) { //~ Apparently this is needed in IE. e = e || window.event; var x, y; if (e) { if (e.pageX) { x=e.pageX; y=e.pageY; } else if (typeof e.clientX!='undefined') { var left, top, docElt = window.document.documentElement; if (docElt) { left=docElt.scrollLeft; } left = left || window.document.body.scrollLeft || window.document.scrollLeft || 0; if (docElt) { top=docElt.scrollTop; } top = top || window.document.body.scrollTop || window.document.scrollTop || 0; x=e.clientX + left; y=e.clientY + top; } else { return; } this.setPosition(x,y); } }; /** Sets the x and y coordinates stored and takes appropriate action, running hooks as appropriate. @param {Integer} x, y Screen coordinates to set */ Mousetracker.prototype.setPosition=function(x,y) { this.x = x; this.y = y; if (this.dirty || this.hooks.length === 0) { this.dirty=false; return; } if (typeof this.lastHook_x != 'number') { this.lastHook_x = -100; this.lastHook_y=-100; } var diff = (this.lastHook_x - x)*(this.lastHook_y - y); diff = (diff >= 0) ? diff : -diff; if ( diff > 1 ) { this.lastHook_x=x; this.lastHook_y=y; if (this.dirty) { this.dirty = false; } else { this.runHooks(); } } } /** Sets things in motion, unless they are already that is, registering an event handler on <code>document.onmousemove</code>. A half-hearted attempt is made to preserve the old event handler if there is one. */ Mousetracker.prototype.enable = function () { if (this.active) { return; } this.active=true; //~ Save the current handler for mousemove events. This isn't too //~ robust, of course. this.savedHandler=document.onmousemove; //~ Gotta save @tt{this} again for the closure, and use apply for //~ the member function. var savedThis=this; document.onmousemove=function (e) {savedThis.track.apply(savedThis, [e]);}; if (this.loopDelay) { this.timer = setInterval(function() { //log('loop delay in mousetracker is working'); savedThis.runHooks();}, this.loopDelay); } }; /** Disables the tracker, removing the event handler. */ Mousetracker.prototype.disable = function () { if (!this.active) { return; } if (typeof this.savedHandler=='function') { document.onmousemove=this.savedHandler; } else { delete document.onmousemove; } if (this.timer) { clearInterval(this.timer); } this.active=false; }; /** Creates a new Navpopup. Gets a UID for the popup and @param init Contructor object. If <code>init.draggable</code> is true or absent, the popup becomes draggable. @constructor @class The Navpopup class. This generates popup hints, and does some management of them. */ function Navpopup(init) { //alert('new Navpopup(init)'); /** UID for each Navpopup instance. Read-only. @type integer */ this.uid=Navpopup.uid++; /** Read-only flag for current visibility of the popup. @type boolean @private */ this.visible=false; /** Flag to be set when we want to cancel a previous request to show the popup in a little while. @private @type boolean */ this.noshow=false; /** Categorised list of hooks. @see #runHooks @see #addHook @private @type Object */ this.hooks={ 'create': [], 'unhide': [], 'hide': [] }; /** list of unique IDs of hook functions, to avoid duplicates @private */ this.hookIds={}; /** List of downloads associated with the popup. @private @type Array */ this.downloads=[]; /** Number of uncompleted downloads. @type integer */ this.pending=null; /** Tolerance in pixels when detecting whether the mouse has left the popup. @type integer */ this.fuzz=5; /** Flag to toggle running {@link #limitHorizontalPosition} to regulate the popup's position. @type boolean */ this.constrained=true; /** The popup width in pixels. @private @type integer */ this.width=0; /** The popup width in pixels. @private @type integer */ this.height=0; /** The main content DIV element. @type HTMLDivElement */ this.mainDiv=null; this.createMainDiv(); // if (!init || typeof init.draggable=='undefined' || init.draggable) { // this.makeDraggable(true); // } } /** A UID for each Navpopup. This constructor property is just a counter. @type integer @private */ Navpopup.uid=0; /** Retrieves the {@link #visible} attribute, indicating whether the popup is currently visible. @type boolean */ Navpopup.prototype.isVisible=function() { return this.visible; }; /** Repositions popup using CSS style. @private @param {integer} x x-coordinate (px) @param {integer} y y-coordinate (px) @param {boolean} noLimitHor Don't call {@link #limitHorizontalPosition} */ Navpopup.prototype.reposition= function (x,y, noLimitHor) { log ('reposition('+x+','+y+','+noLimitHor+')'); if (typeof x != 'undefined' && x!==null) { this.left=x; } if (typeof y != 'undefined' && y!==null) { this.top=y; } if (typeof this.left != 'undefined' && typeof this.top != 'undefined') { this.mainDiv.style.left=this.left + 'px'; this.mainDiv.style.top=this.top + 'px'; } if (!noLimitHor) { this.limitHorizontalPosition(); } //console.log('navpop'+this.uid+' - (left,top)=(' + this.left + ',' + this.top + '), css=(' //+ this.mainDiv.style.left + ',' + this.mainDiv.style.top + ')'); }; /** Prevents popups from being in silly locations. Hopefully. Should not be run if {@link #constrained} is true. @private */ Navpopup.prototype.limitHorizontalPosition=function() { if (!this.constrained || this.tooWide) { return; } this.updateDimensions(); var x=this.left; var w=this.width; var cWidth=document.body.clientWidth; // log('limitHorizontalPosition: x='+x+ // ', this.left=' + this.left + // ', this.width=' + this.width + // ', cWidth=' + cWidth); if ( (x+w) >= cWidth || ( x > 0 && this.maxWidth && this.width < this.maxWidth && this.height > this.width && x > cWidth - this.maxWidth ) ) { // This is a very nasty hack. There has to be a better way! // We find the "natural" width of the div by positioning it at the far left // then reset it so that it should be flush right (well, nearly) this.mainDiv.style.left='-10000px'; this.mainDiv.style.width = this.maxWidth + 'px'; var naturalWidth=parseInt(this.mainDiv.offsetWidth, 10); var newLeft=cWidth - naturalWidth - 1; if (newLeft < 0) { newLeft = 0; this.tooWide=true; } // still unstable for really wide popups? log ('limitHorizontalPosition: moving to ('+newLeft + ','+ this.top+');' + ' naturalWidth=' + naturalWidth + ', clientWidth=' + cWidth); this.reposition(newLeft, null, true); } }; /** Counter indicating the z-order of the "highest" popup. We start the z-index at 1000 so that popups are above everything else on the screen. @private @type integer */ Navpopup.highest=1000; /** Brings popup to the top of the z-order. We increment the {@link #highest} property of the contructor here. @private */ Navpopup.prototype.raise = function () { this.mainDiv.style.zIndex=Navpopup.highest + 1; ++Navpopup.highest; }; /** Shows the popup provided {@link #noshow} is not true. Updates the position, brings the popup to the top of the z-order and unhides it. */ Navpopup.prototype.show = function () { //document.title+='s'; if (this.noshow) { return; } //document.title+='t'; this.reposition(); this.raise(); this.unhide(); }; /** Runs the {@link #show} method in a little while, unless we're already visible. @param {integer} time Delay in milliseconds @see #showSoonIfStable */ Navpopup.prototype.showSoon = function (time) { if (this.visible) { return; } this.noshow=false; //~ We have to save the value of @tt{this} so that the closure below //~ works. var savedThis=this; //this.start_x = Navpopup.tracker.x; //this.start_y = Navpopup.tracker.y; setTimeout(function () { if (Navpopup.tracker.active) { savedThis.reposition.apply(savedThis, [Navpopup.tracker.x + 2, Navpopup.tracker.y + 2]); } //~ Have to use apply to invoke his member function here savedThis.show.apply(savedThis, []); }, time); }; /** Checks to see if the mouse pointer has stabilised (checking every <code>time</code>/2 milliseconds) and runs the {@link #show} method if it has. This method makes {@link #showSoon} redundant. @param {integer} time The minimum time (ms) before the popup may be shown. */ Navpopup.prototype.showSoonIfStable = function (time) { log ('showSoonIfStable, time='+time); if (this.visible) { return; } this.noshow = false; //~ initialize these variables so that we never run @tt{show} after //~ just half the time this.stable_x = -10000; this.stable_y = -10000; var stableShow = function() { log('stableShow called'); var new_x = Navpopup.tracker.x, new_y = Navpopup.tracker.y; var dx = savedThis.stable_x - new_x, dy = savedThis.stable_y - new_y; var fuzz2 = 0; // savedThis.fuzz * savedThis.fuzz; //document.title += '[' + [savedThis.stable_x,new_x, savedThis.stable_y,new_y, dx, dy, fuzz2].join(',') + '] '; if ( dx * dx <= fuzz2 && dy * dy <= fuzz2 ) { log ('mouse is stable'); clearInterval(savedThis.showSoonStableTimer); savedThis.reposition.apply(savedThis, [new_x + 2, new_y + 2]); savedThis.show.apply(savedThis, []); return; } savedThis.stable_x = new_x; savedThis.stable_y = new_y; }; var savedThis = this; this.showSoonStableTimer = setInterval(stableShow, time/2); }; /** Makes the popup unhidable until we call {@link #unstick}. */ Navpopup.prototype.stick=function() { this.noshow=false; this.sticky=true; }; /** Allows the popup to be hidden. */ Navpopup.prototype.unstick=function() { this.sticky=false; }; /** Sets the {@link #noshow} flag and hides the popup. This should be called when the mouse leaves the link before (or after) it's actually been displayed. */ Navpopup.prototype.banish = function () { log ('banish called'); // hide and prevent showing with showSoon in the future this.noshow=true; if (this.showSoonStableTimer) { log('clearing showSoonStableTimer'); clearInterval(this.showSoonStableTimer); } this.hide(); }; /** Runs hooks added with {@link #addHook}. @private @param {String} key Key name of the {@link #hooks} array - one of 'create', 'unhide', 'hide' @param {String} when Controls exactly when the hook is run: either 'before' or 'after' */ Navpopup.prototype.runHooks = function (key, when) { if (!this.hooks[key]) { return; } var keyHooks=this.hooks[key]; var len=keyHooks.length; for (var i=0; i< len; ++i) { if (keyHooks[i] && keyHooks[i].when == when) { if (keyHooks[i].hook.apply(this, [])) { // remove the hook if (keyHooks[i].hookId) { delete this.hookIds[keyHooks[i].hookId]; } keyHooks[i]=null; } } } }; /** Adds a hook to the popup. Hook functions are run with <code>this</code> set to refer to the Navpopup instance, and no arguments. @param {Function} hook The hook function. Functions that return true are deleted. @param {String} key Key name of the {@link #hooks} array - one of 'create', 'unhide', 'hide' @param {String} when Controls exactly when the hook is run: either 'before' or 'after' @param {String} uid A truthy string identifying the hook function; if it matches another hook in this position, it won't be added again. */ Navpopup.prototype.addHook = function ( hook, key, when, uid ) { when = when || 'after'; if (!this.hooks[key]) { return; } // if uid is specified, don't add duplicates var hookId=null; if (uid) { hookId=[key,when,uid].join('|'); if (this.hookIds[hookId]) { return; } this.hookIds[hookId]=true; } this.hooks[key].push( {hook: hook, when: when, hookId: hookId} ); }; /** Creates the main DIV element, which contains all the actual popup content. Runs hooks with key 'create'. @private */ Navpopup.prototype.createMainDiv = function () { if (this.mainDiv) { return; } this.runHooks('create', 'before'); var mainDiv=document.createElement('div'); var savedThis=this; mainDiv.onclick=function(e) {savedThis.onclickHandler(e);}; mainDiv.className=(this.className) ? this.className : 'navpopup_maindiv'; mainDiv.id=mainDiv.className + this.uid; mainDiv.style.position='absolute'; mainDiv.style.display='none'; mainDiv.className='navpopup'; // easy access to javascript object through DOM functions mainDiv.navpopup=this; this.mainDiv=mainDiv; document.body.appendChild(mainDiv); this.runHooks('create', 'after'); }; /** Calls the {@link #raise} method. @private */ Navpopup.prototype.onclickHandler=function(e) { this.raise(); }; /** Makes the popup draggable, using a {@link Drag} object. @private */ Navpopup.prototype.makeDraggable=function(handleName) { if (!this.mainDiv) { this.createMainDiv(); } var drag=new Drag(); if (!handleName) { drag.startCondition=function(e) { try { if (!e.shiftKey) { return false; } } catch (err) { return false; } return true; }; } var dragHandle = document.getElementById(handleName) || this.mainDiv; var np=this; drag.endHook=function(x,y) { Navpopup.tracker.dirty=true; np.reposition(x,y); }; drag.init(dragHandle,this.mainDiv); }; /** Hides the popup using CSS. Runs hooks with key 'hide'. Sets {@link #visible} appropriately. {@link #banish} should be called externally instead of this method. @private */ Navpopup.prototype.hide = function () { this.runHooks('hide', 'before'); this.abortDownloads(); if (this.sticky) { return; } if (typeof this.visible != 'undefined' && this.visible) { this.mainDiv.style.display='none'; this.visible=false; } this.runHooks('hide', 'after'); }; /** Shows the popup using CSS. Runs hooks with key 'unhide'. Sets {@link #visible} appropriately. {@link #show} should be called externally instead of this method. @private */ Navpopup.prototype.unhide = function () { this.runHooks('unhide', 'before'); if (typeof this.visible != 'undefined' && !this.visible) { this.mainDiv.style.display='inline'; this.visible=true; } this.runHooks('unhide', 'after'); }; /** Sets the <code>innerHTML</code> attribute of the main div containing the popup content. @param {String} html The HTML to set. */ Navpopup.prototype.setInnerHTML = function (html) { this.mainDiv.innerHTML = html; }; /** Updates the {@link #width} and {@link #height} attributes with the CSS properties. @private */ Navpopup.prototype.updateDimensions = function () { this.width=parseInt(this.mainDiv.offsetWidth, 10); this.height=parseInt(this.mainDiv.offsetHeight, 10); }; /** Checks if the point (x,y) is within {@link #fuzz} of the {@link #mainDiv}. @param {integer} x x-coordinate (px) @param {integer} y y-coordinate (px) @type boolean */ Navpopup.prototype.isWithin = function(x,y) { //~ If we're not even visible, no point should be considered as //~ being within the popup. if (!this.visible) { return false; } this.updateDimensions(); var fuzz=this.fuzz || 0; //~ Use a simple box metric here. return (x+fuzz >= this.left && x-fuzz <= this.left + this.width && y+fuzz >= this.top && y-fuzz <= this.top + this.height); }; /** Adds a download to {@link #downloads}. @param {Downloader} download */ Navpopup.prototype.addDownload=function(download) { if (!download) { return; } this.downloads.push(download); }; /** Aborts the downloads listed in {@link #downloads}. @see Downloader#abort */ Navpopup.prototype.abortDownloads=function() { for(var i=0; i<this.downloads.length; ++i) { var d=this.downloads[i]; if (d && d.abort) { d.abort(); } } this.downloads=[]; }; /** A {@link Mousetracker} instance which is a property of the constructor (pseudo-global). */ Navpopup.tracker=new Mousetracker(); // ENDFILE: navpopup.js // STARTFILE: diff.js //<NOLITE> /* * Javascript Diff Algorithm * By John Resig (http://ejohn.org/) and [[:en:User:Lupin]] * * More Info: * http://ejohn.org/projects/javascript-diff-algorithm/ */ function delFmt(x) { if (!x.length) { return ''; } return "<del class='popupDiff'>" + x.join('').split('\n').join('&para;\n') +"</del>"; } function insFmt(x) { if (!x.length) { return ''; } return "<ins class='popupDiff'>" + x.join('').split('\n').join('&para;\n') +"</ins>"; } function countCrossings(a, b, i, eject) { // count the crossings on the edge starting at b[i] if (!b[i].row && b[i].row !== 0) { return -1; } var count=0; for (var j=0; j<a.length; ++j) { if (!a[j].row && a[j].row !== 0) { continue; } if ( (j-b[i].row)*(i-a[j].row) > 0) { if(eject) { return true; } count++; } } return count; } function shortenDiffString(str, context) { var re=RegExp('(<del[\\s\\S]*?</del>|<ins[\\s\\S]*?</ins>)'); var splitted=str.parenSplit(re); var ret=['']; for (var i=0; i<splitted.length; i+=2) { if (splitted[i].length < 2*context) { ret[ret.length-1] += splitted[i]; if (i+1<splitted.length) { ret[ret.length-1] += splitted[i+1]; } continue; } else { if (i > 0) { ret[ret.length-1] += splitted[i].substring(0,context); } if (i+1 < splitted.length) { ret.push(splitted[i].substring(splitted[i].length-context) + splitted[i+1]); } } } while (ret.length > 0 && !ret[0]) { ret = ret.slice(1); } return ret; } function diffString( o, n, simpleSplit ) { var splitRe=RegExp('([[]{2}|[\]]{2}|[{]{2,3}|[}]{2,3}|[|]|=|[*:]+|\\s|\\b)'); o=o.entify(); n=n.entify(); var out, i; if (simpleSplit) { out = diff( o.split(/\b/), n.split(/\b/) ); } else { out = diff( o.parenSplit(splitRe), n.parenSplit(splitRe) ); } var str = ""; var acc=[]; // accumulator for prettier output // crossing pairings -- eg 'A B' vs 'B A' -- cause problems, so let's iron them out // this doesn't always do things optimally but it should be fast enough var maxOutputPair=0; for (i=0; i<out.n.length; ++i) { if ( out.n[i].paired ) { if( maxOutputPair > out.n[i].row ) { // tangle - delete pairing out.o[ out.n[i].row ]=out.o[ out.n[i].row ].text; out.n[i]=out.n[i].text; } if (maxOutputPair < out.n[i].row) { maxOutputPair = out.n[i].row; } } } // output the stuff preceding the first paired old line for (i=0; i<out.o.length && !out.o[i].paired; ++i) { acc.push( out.o[i] ); } str += delFmt(acc); acc=[]; // main loop for ( i = 0; i < out.n.length; ++i ) { // output unpaired new "lines" while ( i < out.n.length && !out.n[i].paired ) { acc.push( out.n[i++] ); } str += insFmt(acc); acc=[]; if ( i < out.n.length ) { // this new "line" is paired with the (out.n[i].row)th old "line" str += out.n[i].text; // output unpaired old rows starting after this new line's partner var m = out.n[i].row + 1; while ( m < out.o.length && !out.o[m].paired ) { acc.push ( out.o[m++] ); } str += delFmt(acc); acc=[]; } } return str; } // see http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Object // FIXME: use obj.hasOwnProperty instead of this kludge! window.jsReservedProperties=RegExp('^(constructor|prototype|__((define|lookup)[GS]etter)__' + '|eval|hasOwnProperty|propertyIsEnumerable' + '|to(Source|String|LocaleString)|(un)?watch|valueOf)$'); function diffBugAlert(word) { if (!diffBugAlert.list[word]) { diffBugAlert.list[word]=1; alert('Bad word: '+word+'\n\nPlease report this bug.'); } } diffBugAlert.list={}; function makeDiffHashtable(src) { var ret={}; for ( var i = 0; i < src.length; i++ ) { if ( jsReservedProperties.test(src[i]) ) { src[i] += '<!-- -->'; } if ( !ret[ src[i] ] ) { ret[ src[i] ] = []; } try { ret[ src[i] ].push( i ); } catch (err) { diffBugAlert(src[i]); } } return ret; } function diff( o, n ) { // pass 1: make hashtable ns with new rows as keys var ns = makeDiffHashtable(n); // pass 2: make hashtable os with old rows as keys var os = makeDiffHashtable(o); // pass 3: pair unique new rows and matching unique old rows var i; for ( i in ns ) { if ( ns[i].length == 1 && os[i] && os[i].length == 1 ) { n[ ns[i][0] ] = { text: n[ ns[i][0] ], row: os[i][0], paired: true }; o[ os[i][0] ] = { text: o[ os[i][0] ], row: ns[i][0], paired: true }; } } // pass 4: pair matching rows immediately following paired rows (not necessarily unique) for ( i = 0; i < n.length - 1; i++ ) { if ( n[i].paired && ! n[i+1].paired && n[i].row + 1 < o.length && ! o[ n[i].row + 1 ].paired && n[i+1] == o[ n[i].row + 1 ] ) { n[i+1] = { text: n[i+1], row: n[i].row + 1, paired: true }; o[n[i].row+1] = { text: o[n[i].row+1], row: i + 1, paired: true }; } } // pass 5: pair matching rows immediately preceding paired rows (not necessarily unique) for ( i = n.length - 1; i > 0; i-- ) { if ( n[i].paired && ! n[i-1].paired && n[i].row > 0 && ! o[ n[i].row - 1 ].paired && n[i-1] == o[ n[i].row - 1 ] ) { n[i-1] = { text: n[i-1], row: n[i].row - 1, paired: true }; o[n[i].row-1] = { text: o[n[i].row-1], row: i - 1, paired: true }; } } return { o: o, n: n }; } //</NOLITE> // ENDFILE: diff.js // STARTFILE: init.js function setSiteInfo() { if (window.popupLocalDebug) { pg.wiki.hostname = 'en.wikipedia.org'; } else { pg.wiki.hostname = location.hostname; // use in preference to location.hostname for flexibility (?) } pg.wiki.wikimedia=RegExp('(wiki([pm]edia|source|books|news|quote|versity)|wiktionary)[.]org').test(pg.wiki.hostname); pg.wiki.wikia=RegExp('[.]wikia[.]com$', 'i').test(pg.wiki.hostname); pg.wiki.isLocal=RegExp('^localhost').test(pg.wiki.hostname); pg.wiki.commons=( pg.wiki.wikimedia && pg.wiki.hostname != 'commons.wikimedia.org') ? 'commons.wikimedia.org' : null; pg.wiki.commonslang = pg.wiki.commons ? pg.wiki.commons.split('.')[0] : null; pg.wiki.lang = pg.wiki.hostname.split('.')[0]; // toolDbName needs pg.wiki.lang and pg.wiki.hostname window.toolDbName && (pg.wiki.userNameCookie=toolDbName(true) + 'UserName'); pg.wiki.prePath=''; if (pg.wiki.hostname == 'secure.wikimedia.org') { var s=document.location.href.split('/'); pg.wiki.prePath=s.slice(3,5).join('/'); pg.wiki.lang=s[4]; } var port = location.port ? ':' + location.port : ''; pg.wiki.sitebase = joinPath([pg.wiki.hostname + port, pg.wiki.prePath]); } function getArticlePath() { if (isFunction(window.siteArticlePath)) { return siteArticlePath(); } return 'wiki'; } function getBotInterfacePath() { if (isFunction(window.siteBotInterfacePath)) { return siteBotInterfacePath(); } var botInterfacePath = pg.wiki.articlePath.replace(/\/index[.]php$/, ''); if (pg.wiki.wikimedia) { botInterfacePath = 'w'; } // as in http://some.thing.com/w/index.php?title=foo else if (pg.wiki.wikia) { botInterfacePath = ''; } return botInterfacePath; } function setTitleBase() { var protocol = ( window.popupLocalDebug ? 'http:' : location.protocol ); pg.wiki.articlePath = getArticlePath(); // as in http://some.thing.com/wiki/Article pg.wiki.botInterfacePath = getBotInterfacePath(); // default mediawiki setting is paths like http://some.thing.com/articlePath/index.php?title=foo var titletail = joinPath([pg.wiki.botInterfacePath, 'index.php?title=']); var titletail2 = joinPath([pg.wiki.botInterfacePath, 'wiki.phtml?title=']); // other sites may need to add code here to set titletail depending on how their urls work pg.wiki.titlebase = protocol + '//' + joinPath([pg.wiki.sitebase, titletail]); pg.wiki.titlebase2 = protocol + '//' + joinPath([pg.wiki.sitebase, titletail2]); pg.wiki.wikibase = protocol + '//' + joinPath([pg.wiki.sitebase, pg.wiki.botInterfacePath]); pg.wiki.articlebase = protocol + '//' + joinPath([pg.wiki.sitebase, pg.wiki.articlePath]); pg.re.basenames = RegExp( '^(' + map( literalizeRegex, [ pg.wiki.titlebase, pg.wiki.titlebase2, pg.wiki.articlebase ]).join('|') + ')' ); } ////////////////////////////////////////////////// // Global regexps function setMainRegex() { var reStart='[^:]*://'; var preTitles = joinPath([literalizeRegex(pg.wiki.botInterfacePath), '(?:index[.]php|wiki[.]phtml)[?]title=']); // slightly ugly hack when pg.wiki.articlePath is empty preTitles += '|' + literalizeRegex( ( pg.wiki.articlePath ? pg.wiki.articlePath + '/' : '')); var reEnd='/(' + preTitles + ')([^&?#]*)[^#]*(?:#(.+))?'; pg.re.main = RegExp(reStart + literalizeRegex(pg.wiki.sitebase) + reEnd); } function setRegexps() { setMainRegex(); var sp=nsRe('Special'); pg.re.urlNoPopup=RegExp('((title=|/)' + sp + '(?:%3A|:)|section=[0-9])') ; pg.re.contribs =RegExp('(title=|/)' + sp + '(?:%3A|:)Contributions' + '(&target=|/|/' + pg.ns.user+':)(.*)') ; pg.re.email =RegExp('(title=|/)' + sp + '(?:%3A|:)Emailuser' + '(&target=|/|/(?:' + pg.ns.user+':)?)(.*)') ; pg.re.backlinks =RegExp('(title=|/)' + sp + '(?:%3A|:)Whatlinkshere' + '(&target=|/)([^&]*)'); //<NOLITE> var im=nsRe('Image'); // note: tries to get images in infobox templates too, e.g. movie pages, album pages etc // (^|\[\[)image: *([^|\]]*[^|\] ]) * // (^|\[\[)image: *([^|\]]*[^|\] ])([^0-9\]]*([0-9]+) *px)? // $4 = 120 as in 120px pg.re.image = RegExp('(^|\\[\\[)' + im + ': *([^|\\]]*[^|\\] ])' + '([^0-9\\]]*([0-9]+) *px)?|(?:\\n *[|]?|[|]) *' + '(' + getValueOf('popupImageVarsRegexp') + ')' + ' *= *(?:\\[\\[ *)?(?:' + im + ':)?' + '([^|]*?)(?:\\]\\])? *[|]? *\\n', 'img') ; pg.re.imageBracketCount = 6; pg.re.category = RegExp('\\[\\[' +nsRe('Category') + ': *([^|\\]]*[^|\\] ]) *', 'i'); pg.re.categoryBracketCount = 1; pg.re.ipUser=RegExp('('+nsRe('User')+':)?' + '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}' + '(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])'); pg.re.stub= RegExp(getValueOf('popupStubRegexp'), 'im'); pg.re.disambig=RegExp(getValueOf('popupDabRegexp'), 'im'); //</NOLITE> // FIXME replace with general parameter parsing function, this is daft pg.re.oldid=RegExp('[?&]oldid=([^&]*)'); pg.re.diff=RegExp('[?&]diff=([^&]*)'); } //<NOLITE> ////////////////////////////////////////////////// // Image sources function setImageSources() { pg.wiki.imageSources=[]; // frequently seen thumbs pg.wiki.imageSources.push( {wiki: pg.wiki.hostname, thumb: true, width: 180}, // default {wiki: pg.wiki.hostname, thumb: true, width: 120} // gallery ); // frequently seen thumbs on commons if (pg.wiki.commons) { pg.wiki.imageSources.push( {wiki: pg.wiki.commons, thumb: true, width: 180}, {wiki: pg.wiki.commons, thumb: true, width: 120} ); } // unusual thumb sizes and full-size pg.wiki.imageSources.push( {wiki: pg.wiki.hostname, thumb: true, width: 200}, // common? {wiki: pg.wiki.hostname, thumb: true, width: 250}, // common? {wiki: pg.wiki.hostname, thumb: true, width: 300}, {wiki: pg.wiki.hostname, thumb: true, width: 210}, {wiki: pg.wiki.hostname, thumb: true, width: 230}, {wiki: pg.wiki.hostname, thumb: false, width: 0} // no comma ); // full-size on commons if (pg.wiki.commons) { pg.wiki.imageSources.push({wiki: pg.wiki.commons, thumb: false, width: 0}); } } //</NOLITE> ////////////////////////////////////////////////// // miscellany function setupCache() { // page caching pg.cache.pages = []; pg.cache.images = []; // global array for 404'ed image urls pg.cache.badImageUrls=[]; } function setMisc() { pg.current.link=null; pg.current.links=[]; pg.current.linksHash={}; // downloading images are put here pg.misc.imageArray=[]; setupCache(); // FIXME what is this for? pg.misc.gImage=null; // global for image // check to see if images are done with this timer pg.timer.image=null; // These are for checkImages() pg.counter.checkImages=0; pg.timer.checkImages=null; pg.timer.checkPopupPosition=null; pg.counter.loop=0; // ids change with each popup: popupImage0, popupImage1 etc pg.idNumber=0; // for myDecodeURI pg.misc.decodeExtras = [ {from: '%2C', to: ',' }, {from: '_', to: ' ' }, {from: '%24', to: '$'}, {from: '%26', to: '&' } // no , ]; } function leadingInteger(s){ var n=s.match(/^(\d*)/)[1]; if (n) { return +n; } return null; } function setBrowserHacks() { var useOriginal=false; // browser-specific hacks if (typeof window.opera != 'undefined') { //if (leadingInteger(opera.version()) < 9) { useOriginal=true; } // v9 beta still seems to have buggy css setDefault('popupNavLinkSeparator', ' &#183; '); } else if (navigator.appName=='Konqueror') { setDefault('popupNavLinkSeparator', ' &bull; '); pg.flag.isKonq=true; } else if ( navigator.vendor && navigator.vendor.toLowerCase().indexOf('apple computer')===0) { pg.flag.isSafari=true; var webkit=+navigator.userAgent.replace(RegExp('^.*AppleWebKit[/](\\d+).*', 'i'), '$1'); if (webkit < 420) { useOriginal=true; } } else if (navigator.appName.indexOf("Microsoft")!=-1) { setDefault('popupNavLinkSeparator', ' &#183; '); useOriginal=true; var ver=+navigator.userAgent.replace(RegExp('^.*MSIE (\\d+).*'), '$1'); pg.flag.isIE=true; pg.flag.IEVersion=ver; } if (pg.flag.isIE && pg.flag.IEVersion < 7 || pg.flag.isKonq || pg.flag.isSafari) { pg.flag.linksLikeIE6=true; } if (useOriginal && pg.structures.original) { setDefault('popupStructure','original'); } } function setupPopups() { // NB translatable strings should be set up first (strings.js) // basics setupDebugging(); setSiteInfo(); setTitleBase(); setOptions(); // see options.js // namespaces etc setNamespaces(); setInterwiki(); // regexps setRegexps(); setRedirs(); // other stuff window.setImageSources && setImageSources(); setBrowserHacks(); setMisc(); setupLivePreview(); // main deal here setupTooltips(); Navpopup.tracker.enable(); setupPopups.completed = true; } // ENDFILE: init.js // STARTFILE: navlinks.js //<NOLITE> ////////////////////////////////////////////////// // navlinks... let the fun begin // function defaultNavlinkSpec() { var str=''; str += '<b><<mainlink|shortcut= >></b>'; if (getValueOf('popupLastEditLink')) { str += '*<<lastEdit|shortcut=/>>|<<lastContrib>>|<<sinceMe>>if(oldid){|<<oldEdit>>|<<diffCur>>}'; } // user links // contribs - log - count - email - block // count only if applicable; block only if popupAdminLinks str += 'if(user){<br><<contribs|shortcut=c>>*<<userlog|shortcut=L|log>>'; str+='if(ipuser){*<<arin>>}if(wikimedia){*<<count|shortcut=#>>}'; str+='if(ipuser){}else{*<<email|shortcut=E>>}if(admin){*<<block|shortcut=b>>|<<blocklog|log>>}}'; // editing links // talkpage -> edit|new - history - un|watch - article|edit // other page -> edit - history - un|watch - talk|edit|new var editstr='<<edit|shortcut=e>>'; var editOldidStr='if(oldid){<<editOld|shortcut=e>>|<<revert|shortcut=v|rv>>|<<edit|cur>>}else{' + editstr + '}' var historystr='<<history|shortcut=h>>if(mainspace_en){|<<editors|shortcut=E|>>}'; var watchstr='<<unwatch|unwatchShort>>|<<watch|shortcut=w|watchThingy>>'; str+='<br>if(talk){' + editOldidStr+'|<<new|shortcut=+>>' + '*' + historystr+'*'+watchstr + '*' + '<b><<article|shortcut=a>></b>|<<editArticle|edit>>' + '}else{' + // not a talk page editOldidStr + '*' + historystr + '*' + watchstr + '*' + '<b><<talk|shortcut=t>></b>|<<editTalk|edit>>|<<newTalk|shortcut=+|new>>' + '}'; // misc links str += '<br><<whatLinksHere|shortcut=l>>*<<relatedChanges|shortcut=r>>*<<move|shortcut=m>>'; // admin links str += 'if(admin){<br><<unprotect|unprotectShort>>|<<protect|shortcut=p>>|<<protectlog|log>>*' + '<<undelete|undeleteShort>>|<<delete|shortcut=d>>|<<deletelog|log>>}'; return str; } function navLinksHTML (article, hint, params) { //oldid, rcid) { var str = '<span class="popupNavLinks">' + defaultNavlinkSpec() + '</span>'; // BAM return navlinkStringToHTML(str, article, params); } function expandConditionalNavlinkString(s,article,z,recursionCount) { var oldid=z.oldid, rcid=z.rcid, diff=z.diff; // nested conditionals (up to 10 deep) are ok, hopefully! (work from the inside out) if (typeof recursionCount!=typeof 0) { recursionCount=0; } var conditionalSplitRegex=RegExp( //(1 if \\( (2 2) \\) {(3 3)} (4 else {(5 5)} 4)1) '(;?\\s*if\\s*\\(\\s*([\\w]*)\\s*\\)\\s*\\{([^{}]*)\\}(\\s*else\\s*\\{([^{}]*?)\\}|))', 'i'); var splitted=s.parenSplit(conditionalSplitRegex); // $1: whole conditional // $2: test condition // $3: true expansion // $4: else clause (possibly empty) // $5: false expansion (possibly null) var numParens=5; var ret = splitted[0]; for (var i=1; i<splitted.length; i=i+numParens+1) { var testString=splitted[i+2-1]; var trueString=splitted[i+3-1]; var falseString=splitted[i+5-1]; if (typeof falseString=='undefined' || !falseString) { falseString=''; } var testResult=null; switch (testString) { case 'user': testResult=(article.userName())?true:false; break; case 'talk': testResult=(article.talkPage())?false:true; // talkPage converts _articles_ to talkPages break; case 'admin': testResult=getValueOf('popupAdminLinks')?true:false; break; case 'oldid': testResult=(typeof oldid != 'undefined' && oldid)?true:false; break; case 'rcid': testResult=(typeof rcid != 'undefined' && rcid)?true:false; break; case 'ipuser': testResult=(article.isIpUser())?true:false; break; case 'mainspace_en': testResult=isInMainNamespace(article) && pg.wiki.hostname=='en.wikipedia.org'; break; case 'wikimedia': testResult=(pg.wiki.wikimedia) ? true : false; break; case 'diff': testResult=(typeof diff != 'undefined' && diff)?true:false; break; } switch(testResult) { case null: ret+=splitted[i]; break; case true: ret+=trueString; break; case false: ret+=falseString; break; } // append non-conditional string ret += splitted[i+numParens]; } if (conditionalSplitRegex.test(ret) && recursionCount < 10) { return expandConditionalNavlinkString(ret,article,z,recursionCount+1); } return ret; } function navlinkStringToArray(s, article, params) { s=expandConditionalNavlinkString(s,article,params); var splitted=s.parenSplit(RegExp('<<(.*?)>>')); var ret=[]; for (var i=0; i<splitted.length; ++i) { if (i%2) { // i odd, so s is a tag var t=new navlinkTag(); var ss=splitted[i].split('|'); t.id=ss[0]; for (var j=1; j<ss.length; ++j) { var sss=ss[j].split('='); if (sss.length>1) { t[sss[0]]=sss[1]; } else { // no assignment (no "="), so treat this as a title (overwriting the last one) t.text=popupString(sss[0]); } } t.article=article; var oldid=params.oldid, rcid=params.rcid, diff=params.diff; if (typeof oldid != 'undefined' && oldid != null) { t.oldid=oldid; } if (typeof rcid != 'undefined' && rcid != null) { t.rcid=rcid; } if (typeof diff != 'undefined' && diff != null) { t.diff=diff; } if (!t.text && t.id != 'mainlink') { t.text=popupString(t.id); } ret.push(t); } else { // plain HTML ret.push(splitted[i]); } } return ret; } function navlinkSubstituteHTML(s) { return s.split('*').join(getValueOf('popupNavLinkSeparator')) .split('<menurow>').join('<li class="popup_menu_row">') .split('</menurow>').join('</li>') .split('<menu>').join('<ul class="popup_menu">') .split('</menu>').join('</ul>'); } function navlinkDepth(magic,s) { return s.split('<' + magic + '>').length - s.split('</' + magic + '>').length; } // navlinkString: * becomes the separator // <<foo|bar=baz|fubar>> becomes a foo-link with attribute bar='baz' // and visible text 'fubar' // if(test){...} and if(test){...}else{...} work too (nested ok) function navlinkStringToHTML(s,article,params) { //limitAlert(navlinkStringToHTML, 5, 'navlinkStringToHTML\n' + article + '\n' + (typeof article)); var p=navlinkStringToArray(s,article,params); var html=''; var menudepth = 0; // nested menus not currently allowed, but doesn't do any harm to code for it var menurowdepth = 0; var wrapping = null; for (var i=0; i<p.length; ++i) { if (typeof p[i] == typeof '') { html+=navlinkSubstituteHTML(p[i]); menudepth += navlinkDepth('menu', p[i]); menurowdepth += navlinkDepth('menurow', p[i]); // if (menudepth === 0) { // tagType='span'; // } else if (menurowdepth === 0) { // tagType='li'; // } else { // tagType = null; // } } else if (typeof p[i].type != 'undefined' && p[i].type=='navlinkTag') { if (menudepth > 0 && menurowdepth === 0) { html += '<li class="popup_menu_item">' + p[i].html() + '</li>'; } else { html+=p[i].html(); } } } return html; } function navlinkTag() { this.type='navlinkTag'; } navlinkTag.prototype.html=function () { this.getNewWin(); this.getPrintFunction(); var html=''; var opening, closing; var tagType='span'; if (!tagType) { opening = ''; closing = ''; } else { opening = '<' + tagType + ' class="popup_' + this.id + '">'; closing = '</' + tagType + '>'; } if (typeof this.print!='function') { errlog ('Oh dear - invalid print function for a navlinkTag, id='+this.id); } else { html=this.print(this); if (typeof html != typeof '') {html='';} else if (typeof this.shortcut!='undefined') html=addPopupShortcut(html, this.shortcut); } return opening + html + closing; }; navlinkTag.prototype.getNewWin=function() { getValueOf('popupLinksNewWindow'); if (typeof pg.option.popupLinksNewWindow[this.id] === 'undefined') { this.newWin=null; } this.newWin=pg.option.popupLinksNewWindow[this.id]; } navlinkTag.prototype.getPrintFunction=function() { //think about this some more // this.id and this.article should already be defined if (typeof this.id!=typeof '' || typeof this.article!=typeof {} ) { return; } var html=''; var a,t; this.noPopup=1; switch (this.id) { case 'contribs': case 'history': case 'whatLinksHere': if (!getValueOf('popupUseQueryInterface')) { break; } case 'userPage': case 'monobook': case 'userTalk': case 'talk': case 'article': case 'lastEdit': this.noPopup=null; } switch (this.id) { case 'email': case 'contribs': case 'block': case 'unblock': case 'userlog': case 'userSpace': this.article=this.article.userName(); } switch (this.id) { case 'userTalk': case 'newUserTalk': case 'editUserTalk': case 'userPage': case 'monobook': case 'editMonobook': case 'blocklog': this.article=this.article.userName(true); // fall through; no break case 'pagelog': case 'deletelog': case 'protectlog': delete this.oldid; } if (this.id=='editMonobook' || this.id=='monobook') { this.article.append('/monobook.js'); } if (this.id != 'mainlink') { // FIXME anchor handling should be done differently with Title object this.article=this.article.removeAnchor(); // if (typeof this.text=='undefined') this.text=popupString(this.id); } switch (this.id) { case 'undelete': this.print=specialLink; this.specialpage='Undelete'; this.sep='/'; break; case 'whatLinksHere': this.print=specialLink; this.specialpage='Whatlinkshere'; break; case 'relatedChanges': this.print=specialLink; this.specialpage='Recentchangeslinked'; break; case 'move': this.print=specialLink; this.specialpage='Movepage'; break; case 'contribs': this.print=specialLink; this.specialpage='Contributions'; break; case 'email': this.print=specialLink; this.specialpage='Emailuser'; break; case 'block': this.print=specialLink; this.specialpage='Blockip'; this.sep='&ip='; break; case 'unblock': this.print=specialLink; this.specialpage='Ipblocklist'; this.sep='&action=unblock&ip='; break; case 'userlog': this.print=specialLink; this.specialpage='Log'; this.sep='&user='; break; case 'blocklog': this.print=specialLink; this.specialpage='Log'; this.sep='&type=block&page='; break; case 'pagelog': this.print=specialLink; this.specialpage='Log'; this.sep='&page='; break; case 'protectlog': this.print=specialLink; this.specialpage='Log'; this.sep='&type=protect&page='; break; case 'deletelog': this.print=specialLink; this.specialpage='Log'; this.sep='&type=delete&page='; break; case 'userSpace': this.print=specialLink; this.specialpage='Prefixindex'; this.sep='&namespace=2&from='; break; case 'search': this.print=specialLink; this.specialpage='Search'; this.sep='&fulltext=Search&search='; break; case 'history': case 'historyfeed': case 'unwatch': case 'watch': case 'unprotect': case 'protect': this.print=wikiLink; this.action=this.id; break; case 'delete': this.print=wikiLink; this.action='delete'; if (this.article.namespace()==pg.ns.image) { var img=this.article.stripNamespace(); this.action+='&image='+img; } break; case 'markpatrolled': case 'edit': // editOld should keep the oldid, but edit should not. delete this.oldid; // fall through case 'view': case 'purge': case 'render': this.print=wikiLink; this.action=this.id; break; case 'raw': this.print=wikiLink; this.action='raw&ctype=text/css'; break; case 'new': this.print=wikiLink; this.action='edit&section=new'; break; case 'mainlink': if (typeof this.text=='undefined') { this.text=this.article.toString().entify(); } if (getValueOf('popupSimplifyMainLink') && isInStrippableNamespace(this.article)) { var s=this.text.split('/'); this.text=s[s.length-1]; if (this.text=='' && s.length > 1) { this.text=s[s.length-2]; } } this.print=titledWikiLink; if (typeof this.title=='undefined' && pg.current.link && typeof pg.current.link.href != 'undefined') { this.title=safeDecodeURI((pg.current.link.originalTitle)?pg.current.link.originalTitle:this.article); if (typeof this.oldid != 'undefined' && this.oldid) { this.title=tprintf('Revision %s of %s', [this.oldid, this.title]); } } this.action='view'; break; case 'userPage': case 'article': case 'monobook': case 'editMonobook': case 'editArticle': delete this.oldid; //alert(this.id+'\n'+this.article + '\n'+ typeof this.article); this.article=this.article.articleFromTalkOrArticle(); //alert(this.id+'\n'+this.article + '\n'+ typeof this.article); this.print=wikiLink; if (this.id.indexOf('edit')==0) { this.action='edit'; } else { this.action='view';} break; case 'userTalk': case 'talk': this.article=this.article.talkPage(); delete this.oldid; this.print=wikiLink; this.action='view'; break; case 'arin': this.print=arinLink; break; case 'count': this.print=kateLink; break; case 'google': this.print=googleLink; break; case 'contribsTree': this.print=contribsTreeLink; break; case 'editors': this.print=editorListLink; break; case 'globalsearch': this.print=globalSearchLink; break; case 'lastEdit': this.print=titledDiffLink; this.title=popupString('Show the last edit'); this.from='prev'; this.to='cur'; break; case 'oldEdit': this.print=titledDiffLink; this.title=popupString('Show the edit made to get revision') + ' ' + this.oldid; this.from='prev'; this.to=this.oldid; break; case 'editOld': this.print=wikiLink; this.action='edit'; break; case 'undo': this.print=wikiLink; this.action='edit&undo='; break; case 'markpatrolled': this.print=wikiLink; this.action='markpatrolled'; case 'revert': this.print=wikiLink; this.action='revert'; break; case 'nullEdit': this.print=wikiLink; this.action='nullEdit'; break; case 'diffCur': this.print=titledDiffLink; this.title=tprintf('Show changes since revision %s', [this.oldid]); this.from=this.oldid; this.to='cur'; break; case 'editUserTalk': case 'editTalk': delete this.oldid; this.article=this.article.talkPage(); this.action='edit'; this.print=wikiLink; break; case 'newUserTalk': case 'newTalk': this.article=this.article.talkPage(); this.action='edit&section=new'; this.print=wikiLink; break; case 'lastContrib': case 'sinceMe': this.print=magicHistoryLink; break; case 'togglePreviews': this.text=popupString(pg.option.simplePopups ? 'enable previews' : 'disable previews'); case 'disablePopups': case 'purgePopups': this.print=popupMenuLink; break; default: this.print=function () {return 'Unknown navlink type: '+this.id+''}; } }; // // end navlinks ////////////////////////////////////////////////// //</NOLITE> // ENDFILE: navlinks.js // STARTFILE: shortcutkeys.js //<NOLITE> function popupHandleKeypress(evt) { var keyCode = window.event ? window.event.keyCode : ( evt.keyCode ? evt.keyCode : evt.which); if (!keyCode || !pg.current.link || !pg.current.link.navpopup) { return; } if (keyCode==27) { // escape killPopup(); return false; // swallow keypress } var letter=String.fromCharCode(keyCode); var links=pg.current.link.navpopup.mainDiv.getElementsByTagName('A'); var startLink=0; var i,j; if (popupHandleKeypress.lastPopupLinkSelected) { for (i=0; i<links.length; ++i) { if (links[i]==popupHandleKeypress.lastPopupLinkSelected) { startLink=i; } } } for (j=0; j<links.length; ++j) { i=(startLink + j + 1) % links.length; if (links[i].getAttribute('popupkey')==letter) { if (evt && evt.preventDefault) evt.preventDefault(); links[i].focus(); popupHandleKeypress.lastPopupLinkSelected=links[i]; return false; // swallow keypress } } // pass keypress on if (document.oldPopupOnkeypress) { return document.oldPopupOnkeypress(evt); } return true; } function addPopupShortcuts() { if (document.onkeypress!=popupHandleKeypress) { document.oldPopupOnkeypress=document.onkeypress; } document.onkeypress=popupHandleKeypress; } function rmPopupShortcuts() { popupHandleKeypress.lastPopupLinkSelected=null; try { if (document.oldPopupOnkeypress && document.oldPopupOnkeypress==popupHandleKeypress) { // panic document.onkeypress=null; //function () {}; return; } document.onkeypress=document.oldPopupOnkeypress; } catch (nasties) { /* IE goes here */ } } function addLinkProperty(html, property) { // take "<a href=...>...</a> and add a property // not sophisticated at all, easily broken var i=html.indexOf('>'); if (i<0) { return html; } return html.substring(0,i) + ' ' + property + html.substring(i); } function addPopupShortcut(html, key) { if (!getValueOf('popupShortcutKeys')) { return html; } var ret= addLinkProperty(html, 'popupkey="'+key+'"'); if (key==' ') { key=popupString('spacebar'); } return ret.replace(RegExp('^(.*?)(title=")(.*?)(".*)$', 'i'),'$1$2$3 ['+key+']$4'); } //</NOLITE> // ENDFILE: shortcutkeys.js // STARTFILE: diffpreview.js //<NOLITE> function loadDiff(article, oldid, diff, navpop) { navpop.diffData={}; var oldRev, newRev; switch (diff) { case 'cur': switch ( oldid ) { case null: case '': case 'prev': // eg newmessages diff link oldRev='0&direction=prev'; newRev=0; break; default: oldRev = oldid; newRev = 0; } break; case 'prev': oldRev = ( oldid || 0 ) + '&direction=prev'; newRev = oldid; break; case 'next': oldRev = oldid; newRev = oldid + '&direction=next'; break; default: oldRev = oldid || 0; newRev = diff || 0; break; } oldRev = oldRev || 0; newRev = newRev || 0; var go = function() { pendingNavpopTask(navpop); getWiki(article, doneDiffNew, newRev, navpop); pendingNavpopTask(navpop); getWiki(article, doneDiffOld, oldRev, navpop); var tz = Cookie.read('popTz'); if (getValueOf('popupUseQueryInterface') && getValueOf('popupAdjustDiffDates') && tz===null) { pendingNavpopTask(navpop); getPageWithCaching(pg.wiki.wikibase + '/query.php?format=json&what=userinfo&uioptions=timecorrection', function(d) { completedNavpopTask(navpop); setTimecorrectionCookie(d); if (diffDownloadsComplete(navpop)) { insertDiff(navpop); } }, navpop); } return true; // remove hook once run } if (navpop.visible || !getValueOf('popupLazyDownloads')) { go(); } else { navpop.addHook(go, 'unhide', 'before', 'DOWNLOAD_DIFFS'); } } function setTimecorrectionCookie(d) { Cookie.create('popTz', getTimeOffset(getJsObj(d.data).meta.user.timecorrection), 1); } function doneDiff(download, isOld) { if (!download.owner || !download.owner.diffData) { return; } var navpop=download.owner; var label= (isOld) ? 'Old' : 'New'; var otherLabel=(isOld) ? 'New' : 'Old'; navpop.diffData[label]=download; completedNavpopTask(download.owner); if (diffDownloadsComplete(navpop)) { insertDiff(navpop); } } function diffDownloadsComplete(navpop) { if (getValueOf('popupUseQueryInterface') && Cookie.read('popTz')===null) { return false; } return navpop.diffData.Old && navpop.diffData.New; } function doneDiffNew(download) { doneDiff(download, false); } function doneDiffOld(download) { doneDiff(download, true); } function rmBoringLines(a,b,context) { if (typeof context == 'undefined') { context=2; } // this is fairly slow... i think it's quicker than doing a word-based diff from the off, though var aa=[], aaa=[]; var bb=[], bbb=[]; var i, j; // first, gather all disconnected nodes in a and all crossing nodes in a and b for (i=0; i<a.length; ++i ) { if(!a[i].paired) { aa[i]=1; } else if (countCrossings(b,a,i, true)) { aa[i]=1; bb[ a[i].row ] = 1; } } // pick up remaining disconnected nodes in b for (i=0; i<b.length; ++i ) { if (bb[i]==1) { continue; } if(!b[i].paired) { bb[i]=1; } } // another pass to gather context: we want the neighbours of included nodes which are not yet included // we have to add in partners of these nodes, but we don't want to add context for *those* nodes in the next pass for (i=0; i<b.length; ++i) { if ( bb[i] == 1 ) { for (j=max(0,i-context); j < min(b.length, i+context); ++j) { if ( !bb[j] ) { bb[j] = 1; aa[ b[j].row ] = 0.5; } } } } for (i=0; i<a.length; ++i) { if ( aa[i] == 1 ) { for (j=max(0,i-context); j < min(a.length, i+context); ++j) { if ( !aa[j] ) { aa[j] = 1; bb[ a[j].row ] = 0.5; } } } } for (i=0; i<bb.length; ++i) { if (bb[i] > 0) { // it's a row we need if (b[i].paired) { bbb.push(b[i].text); } // joined; partner should be in aa else { bbb.push(b[i]); } } } for (i=0; i<aa.length; ++i) { if (aa[i] > 0) { // it's a row we need if (a[i].paired) { aaa.push(a[i].text); } // joined; partner should be in aa else { aaa.push(a[i]); } } } return { a: aaa, b: bbb}; } function stripOuterCommonLines(a,b,context) { var i=0; while (i<a.length && i < b.length && a[i]==b[i]) { ++i; } var j=a.length-1; var k=b.length-1; while ( j>=0 && k>=0 && a[j]==b[k] ) { --j; --k; } return { a: a.slice(max(0,i - 1 - context), min(a.length+1, j + context+1)), b: b.slice(max(0,i - 1 - context), min(b.length+1, k + context+1)) }; } function insertDiff(navpop) { // for speed reasons, we first do a line-based diff, discard stuff that seems boring, then do a word-based diff // FIXME: sometimes this gives misleading diffs as distant chunks are squashed together var oldlines=navpop.diffData.Old.data.split('\n'); var newlines=navpop.diffData.New.data.split('\n'); var inner=stripOuterCommonLines(oldlines,newlines,getValueOf('popupDiffContextLines')); oldlines=inner.a; newlines=inner.b; var truncated=false; getValueOf('popupDiffMaxLines'); if (oldlines.length > pg.option.popupDiffMaxLines || newlines.length > pg.option.popupDiffMaxLines) { // truncate truncated=true; inner=stripOuterCommonLines(oldlines.slice(0,pg.option.popupDiffMaxLines), newlines.slice(0,pg.option.popupDiffMaxLines), pg.option.popupDiffContextLines); oldlines=inner.a; newlines=inner.b; } var lineDiff=diff(oldlines, newlines); var lines2=rmBoringLines(lineDiff.o, lineDiff.n); var oldlines2=lines2.a; var newlines2=lines2.b; var simpleSplit = !String.prototype.parenSplit.isNative; var html='<hr>'; if (getValueOf('popupDiffDates')) { html += diffDatesTable(navpop.diffData.Old, navpop.diffData.New); html += '<hr>'; } html += shortenDiffString( diffString(oldlines2.join('\n'), newlines2.join('\n'), simpleSplit), getValueOf('popupDiffContextCharacters') ).join('<hr>'); setPopupTipsAndHTML(html.split('\n').join('<br>') + (truncated ? '<hr><b>'+popupString('Diff truncated for performance reasons')+'</b>' : '') , 'popupPreview', navpop.idNumber); } function diffDatesTable( oldDl, newDl ) { var html='<table class="popup_diff_dates">'; html += diffDatesTableRow( newDl, tprintf('New revision')); html += diffDatesTableRow( oldDl, tprintf('Old revision')); html += '</table>'; return html; } function diffDatesTableRow( dl, label ) { var txt=''; if (!dl) { txt=popupString('Something went wrong :-('); } else if (!dl.lastModified) { txt= (/^\s*$/.test(dl.data)) ? popupString('Empty revision, maybe non-existent') : popupString('Unknown date'); } else { var datePrint=getValueOf('popupDiffDatePrinter'); if (typeof dl.lastModified[datePrint] == 'function') { if (getValueOf('popupAdjustDiffDates')) { var off; if (off=Cookie.read('popTz')) { var d2=adjustDate(dl.lastModified, off); txt = dayFormat(d2, true) + ' ' + timeFormat(d2, true); } } else { txt = dl.lastModified[datePrint](); } } else { txt = tprintf('Invalid %s %s', ['popupDiffDatePrinter', datePrint]); } } var revlink = generalLink({url: dl.url.replace(/&.*?(oldid=[0-9]+(?:&direction=[^&]*)?).*/, '&$1'), text: label, title: label}); return simplePrintf('<tr><td>%s</td><td>%s</td></tr>', [ revlink, txt ]); } //</NOLITE> // ENDFILE: diffpreview.js // STARTFILE: links.js //<NOLITE> ///////////////////// // LINK GENERATION // ///////////////////// // titledDiffLink --> titledWikiLink --> generalLink // wikiLink --> titledWikiLink --> generalLink // kateLink --> generalLink function titledDiffLink(l) { // article, text, title, from, to) { return titledWikiLink({article: l.article, action: l.to + '&oldid=' + l.from, newWin: l.newWin, noPopup: l.noPopup, text: l.text, title: l.title, /* hack: no oldid here */ actionName: 'diff'}); } function wikiLink(l) { //{article:article, action:action, text:text, oldid, newid}) { if (! (typeof l.article == typeof {} && typeof l.action == typeof '' && typeof l.text==typeof '')) return null; if (typeof l.oldid == 'undefined') l.oldid=null; if (!/^((edit|view|revert|render)$|(raw))/.test(l.action)) { l.oldid=null; } var hint=popupString(l.action + 'Hint'); // revertHint etc etc etc var oldidData=[l.oldid, safeDecodeURI(l.article)]; var revisionString = tprintf('revision %s of %s', oldidData); log('revisionString='+revisionString); switch (l.action) { case 'edit&section=new': hint = popupString('newSectionHint'); break; case 'edit&undo=': l.action += l.diff; hint = popupString('undoHint'); break; case 'raw&ctype=text/css': hint=popupString('rawHint'); break; case 'revert': var p=parseParams(pg.current.link.href); l.action='edit&autoclick=wpSave&actoken=' + autoClickToken() + '&autosummary=' + revertSummary(l.oldid, p.diff); if (p.diff=='prev') { l.action += '&direction=prev'; revisionString = tprintf('the revision prior to revision %s of %s', oldidData); } if (getValueOf('popupRevertSummaryPrompt')) { l.action += '&autosummaryprompt=true'; } if (getValueOf('popupMinorReverts')) { l.action += '&autominor=true'; } log('revisionString is now '+revisionString); break; case 'nullEdit': l.action='edit&autoclick=wpSave&actoken=' + autoClickToken() + '&autosummary=null'; break; case 'historyfeed': l.action='history&feed=rss'; break; case 'markpatrolled': l.action='markpatrolled&rcid='+l.rcid; } if (hint) { if (l.oldid) { hint = simplePrintf(hint, [revisionString]); } else { hint = simplePrintf(hint, [safeDecodeURI(l.article)]); } } else { hint = safeDecodeURI(l.article + '&action=' + l.action) + (l.oldid) ? '&oldid='+l.oldid : ''; } return titledWikiLink({article: l.article, action: l.action, text: l.text, newWin:l.newWin, title: hint, oldid: l.oldid, noPopup: l.noPopup}); } function revertSummary(oldid, diff) { if (getValueOf('popupUseQueryInterface')) { return revertSummaryQueried(oldid, diff); } if (typeof getValueOf('popupTimeOffset') == 'number' && /[?&]action=history/.test(document.location.href)) { var links=document.links; var numlinks=links.length; var date=null, editor=null; var dateRe = RegExp('^([0-9]{2}:[0-9]{2}),\s*(.*[1-3][0-9]{3})$'); for (var i=0; i<numlinks-1; ++i) { if (RegExp('oldid='+oldid).test(links[i].href) && dateRe.test(links[i].innerHTML)) { // help konqueror out by putting the time at the end var ds = links[i].innerHTML.replace(dateRe, '$2 $1'); // d is parsed according to current locale, in FF at least // this is only OK if the user has set the time offset in prefs! var d=new Date(+(new Date(ds)) - 1000*3600*getValueOf('popupTimeOffset')); // strip out zero seconds and timezone in date, since they're prolly bogus date=d.toString().replace(/([0-9]{2}:[0-9]{2}):00.*/, '$1'); editor=Title.fromURL(links[i+1].href).userName(); break; } } if (date && editor && diff != 'prev') { return simplePrintf(getValueOf('popupExtendedRevertSummary'), [date, editor, oldid]); } } if (diff != 'prev') { return simplePrintf(getValueOf('popupRevertSummary'), [ oldid ]); } return simplePrintf(getValueOf('popupRevertToPreviousSummary'), [ oldid ]); } function revertSummaryQueried(oldid, diff) { var ret=''; if (diff == 'prev') { ret=getValueOf('popupQueriedRevertToPreviousSummary'); } else { ret = getValueOf('popupQueriedRevertSummary'); } return ret + '&autorv=' + oldid; } function titledWikiLink(l) { // possible properties of argument: // article, action, text, title, oldid, actionName, className, noPopup // oldid = null is fine here // article and action are mandatory args if (typeof l.article == 'undefined' || typeof l.action=='undefined') { errlog('got undefined article or action in titledWikiLink'); return null; } var base = pg.wiki.titlebase + l.article.urlString(); var url=base; if (typeof l.actionName=='undefined' || !l.actionName) { l.actionName='action'; } // no need to add &action=view, and this confuses anchors if (l.action != 'view') { url = base + '&' + l.actionName + '=' + l.action; } if (typeof l.oldid!='undefined' && l.oldid) { url+='&oldid='+l.oldid; } var cssClass=pg.misc.defaultNavlinkClassname; if (typeof l.className!='undefined' && l.className) { cssClass=l.className; } return generalNavLink({url: url, newWin: l.newWin, title: (typeof l.title != 'undefined') ? l.title : null, text: (typeof l.text!='undefined')?l.text:null, className: cssClass, noPopup:l.noPopup}); } function getLastContrib(wikipage, newWin) { getHistoryInfo(wikipage, function(x){processLastContribInfo(x,{page: wikipage, newWin: newWin})}); } function processLastContribInfo(info, stuff) { if(!info.edits || !info.edits.length) { alert('Popups: an odd thing happened. Please retry.'); return; } if(!info.firstNewEditor) { alert(tprintf('Only found one editor: %s made %s edits', [info.edits[0].editor,info.edits.length])); return; } var newUrl=pg.wiki.titlebase + new Title(stuff.page).urlString() + '&diff=cur&oldid='+info.firstNewEditor.oldid; displayUrl(newUrl, stuff.newWin); } function getDiffSinceMyEdit(wikipage, newWin) { getHistoryInfo(wikipage, function(x){processDiffSinceMyEdit(x,{page: wikipage, newWin: newWin})}); } function processDiffSinceMyEdit(info, stuff) { if(!info.edits || !info.edits.length) { alert('Popups: something fishy happened. Please try again.'); return; } var friendlyName=stuff.page.split('_').join(' '); if(!info.myLastEdit) { alert(tprintf('Couldn\'t find an edit by %s\nin the last %s edits to\n%s', [info.userName, getValueOf('popupHistoryLimit'), friendlyName])); return; } if(info.myLastEdit.index==0) { alert(tprintf("%s seems to be the last editor to the page %s", [info.userName, friendlyName])); return; } var newUrl=pg.wiki.titlebase + new Title(stuff.page).urlString() + '&diff=cur&oldid='+ info.myLastEdit.oldid; displayUrl(newUrl, stuff.newWin); } function displayUrl(url, newWin){ if(newWin) { window.open(url); } else { document.location=url; } } function purgePopups() { processAllPopups(true); setupCache(); // deletes all cached items (not browser cached, though...) pg.option={}; abortAllDownloads(); } function processAllPopups(nullify, banish) { for (var i=0; i<pg.current.links.length; ++i) { if (!pg.current.links[i].navpopup) { continue; } (nullify || banish) && pg.current.links[i].navpopup.banish(); nullify && (pg.current.links[i].navpopup=null); } } function disablePopups(){ processAllPopups(false, true); setupTooltips(null, true); } function togglePreviews() { processAllPopups(true, true); pg.option.simplePopups=!pg.option.simplePopups; abortAllDownloads(); } function magicHistoryLink(l) { // FIXME use onclick change href trick to sort this out instead of window.open var jsUrl='', title=''; switch(l.id) { case 'lastContrib': jsUrl=simplePrintf('javascript:getLastContrib(\'%s\',%s)', [l.article.toString(true).split("'").join("\\'"), l.newWin]); title=popupString('lastContribHint'); break; case 'sinceMe': jsUrl=simplePrintf('javascript:getDiffSinceMyEdit(\'%s\',%s)', [l.article.toString(true).split("'").join("\\'"), l.newWin]); title=popupString('sinceMeHint'); break; } return generalNavLink({url: jsUrl, newWin: false, // can't have new windows with JS links, I think title: title, text: l.text, noPopup: l.noPopup}); } function popupMenuLink(l) { var jsUrl=simplePrintf('javascript:%s()', [l.id]); var title=popupString(simplePrintf('%sHint', [l.id])); return generalNavLink({url: jsUrl, newWin:false, title:title, text:l.text, noPopup:l.noPopup}); } function specialLink(l) { // properties: article, specialpage, text, sep if (typeof l.specialpage=='undefined'||!l.specialpage) return null; var base = pg.wiki.titlebase + pg.ns.special+':'+l.specialpage; if (typeof l.sep == 'undefined' || l.sep===null) l.sep='&target='; var article=l.article.urlString({keepSpaces: l.specialpage=='Search'}); var hint=popupString(l.specialpage+'Hint'); switch (l.specialpage) { case 'Log': switch (l.sep) { case '&user=': hint=popupString('userLogHint'); break; case '&type=block&page=': hint=popupString('blockLogHint'); break; case '&page=': hint=popupString('pageLogHint'); break; case '&type=protect&page=': hint=popupString('protectLogHint'); break; case '&type=delete&page=': hint=popupString('deleteLogHint'); break; default: log('Unknown log type, sep=' + l.sep); hint='Missing hint (FIXME)'; } break; case 'Prefixindex': article += '/'; break; } if (hint) hint = simplePrintf(hint, [safeDecodeURI(l.article)]); else hint = safeDecodeURI(l.specialpage+':'+l.article) ; var url = base + l.sep + article; return generalNavLink({url: url, title: hint, text: l.text, newWin:l.newWin, noPopup:l.noPopup}); } function generalLink(l) { // l.url, l.text, l.title, l.newWin, l.className, l.noPopup if (typeof l.url=='undefined') return null; // only quotation marks in the url can screw us up now... I think var url=l.url.split('"').join('%22'); var ret='<a href="' + url + '"'; if (typeof l.title!='undefined' && l.title) { ret += ' title="' + l.title + '"'; } if (l.noPopup) { ret += ' noPopup=1'; } var newWin; if (typeof l.newWin=='undefined' || l.newWin===null) { newWin=getValueOf('popupNewWindows'); } else { newWin=l.newWin; } if (newWin) { ret += ' target="_blank"'; } if (typeof l.className!='undefined'&&l.className) { ret+=' class="'+l.className+'"'; } ret += '>'; if (typeof l.text==typeof '') { ret+= l.text; } ret +='</a>'; return ret; } function appendParamsToLink(linkstr, params) { var sp=linkstr.parenSplit(RegExp('(href="[^"]+?)"', 'i')); if (sp.length<2) return null; var ret=sp.shift() + sp.shift(); ret += '&' + params + '"'; ret += sp.join(''); return ret; } function changeLinkTargetLink(x) { // newTarget, text, hint, summary, clickButton, minor, title (optional) { if (x.newTarget) { log ('changeLinkTargetLink: newTarget=' + x.newTarget); } // optional: oldTarget (in wikitext) // if x.newTarget omitted or null, remove the link //x.text=encodeURI(x.text); // this buggers things up on zh.wikipedia.org and doesn't seem necessary x.clickButton=encodeURI(x.clickButton); // FIXME: first character of page title as well as namespace should be case insensitive // eg [[category:foo]] and [[Category:Foo]] are equivalent // this'll break if charAt(0) is nasty var cA=literalizeRegex(x.oldTarget); var chs=cA.charAt(0).toUpperCase(); chs='['+chs + chs.toLowerCase()+']'; var currentArticleRegexBit=chs+cA.substring(1); currentArticleRegexBit=currentArticleRegexBit .split(RegExp('[_ ]+', 'g')).join('[_ ]+') .split('\\(').join('(?:%2528|\\()') .split('\\)').join('(?:%2529|\\))'); // leading and trailing space should be ignored, and anchor bits optional: currentArticleRegexBit = '\\s*(' + currentArticleRegexBit + '(?:#[^\\[\\|]*)?)\\s*'; // e.g. Computer (archaic) -> \s*([Cc]omputer[_ ](?:%2528|\()archaic(?:%2528|\)))\s* // autoedit=s~\[\[([Cc]ad)\]\]~[[Computer-aided%20design|$1]]~g;s~\[\[([Cc]AD)[|]~[[Computer-aided%20design|~g var title=x.title || wgPageName.split('_').join(' '); var lk=titledWikiLink({article: new Title(title), newWin:x.newWin, action: 'edit', text: x.text, title: x.hint, className: 'popup_change_title_link' }); var cmd=''; if (x.newTarget) { // escape '&' and other nasties var t=encodeURI(x.newTarget); var s=encodeURI(literalizeRegex(x.newTarget)); cmd += 's~\\[\\['+currentArticleRegexBit+'\\]\\]~[['+t+'|$1]]~g;'; cmd += 's~\\[\\['+currentArticleRegexBit+'[|]~[['+t+'|~g;'; cmd += 's~\\[\\['+s + '\\|' + s + '\\]\\]~[[' + t + ']]~g'; } else { cmd += 's~\\[\\['+currentArticleRegexBit+'\\]\\]~$1~g;'; cmd += 's~\\[\\['+currentArticleRegexBit+'[|](.*?)\\]\\]~$2~g'; } cmd += '&autoclick='+x.clickButton + '&actoken=' + autoClickToken(); cmd += ( x.minor == null ) ? '' : '&autominor='+x.minor; cmd += ( x.watch == null ) ? '' : '&autowatch='+x.watch; cmd += '&autosummary='+x.summary; return appendParamsToLink(lk, 'autoedit='+cmd); } function redirLink(redirMatch, article) { // NB redirMatch is in wikiText var ret=''; if (getValueOf('popupAppendRedirNavLinks') && getValueOf('popupNavLinks')) { ret += '<hr>'; if (getValueOf('popupFixRedirs') && typeof autoEdit != 'undefined' && autoEdit) { log('redirLink: newTarget=' + redirMatch); ret += addPopupShortcut( changeLinkTargetLink( {newTarget: redirMatch, text: popupString('Redirects'), hint: popupString('Fix this redirect'), summary: simplePrintf(getValueOf('popupFixRedirsSummary'), [article.toString(), redirMatch ]), oldTarget: article.toString(), clickButton: getValueOf('popupRedirAutoClick'), minor: true, watch: getValueOf('popupWatchRedirredPages')}) , 'R'); ret += popupString(' to '); } else ret += popupString('Redirects') + popupString(' to '); return ret; } else return '<br> ' + popupString('Redirects') + popupString(' to ') + titledWikiLink({article: new Title().fromWikiText(redirMatch), action: 'view', /* FIXME: newWin */ text: safeDecodeURI(redirMatch), title: popupString('Bypass redirect')}); } function arinLink(l) { if (!saneLinkCheck(l)) { return null; } if ( ! l.article.isIpUser() || ! pg.wiki.wikimedia) return null; var uN=l.article.userName(); return generalNavLink({url:'http://ws.arin.net/cgi-bin/whois.pl?queryinput=' + escape(uN), newWin:l.newWin, title: tprintf('Look up %s in ARIN whois database', [uN]), text: l.text, noPopup:1}); } function toolDbName(cookieStyle) { var ret=null; var theWiki=pg.wiki.hostname.split('.')[1]; if (pg.wiki.hostname==pg.wiki.commons) { ret = 'commonswiki'; } else { switch(theWiki) { case 'wikipedia': case 'wikimedia': ret = pg.wiki.lang + 'wiki'; break; default: ret = pg.wiki.lang + theWiki; break; } } if (!cookieStyle) { ret+= '_p'; } return ret; } function saneLinkCheck(l) { if (typeof l.article != typeof {} || typeof l.text != typeof '') { return false; } return true; } function kateLink(l) { if(!saneLinkCheck(l)) return null; if (! pg.wiki.wikimedia) return null; var uN=l.article.userName(); var tool=getValueOf('popupEditCounterTool'); var url; var defaultToolUrl='http://tools.wikimedia.de/~$3/cgi-bin/count_edits?dbname=$2&user=$1'; switch(tool) { case 'custom': url=simplePrintf(getValueOf('popupEditCounterUrl'), [ escape(uN), toolDbName() ]); break; default: url=simplePrintf(defaultToolUrl, [ escape(uN), toolDbName(), tool ]); } return generalNavLink({url:url, title: tprintf('katelinkHint', [uN]), newWin:l.newWin, text: l.text, noPopup:1}); } function contribsTreeLink(l) { if(!saneLinkCheck(l)) return null; if (! pg.wiki.wikimedia) return null; var uN=l.article.userName(); var url='http://tools.wikimedia.de/~interiot/cgi-bin/contribution_tree?dbname='; url += toolDbName() + '&user='+ escape(uN); return generalNavLink({url:url, title: tprintf('contribsTreeHint', [uN]), newWin:l.newWin, text: l.text, noPopup:1}); } function globalSearchLink(l) { if(!saneLinkCheck(l)) return null; var base='http://vs.aka-online.de/cgi-bin/globalwpsearch.pl?timeout=120&search='; var article=l.article.urlString({keepSpaces:true}); return generalNavLink({url:base + article, newWin:l.newWin, title: tprintf('globalSearchHint', [article]), text: l.text, noPopup:1}); } function googleLink(l) { if(!saneLinkCheck(l)) return null; var base='http://www.google.com/search?q='; var article=l.article.urlString({keepSpaces:true}); return generalNavLink({url:base + '%22' + article + '%22', newWin:l.newWin, title: tprintf('googleSearchHint', [article]), text: l.text, noPopup:1}); } function editorListLink(l) { if(!saneLinkCheck(l)) return null; var article= l.article.articleFromTalkPage() || l.article; var base='http://tools.wikimedia.de/~tim/counter/?page='; return generalNavLink({url:base+article.urlString(), title: tprintf('editorListHint', [article]), newWin:l.newWin, text: l.text, noPopup:1}); } function generalNavLink(l) { l.className = (l.className==null) ? 'popupNavLink' : l.className; return generalLink(l); } ////////////////////////////////////////////////// // magic history links // function getHistoryInfo(wikipage, whatNext) { log('getHistoryInfo'); getHistory(wikipage, whatNext ? function(d){whatNext(processHistory(d));} : processHistory); } // FIXME eliminate pg.idNumber ... how? :-( function getHistory(wikipage, onComplete) { log('getHistory'); var url; if (getValueOf('popupUseQueryInterface')) { url = pg.wiki.wikibase + '/query.php?format=json&what=revisions&titles=' + new Title(wikipage).urlString() + '&rvlimit=' + getValueOf('popupHistoryLimit'); } else { url = pg.wiki.titlebase + new Title(wikipage).urlString() + '&action=history' + '&limit=' + getValueOf('popupHistoryLimit'); } log('getHistory: url='+url); return startDownload(url, pg.idNumber+'history', onComplete); } function processHistory(download) { if (getValueOf('popupUseQueryInterface')) { return processHistoryQuery(download); } return processHistoryScreenScrape(download); } function processHistoryScreenScrape(download) { // screen scrape alert var d=download.data; // pg.misc.data=d; // for debugging var edits=[]; var split=d.split('<li>'); for (var i=0; i<split.length; ++i) { var histRe=RegExp( '^[(].*?type="radio" value="([0-9]*)".*?class=\'history-user\'>' + '<a href="(/wiki/User:|/w/index.php[?]title=(Special:Contributions&amp;target=|User:))([^&"]*)'); var match=histRe.exec(split[i]); if (match) { edits.push({ oldid: match[1], editor: match[4] }); } } var userName=getValueOf('popupUserName') || Cookie.read(pg.wiki.userNameCookie).split('+').join('_'); return finishProcessHistory(edits, userName); } function processHistoryQuery(download) { log ('processHistoryQuery'); var d=download.data; log('d='+d); var jsobj; try { log('trying to parse JSON'); log('jsobj=' + d); eval('jsobj=' + d); log('done eval; jsobj='+jsobj); window.x=jsobj; var p=jsobj['pages']; log('got p'); for (var pageid in p) { var revisions=p[pageid]['revisions']; // we only get the first one break; } log('got revisions'); log(revisions.length +' of them'); } catch (someError) { log('Something went wrong with JSON business'); return finishProcessHistory([]); } var edits=[]; for (var i=0; i<revisions.length; ++i) { edits.push({ oldid: revisions[i]['revid'], editor: revisions[i]['user'] }); } log('processed ' + edits.length + ' edits'); var userName=getValueOf('popupUserName') || unescape(Cookie.read(pg.wiki.userNameCookie).split('+').join(' ')); return finishProcessHistory(edits, userName); } function finishProcessHistory(edits, userName) { var histInfo={}; histInfo.edits=edits; histInfo.userName=userName; for (var i=0; i<edits.length; ++i) { if (typeof histInfo.myLastEdit == 'undefined' && userName && edits[i].editor==userName) { histInfo.myLastEdit={index: i, oldid: edits[i].oldid, previd: (i==0 ? null : edits[i-1].oldid)}; } if (typeof histInfo.firstNewEditor == 'undefined' && edits[i].editor != edits[0].editor) { histInfo.firstNewEditor={index:i, oldid:edits[i].oldid, previd: (i==0 ? null : edits[i-1].oldid)}; } } //pg.misc.historyInfo=histInfo; return histInfo; } //</NOLITE> // ENDFILE: links.js // STARTFILE: options.js ////////////////////////////////////////////////// // options // check for cookies and existing value, else use default function defaultize(x) { var val=null; if (x!='popupCookies') { defaultize('popupCookies'); if (pg.option.popupCookies && (val=Cookie.read(x))) { pg.option[x]=val; return; } } if (pg.option[x]===null || typeof pg.option[x]=='undefined') { if (typeof window[x] != 'undefined' ) pg.option[x]=window[x]; else pg.option[x]=pg.optionDefault[x]; } } function newOption(x, def) { pg.optionDefault[x]=def; } function setDefault(x, def) { return newOption(x, def); } function getValueOf(varName) { defaultize(varName); return pg.option[varName]; } function useDefaultOptions() { // for testing for (var p in pg.optionDefault) { pg.option[p]=pg.optionDefault[p]; if (typeof window[p]!='undefined') { delete window[p]; } } } function setOptions() { // user-settable parameters and defaults // Basic options newOption('popupDelay', 0.5); newOption('popupHideDelay', 0.5); newOption('simplePopups', false); newOption('popupStructure', 'shortmenus'); // see later - default for popupStructure is 'original' if simplePopups is true newOption('popupActionsMenu', true); newOption('popupSetupMenu', true); newOption('popupAdminLinks', false); newOption('popupShortcutKeys', false); newOption('popupHistoricalLinks', true); newOption('popupOnlyArticleLinks', true); newOption('removeTitles', true); newOption('popupMaxWidth', 350); newOption('popupInitialWidth', false); // integer or false newOption('popupSimplifyMainLink', true); newOption('popupAppendRedirNavLinks', true); newOption('popupTocLinks', false); newOption('popupSubpopups', true); newOption('popupUserName', ''); // should be magically detected with cookies if this isn't set newOption('popupDragHandle', false /* 'popupTopLinks'*/); newOption('popupLazyPreviews', true); newOption('popupLazyDownloads', true); newOption('popupAllDabsStubs', false); newOption('popupDebugging', false); newOption('popupAdjustDiffDates', true); newOption('popupActiveNavlinks', true); newOption('popupModifier', false); // ctrl, shift, alt or meta //<NOLITE> // images newOption('popupImages', true); newOption('imagePopupsForImages', true); newOption('popupNeverGetThumbs', false); newOption('popupImagesFromThisWikiOnly', false); newOption('popupMinImageWidth', 50); newOption('popupLoadImagesSequentially', false); //newOption('popupImagesToggleSize', true); newOption('popupThumbAction', 'imagepage'); //'sizetoggle'); newOption('popupImageSize', 60); newOption('popupShowNonCommonsImages', false); // redirs, dabs, reversion newOption('popupFixRedirs', false); newOption('popupRedirAutoClick', 'wpDiff'); newOption('popupFixDabs', false); newOption('popupRevertSummaryPrompt', false); newOption('popupMinorReverts', false); newOption('popupRedlinkRemoval', false); newOption('popupWatchDisambiggedPages', null); newOption('popupWatchRedirredPages', null); // navlinks newOption('popupNavLinks', true); newOption('popupNavLinkSeparator', ' &sdot; '); newOption('popupLastEditLink', true); newOption('popupEditCounterTool', 'interiot'); newOption('popupEditCounterUrl', ''); newOption('popupExtraUserMenu', ''); //</NOLITE> // previews etc newOption('popupPreviews', true); newOption('popupSummaryData', true); newOption('popupMaxPreviewSentences', 5); newOption('popupMaxPreviewCharacters', 600); newOption('popupLastModified', true); newOption('popupPreviewKillTemplates', true); newOption('popupPreviewRawTemplates', false); newOption('popupPreviewFirstParOnly', true); newOption('popupPreviewCutHeadings', true); //<NOLITE> // diffs newOption('popupPreviewDiffs', true); newOption('popupDiffMaxLines', 100); newOption('popupDiffContextLines', 2); newOption('popupDiffContextCharacters', 40); newOption('popupDiffDates', true); newOption('popupDiffDatePrinter', 'toLocaleString'); // edit summaries. God, these are ugly. newOption('popupFixDabsSummary', popupString('defaultpopupFixDabsSummary') ); newOption('popupExtendedRevertSummary', popupString('defaultpopupExtendedRevertSummary') ); newOption('popupTimeOffset', null); newOption('popupRevertSummary', popupString('defaultpopupRevertSummary') ); newOption('popupRevertToPreviousSummary', popupString('defaultpopupRevertToPreviousSummary') ); newOption('popupQueriedRevertSummary', popupString('defaultpopupQueriedRevertSummary') ); newOption('popupQueriedRevertToPreviousSummary', popupString('defaultpopupQueriedRevertToPreviousSummary') ); newOption('popupFixRedirsSummary', popupString('defaultpopupFixRedirsSummary') ); newOption('popupRedlinkSummary', popupString('defaultpopupRedlinkSummary') ); newOption('popupRmDabLinkSummary', popupString('defaultpopupRmDabLinkSummary') ); //</NOLITE> // misc newOption('popupCookies', false); newOption('popupHistoryLimit', 50); //<NOLITE> newOption('popupFilters', [popupFilterStubDetect, popupFilterDisambigDetect, popupFilterPageSize, popupFilterCountLinks, popupFilterCountImages, popupFilterCountCategories, popupFilterLastModified]); newOption('extraPopupFilters', []); newOption('popupOnEditSelection', 'cursor'); newOption('popupUseQueryInterface', true); newOption('popupPreviewHistory', true); newOption('popupImageLinks', true); newOption('popupCategoryMembers', true); newOption('popupHistoryPreviewLimit', 25); newOption('popupContribsPreviewLimit',25); //</NOLITE> // new windows newOption('popupNewWindows', false); newOption('popupLinksNewWindow', {'lastContrib': true, 'sinceMe': true}); // regexps newOption('popupDabRegexp', '([{][{]\\s*disambig|disambig\\s*[}][}]|disamb\\s*[}][}]|dab\\s*[}][}])|[{][{]\\s*(((geo|hn|road?|school|number)dis)|[234][lc][acw]|shipindex)(\\s*[|][^}]*)?\\s*[}][}]|is a .*disambiguation.*page'); newOption('popupStubRegexp', '(sect)?stub[}][}]|This .*-related article is a .*stub'); newOption('popupImageVarsRegexp', 'image|image_(?:file|skyline|name|flag|seal)|cover|badge|logo'); } // ENDFILE: options.js // STARTFILE: strings.js //<NOLITE> ////////////////////////////////////////////////// // Translatable strings ////////////////////////////////////////////////// // // See instructions at // http://en.wikipedia.org/wiki/Wikipedia:Tools/Navigation_popups/Translation pg.string = { ///////////////////////////////////// // summary data, searching etc. ///////////////////////////////////// 'article': 'article', 'category': 'category', 'categories': 'categories', 'image': 'image', 'images': 'images', 'stub': 'stub', 'section stub': 'section stub', 'Empty page': 'Empty page', 'kB': 'kB', 'bytes': 'bytes', 'day': 'day', 'days': 'days', 'hour': 'hour', 'hours': 'hours', 'minute': 'minute', 'minutes': 'minutes', 'second': 'second', 'seconds': 'seconds', 'week': 'week', 'weeks': 'weeks', 'search': 'search', 'SearchHint': 'Find English Wikipedia articles containing %s', 'web': 'web', 'global': 'global', 'globalSearchHint': 'Search across Wikipedias in different languages for %s', 'googleSearchHint': 'Google for %s', ///////////////////////////////////// // article-related actions and info // (some actions also apply to user pages) ///////////////////////////////////// 'actions': 'actions', ///// view articles and view talk 'popupsMenu': 'popups', 'togglePreviewsHint': 'Toggle preview generation in popups on this page', 'toggle previews': 'toggle previews', 'reset': 'reset', 'more...': 'more...', 'disable': 'disable popups', 'disablePopupsHint': 'Disable popups on this page. Reload page to re-enable.', 'historyfeedHint': 'RSS feed of recent changes to this page', 'purgePopupsHint': 'Reset popups, clearing all cached popup data.', 'PopupsHint': 'Reset popups, clearing all cached popup data.', 'spacebar': 'space', 'view': 'view', 'view article': 'view article', 'viewHint': 'Go to %s', 'talk': 'talk', 'talk page': 'talk page', 'this&nbsp;revision': 'this&nbsp;revision', 'revision %s of %s': 'revision %s of %s', 'Revision %s of %s': 'Revision %s of %s', 'the revision prior to revision %s of %s': 'the revision prior to revision %s of %s', 'Toggle image size': 'Click to toggle image size', 'del': 'del', ///// delete, protect, move 'delete': 'delete', 'deleteHint': 'Delete %s', 'undeleteShort': 'un', 'UndeleteHint': 'Show the deletion history for %s', 'protect': 'protect', 'protectHint': 'Restrict editing rights to %s', 'unprotectShort': 'un', 'unprotectHint': 'Allow %s to be edited by anyone again', 'move': 'move', 'move page': 'move page', 'MovepageHint': 'Change the title of %s', 'edit': 'edit', ///// edit articles and talk 'edit article': 'edit article', 'editHint': 'Change the content of %s', 'edit talk': 'edit talk', 'new': 'new', 'new topic': 'new topic', 'newSectionHint': 'Start a new section on %s', 'null edit': 'null edit', 'nullEditHint': 'Submit an edit to %s, making no changes ', 'hist': 'hist', ///// history, diffs, editors, related 'history': 'history', 'historyHint': 'List the changes made to %s', 'last': 'last', 'lastEdit': 'lastEdit', 'mark patrolled': 'mark patrolled', 'markpatrolledHint': 'Mark this edit as patrolled', 'show last edit': 'most recent edit', 'Show the last edit': 'Show the effects of the most recent change', 'lastContrib': 'lastContrib', 'last set of edits': 'latest edits', 'lastContribHint': 'Show the net effect of changes made by the last editor', 'cur': 'cur', 'diffCur': 'diffCur', 'Show changes since revision %s': 'Show changes since revision %s', '%s old': '%s old', // as in 4 weeks old 'oldEdit': 'oldEdit', 'purge': 'purge', 'purgeHint': 'Demand a fresh copy of %s', 'raw': 'source', 'rawHint': 'Download the source of %s', 'render': 'simple', 'renderHint': 'Show a plain HTML version of %s', 'Show the edit made to get revision': 'Show the edit made to get revision', 'sinceMe': 'sinceMe', 'changes since mine': 'diff my edit', 'sinceMeHint': 'Show changes since my last edit', 'Couldn\'t find an edit by %s\nin the last %s edits to\n%s': 'Couldn\'t find an edit by %s\nin the last %s edits to\n%s', 'eds': 'eds', 'editors': 'editors', 'editorListHint': 'List the users who have edited %s', 'related': 'related', 'relatedChanges': 'relatedChanges', 'related changes': 'related changes', 'RecentchangeslinkedHint': 'Show changes in articles related to %s', 'editOld': 'editOld', ///// edit old version, or revert 'rv': 'rv', 'revert': 'revert', 'revertHint': 'Revert to %s', 'defaultpopupRedlinkSummary': 'Removing link to empty page [[%s]] using [[:en:Wikipedia:Tools/Navigation_popups|popups]]', 'defaultpopupFixDabsSummary': 'Disambiguate [[%s]] to [[%s]] using [[:en:Wikipedia:Tools/Navigation_popups|popups]]', 'defaultpopupFixRedirsSummary': 'Redirect bypass from [[%s]] to [[%s]] using [[:en:Wikipedia:Tools/Navigation_popups|popups]]', 'defaultpopupExtendedRevertSummary': 'Revert to revision dated %s by %s, oldid %s using [[:en:Wikipedia:Tools/Navigation_popups|popups]]', 'defaultpopupRevertToPreviousSummary': 'Revert to the revision prior to revision %s using [[:en:Wikipedia:Tools/Navigation_popups|popups]]', 'defaultpopupRevertSummary': 'Revert to revision %s using [[:en:Wikipedia:Tools/Navigation_popups|popups]]', 'defaultpopupQueriedRevertToPreviousSummary': 'Revert to the revision prior to revision $1 dated $2 by $3 using [[:en:Wikipedia:Tools/Navigation_popups|popups]]', 'defaultpopupQueriedRevertSummary': 'Revert to revision $1 dated $2 by $3 using [[:en:Wikipedia:Tools/Navigation_popups|popups]]', 'defaultpopupRmDabLinkSummary': 'Remove link to dab page [[%s]] using [[:en:Wikipedia:Tools/Navigation_popups|popups]]', 'Redirects': 'Redirects', // as in Redirects to ... ' to ': ' to ', // as in Redirects to ... 'Bypass redirect': 'Bypass redirect', 'Fix this redirect': 'Fix this redirect', 'disambig': 'disambig', ///// add or remove dab etc. 'disambigHint': 'Disambiguate this link to [[%s]]', 'Click to disambiguate this link to:': 'Click to disambiguate this link to:', 'remove this link': 'remove this link', 'remove all links to this page from this article': 'remove all links to this page from this article', 'remove all links to this disambig page from this article': 'remove all links to this disambig page from this article', 'mainlink': 'mainlink', ///// links, watch, unwatch 'wikiLink': 'wikiLink', 'wikiLinks': 'wikiLinks', 'links here': 'links here', 'whatLinksHere': 'whatLinksHere', 'what links here': 'what links here', 'WhatlinkshereHint': 'List the pages that are hyperlinked to %s', 'unwatchShort': 'un', 'watchThingy': 'watch', // called watchThingy because {}.watch is a function 'watchHint': 'Add %s to my watchlist', 'unwatchHint': 'Remove %s from my watchlist', 'Only found one editor: %s made %s edits': 'Only found one editor: %s made %s edits', '%s seems to be the last editor to the page %s': '%s seems to be the last editor to the page %s', 'rss': 'rss', ///////////////////////////////////// // diff previews ///////////////////////////////////// 'Diff truncated for performance reasons': 'Diff truncated for performance reasons', 'Old revision': 'Old revision', 'New revision': 'New revision', 'Something went wrong :-(': 'Something went wrong :-(', 'Empty revision, maybe non-existent': 'Empty revision, maybe non-existent', 'Unknown date': 'Unknown date', ///////////////////////////////////// // other special previews ///////////////////////////////////// 'Empty category': 'Empty category', 'Category members (%s shown)': 'Category members (%s shown)', 'No image links found': 'No image links found', 'File links': 'File links', 'not commons': 'There is no file with this name on the Wikimedia Commons.', 'commons only': 'This file is from the Wikimedia Commons.', 'No image found': 'No image found', 'commons dupe': 'The same file appears to be available on the Wikimedia Commons.', 'commons conflict': 'A different file with the same name is available on the Wikimedia Commons.', ///////////////////////////////////// // user-related actions and info ///////////////////////////////////// 'user': 'user', ///// user page, talk, email, space 'user&nbsp;page': 'user&nbsp;page', 'user talk': 'user talk', 'edit user talk': 'edit user talk', 'leave comment': 'leave comment', 'email': 'email', 'email user': 'email user', 'EmailuserHint': 'Send an email to %s', 'space': 'space', // short form for userSpace link 'PrefixindexHint': 'Show pages in the userspace of %s', 'count': 'count', ///// contributions, tree, log 'edit counter': 'edit counter', 'katelinkHint': 'Count the countributions made by %s', 'contribs': 'contribs', 'contributions': 'contributions', 'ContributionsHint': 'List the contributions made by %s', 'tree': 'tree', 'contribsTreeHint': 'Explore %s\'s contributions by namespace and by article', 'log': 'log', 'user log': 'user log', 'userLogHint': 'Show %s\'s user log', 'arin': 'ARIN lookup', ///// ARIN lookup, block user or IP 'Look up %s in ARIN whois database': 'Look up %s in the ARIN whois database', 'unblockShort': 'un', 'block': 'block', 'block user': 'block user', 'IpblocklistHint': 'Unblock %s', 'BlockipHint': 'Prevent %s from editing', 'block log': 'block log', 'blockLogHint': 'Show the block log for %s', 'protectLogHint': 'Show the protection log for %s', 'pageLogHint': 'Show the page log for %s', 'deleteLogHint': 'Show the deletion log for %s', 'Invalid %s %s': 'The option %s is invalid: %s', 'No backlinks found': 'No backlinks found', ' and more': ' and more', 'undo': 'undo', 'undoHint': 'undo this edit', 'Download preview data': 'Download preview data', ///////////////////////////////////// // Autoediting ///////////////////////////////////// 'Enter a non-empty edit summary or press cancel to abort': 'Enter a non-empty edit summary or press cancel to abort', 'Failed to get revision information, please edit manually.\n\n': 'Failed to get revision information, please edit manually.\n\n', 'The %s button has been automatically clicked. Please wait for the next page to load.': 'The %s button has been automatically clicked. Please wait for the next page to load.', 'Could not find button %s. Please check the settings in your javascript file.': 'Could not find button %s. Please check the settings in your javascript file.', ///////////////////////////////////// // Popups setup ///////////////////////////////////// 'Open full-size image': 'Open full-size image', 'zxy': 'zxy' }; function popupString(str) { if (typeof popupStrings != 'undefined' && popupStrings && popupStrings[str]) { return popupStrings[str]; } if (pg.string[str]) { return pg.string[str]; } return str; } function tprintf(str,subs) { if (typeof subs != typeof []) { subs = [subs]; } return simplePrintf(popupString(str), subs); } //</NOLITE> // ENDFILE: strings.js p880kbmgtsdh8nsotrpkjctienarrji 14875 14874 2010-09-03T18:03:25Z Darklama 2894 updated from WP 14875 javascript text/javascript var popupVersion="en:MediaWiki:Gadget-popups.js " + /*/{{subst:Selfsubst/now string|js|/*/ "2010-08-30 16:11:49 (UTC)" /*/}}/*/; // STARTFILE: main.js // ********************************************************************** // ** ** // ** changes to this file affect many users. ** // ** please discuss on the talk page before editing ** // ** ** // ********************************************************************** // ** ** // ** if you do edit this file, be sure that your editor recognizes it ** // ** as utf8, or the weird and wonderful characters in the namespaces ** // ** below will be completely broken. You can check with the show ** // ** changes button before submitting the edit. ** // ** test: مدیا מיוחד Мэдыя ** // ** ** // ********************************************************************** ////////////////////////////////////////////////// // Globals // // Trying to shove as many of these as possible into the pg (popup globals) object function pg(){}; // dummy to stop errors window.pg = { re: {}, // regexps ns: {}, // namespaces string: {}, // translatable strings wiki: {}, // local site info misc: {}, // YUCK PHOOEY option: {}, // options, see newOption etc optionDefault: {}, // default option values flag: {}, // misc flags cache: {}, // page and image cache structures: {}, // navlink structures timer: {}, // all sorts of timers (too damn many) counter: {}, // .. and all sorts of counters current: {}, // state info endoflist: null }; window.pop = { // wrap various functions in here init: {}, util: {}, endoflist: null }; function popupsReady() { if (!window.pg) { return false; } if (!pg.flag) { return false; } if (!pg.flag.finishedLoading) { return false; } return true; } /// Local Variables: /// /// mode:c /// /// End: /// // ENDFILE: main.js // STARTFILE: actions.js function setupTooltips(container, remove, force, popData) { log('setupTooltips, container='+container+', remove='+remove); if (!container) { //<NOLITE> // the main initial call if (getValueOf('popupOnEditSelection') && window.doSelectionPopup && document && document.editform && document.editform.wpTextbox1) { document.editform.wpTextbox1.onmouseup=doSelectionPopup; } //</NOLITE> // article/content is a structure-dependent thing container = defaultPopupsContainer(); } if (!remove && !force && container.ranSetupTooltipsAlready) { return; } container.ranSetupTooltipsAlready = !remove; var anchors; anchors=container.getElementsByTagName('A'); setupTooltipsLoop(anchors, 0, 250, 100, remove, popData); } function defaultPopupsContainer() { if (getValueOf('popupOnlyArticleLinks')) { return document.getElementById('article') || document.getElementById('content') || document.getElementById('mw_content') || document; } return document; } function setupTooltipsLoop(anchors,begin,howmany,sleep, remove, popData) { log(simplePrintf('setupTooltipsLoop(%s,%s,%s,%s,%s)', arguments)); var finish=begin+howmany; var loopend = min(finish, anchors.length); var j=loopend - begin; log ('setupTooltips: anchors.length=' + anchors.length + ', begin=' + begin + ', howmany=' + howmany + ', loopend=' + loopend + ', remove=' + remove); var doTooltip= remove ? removeTooltip : addTooltip; // try a faster (?) loop construct if (j > 0) { do { var a=anchors[loopend - j]; if (!a || !a.href) { log('got null anchor at index ' + loopend - j); continue; } doTooltip(a, popData); } while (--j); } if (finish < anchors.length) { setTimeout(function() { setupTooltipsLoop(anchors,finish,howmany,sleep,remove,popData);}, sleep); } else { if ( !remove && ! getValueOf('popupTocLinks')) { rmTocTooltips(); } pg.flag.finishedLoading=true; } } // eliminate popups from the TOC // This also kills any onclick stuff that used to be going on in the toc function rmTocTooltips() { var toc=document.getElementById('toc'); if (toc) { var tocLinks=toc.getElementsByTagName('A'); var tocLen = tocLinks.length; for (j=0; j<tocLen; ++j) { removeTooltip(tocLinks[j], true); } } } function addTooltip(a, popData) { if ( !isPopupLink(a) ) { return; } a.onmouseover=mouseOverWikiLink; a.onmouseout= mouseOutWikiLink; a.onmousedown = killPopup; a.hasPopup = true; a.popData = popData; } function removeTooltip(a) { if ( !a.hasPopup ) { return; } a.onmouseover = null; a.onmouseout = null; if (a.originalTitle) { a.title = a.originalTitle; } a.hasPopup=false; } function removeTitle(a) { if (a.originalTitle) { return; } a.originalTitle=a.title; a.title=''; } function restoreTitle(a) { if ( a.title || !a.originalTitle ) { return; } a.title = a.originalTitle; a.originalTitle=''; } function registerHooks(np) { var popupMaxWidth=getValueOf('popupMaxWidth'); if (typeof popupMaxWidth == 'number') { var setMaxWidth = function () { np.mainDiv.style.maxWidth = popupMaxWidth + 'px'; np.maxWidth = popupMaxWidth; try { // hack for IE // see http://www.svendtofte.com/code/max_width_in_ie/ // use setExpression as documented here on msdn: http://tinyurl dot com/dqljn if (np.mainDiv.style.setExpression) { np.mainDiv.style.setExpression( 'width', 'document.body.clientWidth > ' + popupMaxWidth + ' ? "' +popupMaxWidth + 'px": "auto"'); } } catch (errors) { errlog( "Running on IE8 are we not?: " + errors ); } }; np.addHook(setMaxWidth, 'unhide', 'before'); } //<NOLITE> if (window.addPopupShortcuts && window.rmPopupShortcuts) { np.addHook(addPopupShortcuts, 'unhide', 'after'); np.addHook(rmPopupShortcuts, 'hide', 'before'); } //</NOLITE> } function mouseOverWikiLink(evt) { if (!window.popupsReady || !window.popupsReady()) { return; } if (!evt && window.event) {evt=window.event}; return mouseOverWikiLink2(this, evt); } function footnoteTarget(a) { var aTitle=Title.fromAnchor(a); // We want ".3A" rather than "%3A" or "?" here, so use the anchor property directly var anch = aTitle.anchor; if ( ! /^(cite_note-|_note-|endnote)/.test(anch) ) { return false; } var lTitle=Title.fromURL(location.href); if ( lTitle.toString(true) != aTitle.toString(true) ) { return false; } var el=document.getElementById(anch); while ( el && typeof el.nodeName == 'string') { var nt = el.nodeName.toLowerCase(); if ( nt == 'li' ) { return el; } else if ( nt == 'body' ) { return false; } else if ( el.parentNode ) { el=el.parentNode; } else { return false; } } return false; } function footnotePreview(x, navpop) { setPopupHTML('<hr>' + x.innerHTML, 'popupPreview', navpop.idNumber, getValueOf('popupSubpopups') ? function() { setupTooltips(document.getElementById('popupPreview' + navpop.idNumber)); } : null); } // var modid=0; // if(!window.opera) { window.opera={postError: console.log}; } function modifierKeyHandler(a) { return function(evt) { // opera.postError('modifierKeyHandler called' + (++modid)); // opera.postError(''+evt + modid); // for (var i in evt) { // opera.postError('' + modid + ' ' + i + ' ' + evt[i]); // } // opera.postError(''+evt.ctrlKey + modid); var mod=getValueOf('popupModifier'); if (!mod) { return true; } if (!evt && window.event) {evt=window.event}; // opera.postError('And now....'+modid); // opera.postError(''+evt+modid); // opera.postError(''+evt.ctrlKey+modid); var modPressed = modifierPressed(evt); var action = getValueOf('popupModifierAction'); // FIXME: probable bug - modifierPressed should be modPressed below? if ( action == 'disable' && modifierPressed ) { return true; } if ( action == 'enable' && !modifierPressed ) { return true; } mouseOverWikiLink2(a, evt); }; } function modifierPressed(evt) { var mod=getValueOf('popupModifier'); if (!mod) { return false; } if (!evt && window.event) {evt=window.event}; // opera.postError('And now....'+modid); // opera.postError(''+evt+modid); // opera.postError(''+evt.ctrlKey+modid); return ( evt && mod && evt[mod.toLowerCase() + 'Key'] ); } function dealWithModifier(a,evt) { if (!getValueOf('popupModifier')) { return false; } var action = getValueOf('popupModifierAction'); if ( action == 'enable' && !modifierPressed(evt) || action == 'disable' && modifierPressed(evt) ) { // if the modifier is needed and not pressed, listen for it until // we mouseout of this link. restoreTitle(a); var addHandler='addEventListener'; var rmHandler='removeEventListener'; var on=''; if (!document.addEventListener) { addHandler='attachEvent'; rmHandler='detachEvent'; on='on'; } if (!document[addHandler]) { // forget it return; } a.modifierKeyHandler=modifierKeyHandler(a); switch (action) { case 'enable': document[addHandler](on+'keydown', a.modifierKeyHandler, false); a[addHandler](on+'mouseout', function() { document[rmHandler](on+'keydown', a.modifierKeyHandler, false); }, true); break; case 'disable': document[addHandler](on+'keyup', a.modifierKeyHandler, false); } return true; } return false; } function mouseOverWikiLink2(a, evt) { if (dealWithModifier(a,evt)) { return; } if ( getValueOf('removeTitles') ) { removeTitle(a); } if ( a==pg.current.link && a.navpopup && a.navpopup.isVisible() ) { return; } pg.current.link=a; if (getValueOf('simplePopups') && pg.option.popupStructure===null) { // reset *default value* of popupStructure setDefault('popupStructure', 'original'); } var article=(new Title()).fromAnchor(a); // set global variable (ugh) to hold article (wikipage) pg.current.article = article; if (!a.navpopup) { // FIXME: this doesn't behave well if you mouse out of a popup // directly into a link with the same href if (pg.current.linksHash[a.href] && false) { a.navpopup = pg.current.linksHash[a.href]; } else { a.navpopup=newNavpopup(a, article); pg.current.linksHash[a.href] = a.navpopup; pg.current.links.push(a); } } if (a.navpopup.pending===null || a.navpopup.pending!==0) { // either fresh popups or those with unfinshed business are redone from scratch simplePopupContent(a, article); } a.navpopup.showSoonIfStable(a.navpopup.delay); getValueOf('popupInitialWidth'); clearInterval(pg.timer.checkPopupPosition); pg.timer.checkPopupPosition=setInterval(checkPopupPosition, 600); if(getValueOf('simplePopups')) { if (getValueOf('popupPreviewButton') && !a.simpleNoMore) { var d=document.createElement('div'); d.className='popupPreviewButtonDiv'; var s=document.createElement('span'); d.appendChild(s); s.className='popupPreviewButton'; s['on' + getValueOf('popupPreviewButtonEvent')] = function() { a.simpleNoMore=true; nonsimplePopupContent(a,article); } s.innerHTML=popupString('show preview'); setPopupHTML(d, 'popupPreview', a.navpopup.idNumber); } return; } if (a.navpopup.pending!==0 ) { nonsimplePopupContent(a, article); } } // simplePopupContent: the content that is shown even when simplePopups is true function simplePopupContent(a, article) { /* FIXME hack */ a.navpopup.hasPopupMenu=false; a.navpopup.setInnerHTML(popupHTML(a)); fillEmptySpans({navpopup:a.navpopup}); if (getValueOf('popupDraggable')) { var dragHandle = getValueOf('popupDragHandle') || null; if (dragHandle && dragHandle != 'all') { dragHandle += a.navpopup.idNumber; } setTimeout(function(){a.navpopup.makeDraggable(dragHandle);}, 150); } //<NOLITE> if (getValueOf('popupRedlinkRemoval') && a.className=='new') { setPopupHTML('<br>'+popupRedlinkHTML(article), 'popupRedlink', a.navpopup.idNumber); } //</NOLITE> } function debugData(navpopup) { if(getValueOf('popupDebugging') && navpopup.idNumber) { setPopupHTML('idNumber='+navpopup.idNumber + ', pending=' + navpopup.pending, 'popupError', navpopup.idNumber); } } function newNavpopup(a, article) { var navpopup = new Navpopup(); navpopup.fuzz=5; navpopup.delay=getValueOf('popupDelay')*1000; // increment global counter now navpopup.idNumber = ++pg.idNumber; navpopup.parentAnchor = a; navpopup.parentPopup = (a.popData && a.popData.owner); navpopup.article = article; registerHooks(navpopup); return navpopup; } function nonsimplePopupContent(a, article) { var diff=null, history=null; var params=parseParams(a.href); var oldid=(typeof params.oldid=='undefined' ? null : params.oldid); //<NOLITE> if(getValueOf('popupPreviewDiffs') && window.loadDiff) { diff=params.diff; } if(getValueOf('popupPreviewHistory')) { history=(params.action=='history'); } //</NOLITE> a.navpopup.pending=0; var x; if (x=footnoteTarget(a)) { footnotePreview(x, a.navpopup); //<NOLITE> } else if ( diff || diff === 0 ) { loadDiff(article, oldid, diff, a.navpopup); } else if ( history ) { loadAPIPreview('history', article, a.navpopup); } else if ( pg.re.contribs.test(a.href) ) { loadAPIPreview('contribs', article, a.navpopup); } else if ( pg.re.backlinks.test(a.href) ) { loadAPIPreview('backlinks', article, a.navpopup); } else if ( // FIXME should be able to get all preview combinations with options article.namespace()==pg.ns.image && ( getValueOf('imagePopupsForImages') || ! anchorContainsImage(a) ) ) { loadAPIPreview('imagepagepreview', article, a.navpopup); loadImage(article, a.navpopup); //</NOLITE> } else { if (article.namespace() == pg.ns.category && getValueOf('popupCategoryMembers')) { loadAPIPreview('category', article, a.navpopup); } else if ((article.namespace() == pg.ns.user || article.namespace() == pg.ns.usertalk) && getValueOf('popupUserInfo')) { loadAPIPreview('userinfo', article, a.navpopup); } startArticlePreview(article, oldid, a.navpopup); } } function pendingNavpopTask(navpop) { if (navpop && navpop.pending===null) { navpop.pending=0; } ++navpop.pending; debugData(navpop); } function completedNavpopTask(navpop) { if (navpop && navpop.pending) { --navpop.pending; } debugData(navpop); } function startArticlePreview(article, oldid, navpop) { navpop.redir=0; loadPreview(article, oldid, navpop); } function loadPreview(article, oldid, navpop) { pendingNavpopTask(navpop); if (!navpop.redir) { navpop.originalArticle=article; } if (!navpop.visible && getValueOf('popupLazyDownloads')) { var id=(navpop.redir) ? 'DOWNLOAD_PREVIEW_REDIR_HOOK' : 'DOWNLOAD_PREVIEW_HOOK'; navpop.addHook(function() { getWiki(article, insertPreview, oldid, navpop); return true; }, 'unhide', 'before', id); } else { getWiki(article, insertPreview, oldid, navpop); } } function loadPreviewFromRedir(redirMatch, navpop) { // redirMatch is a regex match var target = new Title().fromWikiText(redirMatch[2]); // overwrite (or add) anchor from original target // mediawiki does overwrite; eg [[User:Lupin/foo3#Done]] if ( navpop.article.anchor ) { target.anchor = navpop.article.anchor; } var trailingRubbish=redirMatch[4]; navpop.redir++; navpop.redirTarget=target; //<NOLITE> if (window.redirLink) { var warnRedir = redirLink(target, navpop.article); setPopupHTML(warnRedir, 'popupWarnRedir', navpop.idNumber); } //</NOLITE> navpop.article=target; fillEmptySpans({redir: true, redirTarget: target, navpopup:navpop}); return loadPreview(target, null, navpop); } function insertPreview(download) { if (!download.owner) { return; } var redirMatch = pg.re.redirect.exec(download.data); if (download.owner.redir===0 && redirMatch) { completedNavpopTask(download.owner); loadPreviewFromRedir(redirMatch, download.owner); return; } if (download.owner.visible || !getValueOf('popupLazyPreviews')) { insertPreviewNow(download); } else { var id=(download.owner.redir) ? 'PREVIEW_REDIR_HOOK' : 'PREVIEW_HOOK'; download.owner.addHook( function(){insertPreviewNow(download); return true;}, 'unhide', 'after', id ); } } function insertPreviewNow(download) { if (!download.owner) { return; } var wikiText=download.data; var navpop=download.owner; completedNavpopTask(navpop); var art=navpop.redirTarget || navpop.originalArticle; //<NOLITE> makeFixDabs(wikiText, navpop); if (getValueOf('popupSummaryData') && window.getPageInfo) { var info=getPageInfo(wikiText, download); setPopupTrailer(getPageInfo(wikiText, download), navpop.idNumber); } var imagePage=''; if (art.namespace()==pg.ns.image) { imagePage=art.toString(); } else { imagePage=getValidImageFromWikiText(wikiText); } if(imagePage) { loadImage(Title.fromWikiText(imagePage), navpop); } //</NOLITE> if (getValueOf('popupPreviews')) { insertArticlePreview(download, art, navpop); } } function insertArticlePreview(download, art, navpop) { if (download && typeof download.data == typeof ''){ if (art.namespace()==pg.ns.template && getValueOf('popupPreviewRawTemplates')) { // FIXME compare/consolidate with diff escaping code for wikitext var h='<hr><tt>' + download.data.entify().split('\\n').join('<br>\\n') + '</tt>'; setPopupHTML(h, 'popupPreview', navpop.idNumber); } else { var p=prepPreviewmaker(download.data, art, navpop); p.showPreview(); } } } function prepPreviewmaker(data, article, navpop) { // deal with tricksy anchors var d=anchorize(data, article.anchorString()); var urlBase=joinPath([pg.wiki.articlebase, article.urlString()]); var p=new Previewmaker(d, urlBase, navpop); return p; } // Try to imitate the way mediawiki generates HTML anchors from section titles function anchorize(d, anch) { if (!anch) { return d; } var anchRe=RegExp('=+\\s*' + literalizeRegex(anch).replace(/[_ ]/g, '[_ ]') + '\\s*=+'); var match=d.match(anchRe); if(match && match.length > 0 && match[0]) { return d.substring(d.indexOf(match[0])); } // now try to deal with == foo [[bar|baz]] boom == -> #foo_baz_boom var lines=d.split('\n'); for (var i=0; i<lines.length; ++i) { lines[i]=lines[i].replace(RegExp('[[]{2}([^|\\]]*?[|])?(.*?)[\\]]{2}', 'g'), '$2') .replace(/'''([^'])/g, '$1').replace(RegExp("''([^'])", 'g'), '$1'); if (lines[i].match(anchRe)) { return d.split('\n').slice(i).join('\n').replace(RegExp('^[^=]*'), ''); } } return d; } function killPopup() { if (getValueOf('popupShortcutKeys') && window.rmPopupShortcuts) { rmPopupShortcuts(); } if (!pg) { return; } pg.current.link && pg.current.link.navpopup && pg.current.link.navpopup.banish(); pg.current.link=null; abortAllDownloads(); if (pg.timer.checkPopupPosition !== null) { clearInterval(pg.timer.checkPopupPosition); pg.timer.checkPopupPosition=null; } return true; // preserve default action } // ENDFILE: actions.js // STARTFILE: domdrag.js /** @fileoverview The {@link Drag} object, which enables objects to be dragged around. <pre> ************************************************* dom-drag.js 09.25.2001 www.youngpup.net ************************************************** 10.28.2001 - fixed minor bug where events sometimes fired off the handle, not the root. ************************************************* Pared down, some hooks added by [[User:Lupin]] Copyright Aaron Boodman. Saying stupid things daily since March 2001. </pre> */ /** Creates a new Drag object. This is used to make various DOM elements draggable. @constructor */ function Drag () { /** Condition to determine whether or not to drag. This function should take one parameter, an Event. To disable this, set it to <code>null</code>. @type Function */ this.startCondition = null; /** Hook to be run when the drag finishes. This is passed the final coordinates of the dragged object (two integers, x and y). To disables this, set it to <code>null</code>. @type Function */ this.endHook = null; } /** Gets an event in a cross-browser manner. @param {Event} e @private */ Drag.prototype.fixE = function(e) { if (typeof e == 'undefined') { e = window.event; } if (typeof e.layerX == 'undefined') { e.layerX = e.offsetX; } if (typeof e.layerY == 'undefined') { e.layerY = e.offsetY; } return e; }; /** Initialises the Drag instance by telling it which object you want to be draggable, and what you want to drag it by. @param {DOMElement} o The "handle" by which <code>oRoot</code> is dragged. @param {DOMElement} oRoot The object which moves when <code>o</code> is dragged, or <code>o</code> if omitted. */ Drag.prototype.init = function(o, oRoot) { var dragObj = this; this.obj = o; o.onmousedown = function(e) { dragObj.start.apply( dragObj, [e]); }; o.dragging = false; o.popups_draggable = true; o.hmode = true; o.vmode = true; o.root = oRoot && oRoot !== null ? oRoot : o ; if (isNaN(parseInt(o.root.style.left, 10))) { o.root.style.left = "0px"; } if (isNaN(parseInt(o.root.style.top, 10))) { o.root.style.top = "0px"; } o.root.onthisStart = function(){}; o.root.onthisEnd = function(){}; o.root.onthis = function(){}; }; /** Starts the drag. @private @param {Event} e */ Drag.prototype.start = function(e) { var o = this.obj; // = this; e = this.fixE(e); if (this.startCondition && !this.startCondition(e)) { return; } var y = parseInt(o.vmode ? o.root.style.top : o.root.style.bottom, 10); var x = parseInt(o.hmode ? o.root.style.left : o.root.style.right, 10); o.root.onthisStart(x, y); o.lastMouseX = e.clientX; o.lastMouseY = e.clientY; var dragObj = this; o.onmousemoveDefault = document.onmousemove; o.dragging = true; document.onmousemove = function(e) { dragObj.drag.apply( dragObj, [e] ); }; document.onmouseup = function(e) { dragObj.end.apply( dragObj, [e] ); }; return false; }; /** Does the drag. @param {Event} e @private */ Drag.prototype.drag = function(e) { e = this.fixE(e); var o = this.obj; var ey = e.clientY; var ex = e.clientX; var y = parseInt(o.vmode ? o.root.style.top : o.root.style.bottom, 10); var x = parseInt(o.hmode ? o.root.style.left : o.root.style.right, 10 ); var nx, ny; nx = x + ((ex - o.lastMouseX) * (o.hmode ? 1 : -1)); ny = y + ((ey - o.lastMouseY) * (o.vmode ? 1 : -1)); this.obj.root.style[o.hmode ? "left" : "right"] = nx + "px"; this.obj.root.style[o.vmode ? "top" : "bottom"] = ny + "px"; this.obj.lastMouseX = ex; this.obj.lastMouseY = ey; this.obj.root.onthis(nx, ny); return false; }; /** Ends the drag. @private */ Drag.prototype.end = function() { document.onmousemove=this.obj.onmousemoveDefault; document.onmouseup = null; this.obj.dragging = false; if (this.endHook) { this.endHook( parseInt(this.obj.root.style[this.obj.hmode ? "left" : "right"], 10), parseInt(this.obj.root.style[this.obj.vmode ? "top" : "bottom"], 10)); } }; // ENDFILE: domdrag.js // STARTFILE: structures.js //<NOLITE> pg.structures.original={}; pg.structures.original.popupLayout=function () { return ['popupError', 'popupImage', 'popupTopLinks', 'popupTitle', 'popupData', 'popupOtherLinks', 'popupRedir', ['popupWarnRedir', 'popupRedirTopLinks', 'popupRedirTitle', 'popupRedirData', 'popupRedirOtherLinks'], 'popupMiscTools', ['popupRedlink'], 'popupPrePreviewSep', 'popupPreview', 'popupSecondPreview', 'popupPreviewMore', 'popupPostPreview', 'popupFixDab']; }; pg.structures.original.popupRedirSpans=function () { return ['popupRedir', 'popupWarnRedir', 'popupRedirTopLinks', 'popupRedirTitle', 'popupRedirData', 'popupRedirOtherLinks']; }; pg.structures.original.popupTitle=function (x) { log ('defaultstructure.popupTitle'); if (!getValueOf('popupNavLinks')) { return navlinkStringToHTML('<b><<mainlink>></b>',x.article,x.params); } return ''; }; pg.structures.original.popupTopLinks=function (x) { log ('defaultstructure.popupTopLinks'); if (getValueOf('popupNavLinks')) { return navLinksHTML(x.article, x.hint, x.params); } return ''; }; pg.structures.original.popupImage=function(x) { log ('original.popupImage, x.article='+x.article+', x.navpop.idNumber='+x.navpop.idNumber); return imageHTML(x.article, x.navpop.idNumber); }; pg.structures.original.popupRedirTitle=pg.structures.original.popupTitle; pg.structures.original.popupRedirTopLinks=pg.structures.original.popupTopLinks; function copyStructure(oldStructure, newStructure) { pg.structures[newStructure]={}; for (var prop in pg.structures[oldStructure]) { pg.structures[newStructure][prop]=pg.structures[oldStructure][prop]; } } copyStructure('original', 'nostalgia'); pg.structures.nostalgia.popupTopLinks=function(x) { var str=''; str += '<b><<mainlink|shortcut= >></b>'; // user links // contribs - log - count - email - block // count only if applicable; block only if popupAdminLinks str += 'if(user){<br><<contribs|shortcut=c>>'; str+='if(wikimedia){*<<count|shortcut=#>>}'; str+='if(ipuser){}else{*<<email|shortcut=E>>}if(admin){*<<block|shortcut=b>>}}'; // editing links // talkpage -> edit|new - history - un|watch - article|edit // other page -> edit - history - un|watch - talk|edit|new var editstr='<<edit|shortcut=e>>'; var editOldidStr='if(oldid){<<editOld|shortcut=e>>|<<revert|shortcut=v|rv>>|<<edit|cur>>}else{' + editstr + '}' var historystr='<<history|shortcut=h>>'; var watchstr='<<unwatch|unwatchShort>>|<<watch|shortcut=w|watchThingy>>'; str+='<br>if(talk){' + editOldidStr+'|<<new|shortcut=+>>' + '*' + historystr+'*'+watchstr + '*' + '<b><<article|shortcut=a>></b>|<<editArticle|edit>>' + '}else{' + // not a talk page editOldidStr + '*' + historystr + '*' + watchstr + '*' + '<b><<talk|shortcut=t>></b>|<<editTalk|edit>>|<<newTalk|shortcut=+|new>>' + '}'; // misc links str += '<br><<whatLinksHere|shortcut=l>>*<<relatedChanges|shortcut=r>>'; str += 'if(admin){<br>}else{*}<<move|shortcut=m>>'; // admin links str += 'if(admin){*<<unprotect|unprotectShort>>|<<protect|shortcut=p>>*' + '<<undelete|undeleteShort>>|<<delete|shortcut=d>>}'; return navlinkStringToHTML(str, x.article, x.params); }; pg.structures.nostalgia.popupRedirTopLinks=pg.structures.nostalgia.popupTopLinks; /** -- fancy -- **/ copyStructure('original', 'fancy'); pg.structures.fancy.popupTitle=function (x) { return navlinkStringToHTML('<font size=+0><<mainlink>></font>',x.article,x.params); }; pg.structures.fancy.popupTopLinks=function(x) { var hist='<<history|shortcut=h|hist>>|<<lastEdit|shortcut=/|last>>if(mainspace_en){|<<editors|shortcut=E|eds>>}'; var watch='<<unwatch|unwatchShort>>|<<watch|shortcut=w|watchThingy>>'; var move='<<move|shortcut=m|move>>'; return navlinkStringToHTML('if(talk){' + '<<edit|shortcut=e>>|<<new|shortcut=+|+>>*' + hist + '*' + '<<article|shortcut=a>>|<<editArticle|edit>>' + '*' + watch + '*' + move + '}else{<<edit|shortcut=e>>*' + hist + '*<<talk|shortcut=t|>>|<<editTalk|edit>>|<<newTalk|shortcut=+|new>>' + '*' + watch + '*' + move+'}<br>', x.article, x.params); }; pg.structures.fancy.popupOtherLinks=function(x) { var admin='<<unprotect|unprotectShort>>|<<protect|shortcut=p>>*<<undelete|undeleteShort>>|<<delete|shortcut=d|del>>'; var user='<<contribs|shortcut=c>>if(wikimedia){|<<count|shortcut=#|#>>}'; user+='if(ipuser){|<<arin>>}else{*<<email|shortcut=E|'+ popupString('email')+'>>}if(admin){*<<block|shortcut=b>>}'; var normal='<<whatLinksHere|shortcut=l|links here>>*<<relatedChanges|shortcut=r|related>>'; return navlinkStringToHTML('<br>if(user){' + user + '*}if(admin){'+admin+'if(user){<br>}else{*}}' + normal, x.article, x.params); }; pg.structures.fancy.popupRedirTitle=pg.structures.fancy.popupTitle; pg.structures.fancy.popupRedirTopLinks=pg.structures.fancy.popupTopLinks; pg.structures.fancy.popupRedirOtherLinks=pg.structures.fancy.popupOtherLinks; /** -- fancy2 -- **/ // hack for [[User:MacGyverMagic]] copyStructure('fancy', 'fancy2'); pg.structures.fancy2.popupTopLinks=function(x) { // hack out the <br> at the end and put one at the beginning return '<br>'+pg.structures.fancy.popupTopLinks(x).replace(RegExp('<br>$','i'),''); }; pg.structures.fancy2.popupLayout=function () { // move toplinks to after the title return ['popupError', 'popupImage', 'popupTitle', 'popupData', 'popupTopLinks', 'popupOtherLinks', 'popupRedir', ['popupWarnRedir', 'popupRedirTopLinks', 'popupRedirTitle', 'popupRedirData', 'popupRedirOtherLinks'], 'popupMiscTools', ['popupRedlink'], 'popupPrePreviewSep', 'popupPreview', 'popupSecondPreview', 'popupPreviewMore', 'popupPostPreview', 'popupFixDab']; }; /** -- menus -- **/ copyStructure('original', 'menus'); pg.structures.menus.popupLayout=function () { return ['popupError', 'popupImage', 'popupTopLinks', 'popupTitle', 'popupOtherLinks', 'popupRedir', ['popupWarnRedir', 'popupRedirTopLinks', 'popupRedirTitle', 'popupRedirData', 'popupRedirOtherLinks'], 'popupData', 'popupMiscTools', ['popupRedlink'], 'popupPrePreviewSep', 'popupPreview', 'popupSecondPreview', 'popupPreviewMore', 'popupPostPreview', 'popupFixDab']; }; function toggleSticky(uid) { var popDiv=document.getElementById('navpopup_maindiv'+uid); if (!popDiv) { return; } if (!popDiv.navpopup.sticky) { popDiv.navpopup.stick(); } else { popDiv.navpopup.unstick(); popDiv.navpopup.hide(); } } pg.structures.menus.popupTopLinks = function (x, shorter) { // FIXME maybe this stuff should be cached var s=[]; var dropdiv='<div class="popup_drop">'; var enddiv='</div>'; var endspan='</span>'; var hist='<<history|shortcut=h>>'; if (!shorter) { hist = '<menurow>' + hist + '|<<historyfeed|rss>>if(mainspace_en){|<<editors|shortcut=E>>}</menurow>'; } var lastedit='<<lastEdit|shortcut=/|show last edit>>'; var jsHistory='<<lastContrib|last set of edits>><<sinceMe|changes since mine>>'; var linkshere='<<whatLinksHere|shortcut=l|what links here>>'; var related='<<relatedChanges|shortcut=r|related changes>>'; var search='<menurow><<search|shortcut=s>>if(wikimedia){|<<globalsearch|shortcut=g|global>>}' + '|<<google|shortcut=G|web>></menurow>'; var watch='<menurow><<unwatch|unwatchShort>>|<<watch|shortcut=w|watchThingy>></menurow>'; var protect='<menurow><<unprotect|unprotectShort>>|' + '<<protect|shortcut=p>>|<<protectlog|log>></menurow>'; var del='<menurow><<undelete|undeleteShort>>|<<delete|shortcut=d>>|' + '<<deletelog|log>></menurow>'; var move='<<move|shortcut=m|move page>>'; var nullPurge='<menurow><<nullEdit|shortcut=n|null edit>>|<<purge|shortcut=P>></menurow>'; var viewOptions='<menurow><<view|shortcut=v>>|<<render|shortcut=S>>|<<raw>></menurow>'; var editRow='if(oldid){' + '<menurow><<edit|shortcut=e>>|<<editOld|shortcut=e|this&nbsp;revision>></menurow>' + '<menurow><<revert|shortcut=v>>|<<undo>></menurow>' + '}else{<<edit|shortcut=e>>}'; var markPatrolled='if(rcid){<<markpatrolled|mark patrolled>>}'; var newTopic='if(talk){<<new|shortcut=+|new topic>>}'; var protectDelete='if(admin){' + protect + del + '}'; if (getValueOf('popupActionsMenu')) { s.push( '<<mainlink>>*' + dropdiv + menuTitle('actions')); } else { s.push( dropdiv + '<<mainlink>>'); } s.push( '<menu>') s.push( editRow + markPatrolled + newTopic + hist + lastedit ) if (!shorter) { s.push(jsHistory); } s.push( move + linkshere + related) if (!shorter) { s.push(nullPurge + search); } if (!shorter) { s.push(viewOptions); } s.push('<hr>' + watch + protectDelete); s.push('<hr>' + 'if(talk){<<article|shortcut=a|view article>><<editArticle|edit article>>}' + 'else{<<talk|shortcut=t|talk page>><<editTalk|edit talk>>' + '<<newTalk|shortcut=+|new topic>>}</menu>' + enddiv); // user menu starts here var email='<<email|shortcut=E|email user>>'; var contribs= 'if(wikimedia){<menurow>}<<contribs|shortcut=c|contributions>>if(wikimedia){</menurow>}' + 'if(admin){<menurow><<deletedContribs>></menurow>}'; s.push('if(user){*' + dropdiv + menuTitle('user')); s.push('<menu>'); + s.push('<menurow><<userPage|shortcut=u|user&nbsp;page>>|<<userSpace|space>></menurow>'); s.push('<<userTalk|shortcut=t|user talk>><<editUserTalk|edit user talk>>' + '<<newUserTalk|shortcut=+|leave comment>>'); if(!shorter) { s.push( 'if(ipuser){<<arin>>}else{' + email + '}') } else { s.push( 'if(ipuser){}else{' + email + '}') } s.push('<hr>' + contribs + '<<userlog|shortcut=L|user log>>'); s.push('if(wikimedia){<<count|shortcut=#|edit counter>>}'); s.push('if(admin){<menurow><<unblock|unblockShort>>|<<block|shortcut=b|block user>></menurow>}'); s.push('<<blocklog|shortcut=B|block log>>' + getValueOf('popupExtraUserMenu')); s.push('</menu>' + enddiv + '}'); // popups menu starts here if (getValueOf('popupSetupMenu') && !x.navpop.hasPopupMenu /* FIXME: hack */) { x.navpop.hasPopupMenu=true; s.push('*' + dropdiv + menuTitle('popupsMenu') + '<menu>'); s.push('<<togglePreviews|toggle previews>>'); s.push('<<purgePopups|reset>>'); s.push('<<disablePopups|disable>>'); s.push('</menu>'+enddiv); } return navlinkStringToHTML(s.join(''), x.article, x.params); }; function menuTitle(s) { return '<a href="#" noPopup=1>' + popupString(s) + '</a>'; } pg.structures.menus.popupRedirTitle=pg.structures.menus.popupTitle; pg.structures.menus.popupRedirTopLinks=pg.structures.menus.popupTopLinks; copyStructure('menus', 'shortmenus'); pg.structures.shortmenus.popupTopLinks=function(x) { return pg.structures.menus.popupTopLinks(x,true); }; pg.structures.shortmenus.popupRedirTopLinks=pg.structures.shortmenus.popupTopLinks; copyStructure('shortmenus', 'dabshortmenus'); pg.structures.dabshortmenus.popupLayout=function () { return ['popupError', 'popupImage', 'popupTopLinks', 'popupTitle', 'popupOtherLinks', 'popupRedir', ['popupWarnRedir', 'popupRedirTopLinks', 'popupRedirTitle', 'popupRedirData', 'popupRedirOtherLinks'], 'popupData', 'popupMiscTools', ['popupRedlink'], 'popupFixDab', 'popupPrePreviewSep', 'popupPreview', 'popupSecondPreview', 'popupPreviewMore', 'popupPostPreview']; }; copyStructure('menus', 'dabmenus'); pg.structures.dabmenus.popupLayout=pg.structures.dabshortmenus.popupLayout; //</NOLITE> pg.structures.lite={}; pg.structures.lite.popupLayout=function () { return ['popupTitle', 'popupPreview' ]; }; pg.structures.lite.popupTitle=function (x) { log (x.article + ': structures.lite.popupTitle'); //return navlinkStringToHTML('<b><<mainlink>></b>',x.article,x.params); return '<div><span class="popup_mainlink"><b>' + x.article.toString() + '</b></span></div>'; }; // ENDFILE: structures.js // STARTFILE: autoedit.js //<NOLITE> function getParamValue(paramName, h) { if (typeof h == 'undefined' ) { h = document.location.href; } var cmdRe=RegExp('[&?]'+paramName+'=([^&]*)'); var m=cmdRe.exec(h); if (m) { try { return decodeURIComponent(m[1]); } catch (someError) {} } return null; } function substitute(data,cmdBody) { // alert('sub\nfrom: '+cmdBody.from+'\nto: '+cmdBody.to+'\nflags: '+cmdBody.flags); var fromRe=RegExp(cmdBody.from, cmdBody.flags); return data.replace(fromRe, cmdBody.to); } function execCmds(data, cmdList) { for (var i=0; i<cmdList.length; ++i) { data=cmdList[i].action(data, cmdList[i]); } return data; } function parseCmd(str) { // returns a list of commands if (!str.length) { return []; } var p=false; switch (str.charAt(0)) { case 's': p=parseSubstitute(str); break; default: return false; } if (p) { return [p].concat(parseCmd(p.remainder)); } return false; } function unEscape(str, sep) { return str.split('\\\\').join('\\').split('\\'+sep).join(sep).split('\\n').join('\n'); } function parseSubstitute(str) { // takes a string like s/a/b/flags;othercmds and parses it var from,to,flags,tmp; if (str.length<4) { return false; } var sep=str.charAt(1); str=str.substring(2); tmp=skipOver(str,sep); if (tmp) { from=tmp.segment; str=tmp.remainder; } else { return false; } tmp=skipOver(str,sep); if (tmp) { to=tmp.segment; str=tmp.remainder; } else { return false; } flags=''; if (str.length) { tmp=skipOver(str,';') || skipToEnd(str, ';'); if (tmp) {flags=tmp.segment; str=tmp.remainder; } } return {action: substitute, from: from, to: to, flags: flags, remainder: str}; } function skipOver(str,sep) { var endSegment=findNext(str,sep); if (endSegment<0) { return false; } var segment=unEscape(str.substring(0,endSegment), sep); return {segment: segment, remainder: str.substring(endSegment+1)}; } function skipToEnd(str,sep) { return {segment: str, remainder: ''}; } function findNext(str, ch) { for (var i=0; i<str.length; ++i) { if (str.charAt(i)=='\\') { i+=2; } if (str.charAt(i)==ch) { return i; } } return -1; } function setCheckbox(param, box) { var val=getParamValue(param); if (val!==null) { switch (val) { case '1': case 'yes': case 'true': box.checked=true; break; case '0': case 'no': case 'false': box.checked=false; } } } function autoEdit() { if (!setupPopups.completed) { setupPopups(); } if (!document.editform || !window.wgEnableAPI || !wgEnableAPI ) { return false; } if (window.autoEdit.alreadyRan) { return false; } window.autoEdit.alreadyRan=true; var cmdString=getParamValue('autoedit'); if (cmdString) { try { var editbox=document.editform.wpTextbox1; } catch (dang) { return; } var cmdList=parseCmd(cmdString); var input=editbox.value; var output=execCmds(input, cmdList); editbox.value=output; // wikEd user script compatibility if (typeof(wikEdUseWikEd) != 'undefined') { if (wikEdUseWikEd == true) { WikEdUpdateFrame(); } } } setCheckbox('autominor', document.editform.wpMinoredit); setCheckbox('autowatch', document.editform.wpWatchthis); var rvid = getParamValue('autorv'); if (rvid) { var url=pg.wiki.apiwikibase + '?action=query&format=json&prop=revisions&revids='+rvid; startDownload(url, null, autoEdit2); } else { autoEdit2(); } } function autoEdit2(d) { var summary=getParamValue('autosummary'); var summaryprompt=getParamValue('autosummaryprompt'); var summarynotice=''; if (d && d.data && getParamValue('autorv')) { var s = getRvSummary(summary, d.data); if (s===false) { summaryprompt=true; summarynotice=popupString('Failed to get revision information, please edit manually.\n\n'); summary = simplePrintf(summary, [getParamValue('autorv'), '(unknown)', '(unknown)']); } else { summary = s; } } if (summaryprompt) { var txt= summarynotice + popupString('Enter a non-empty edit summary or press cancel to abort'); var response=prompt(txt, summary); if (response) { summary=response; } else { return; } } if (summary) { document.editform.wpSummary.value=summary; } // Attempt to avoid possible premature clicking of the save button // (maybe delays in updates to the DOM are to blame?? or a red herring) setTimeout(autoEdit3, 100); } function autoClickToken() { return document.cookie.substr(document.cookie.indexOf("session=")+8,4); } function autoEdit3() { if( getParamValue('actoken') != autoClickToken()) return; var btn=getParamValue('autoclick'); if (btn) { if (document.editform && document.editform[btn]) { var button=document.editform[btn]; var msg=tprintf('The %s button has been automatically clicked. Please wait for the next page to load.', [ button.value ]); bannerMessage(msg); document.title='('+document.title+')'; button.click(); } else { alert(tprintf('Could not find button %s. Please check the settings in your javascript file.', [ btn ])); } } } function bannerMessage(s) { var headings=document.getElementsByTagName('h1'); if (headings) { var div=document.createElement('div'); div.innerHTML='<font size=+1><b>' + s + '</b></font>'; headings[0].parentNode.insertBefore(div, headings[0]); } } function getRvSummary(template, json) { try { var o=getJsObj(json); var edit = anyChild(o.query.pages).revisions[0]; } catch (badness) {return false;} var timestamp = edit.timestamp.split(/[A-Z]/g).join(' ').replace(/^ *| *$/g, ''); return simplePrintf(template, [edit.revid, timestamp, edit.user]); } //</NOLITE> // ENDFILE: autoedit.js // STARTFILE: downloader.js /** @fileoverview {@link Downloader}, a xmlhttprequest wrapper, and helper functions. */ /** Creates a new Downloader @constructor @class The Downloader class. Create a new instance of this class to download stuff. @param {String} url The url to download. This can be omitted and supplied later. */ function Downloader(url) { // Source: http://jibbering.com/2002/4/httprequest.html /** xmlhttprequest object which we're wrapping */ this.http = false; /*@cc_on @*/ /*@if (@_jscript_version >= 5) // JScript gives us Conditional compilation, // we can cope with old IE versions. // and security blocked creation of the objects. try { this.http = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { this.http = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { // this.http = false; } } @end @*/ if (! this.http && typeof XMLHttpRequest!='undefined') { this.http = new XMLHttpRequest(); } /** The url to download @type String */ this.url = url; /** A universally unique ID number @type integer */ this.id=null; /** Modification date, to be culled from the incoming headers @type Date @private */ this.lastModified = null; /** What to do when the download completes successfully @type Function @private */ this.callbackFunction = null; /** What to do on failure @type Function @private */ this.onFailure = null; /** Flag set on <code>abort</code> @type boolean */ this.aborted = false; /** HTTP method. See http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html for possibilities. @type String */ this.method='GET'; /** Async flag. @type boolean */ this.async=true; } new Downloader(); /** Submits the http request. */ Downloader.prototype.send = function (x) { if (!this.http) { return null; } return this.http.send(x); }; /** Aborts the download, setting the <code>aborted</code> field to true. */ Downloader.prototype.abort = function () { if (!this.http) { return null; } this.aborted=true; return this.http.abort(); }; /** Returns the downloaded data. */ Downloader.prototype.getData = function () {if (!this.http) { return null; } return this.http.responseText;}; /** Prepares the download. */ Downloader.prototype.setTarget = function () { if (!this.http) { return null; } this.http.open(this.method, this.url, this.async); }; /** Gets the state of the download. */ Downloader.prototype.getReadyState=function () {if (!this.http) { return null; } return this.http.readyState;}; pg.misc.downloadsInProgress = { }; /** Starts the download. Note that setTarget {@link Downloader#setTarget} must be run first */ Downloader.prototype.start=function () { if (!this.http) { return; } pg.misc.downloadsInProgress[this.id] = this; this.http.send(null); }; /** Gets the 'Last-Modified' date from the download headers. Should be run after the download completes. Returns <code>null</code> on failure. @return {Date} */ Downloader.prototype.getLastModifiedDate=function () { if(!this.http) { return null; } var lastmod=null; try { lastmod=this.http.getResponseHeader('Last-Modified'); } catch (err) {} if (lastmod) { return new Date(lastmod); } return null; }; /** Sets the callback function. @param {Function} f callback function, called as <code>f(this)</code> on success */ Downloader.prototype.setCallback = function (f) { if(!this.http) { return; } this.http.onreadystatechange = f; }; Downloader.prototype.getStatus = function() { if (!this.http) { return null; } return this.http.status; }; ////////////////////////////////////////////////// // helper functions /** Creates a new {@link Downloader} and prepares it for action. @param {String} url The url to download @param {integer} id The ID of the {@link Downloader} object @param {Function} callback The callback function invoked on success @return {String/Downloader} the {@link Downloader} object created, or 'ohdear' if an unsupported browser */ function newDownload(url, id, callback, onfailure) { var d=new Downloader(url); if (!d.http) { return 'ohdear'; } d.id=id; d.setTarget(); if (!onfailure) { onfailure=2; } var f = function () { if (d.getReadyState() == 4) { delete pg.misc.downloadsInProgress[this.id]; try { if ( d.getStatus() == 200 ) { d.data=d.getData(); d.lastModified=d.getLastModifiedDate(); callback(d); } else if (typeof onfailure == typeof 1) { if (onfailure > 0) { // retry newDownload(url, id, callback, onfailure - 1); } } else if (typeof onfailure == 'function') { onfailure(d,url,id,callback); } } catch (somerr) { /* ignore it */ } } }; d.setCallback(f); return d; } /** Simulates a download from cached data. The supplied data is put into a {@link Downloader} as if it had downloaded it. @param {String} url The url. @param {integer} id The ID. @param {Function} callback The callback, which is invoked immediately as <code>callback(d)</code>, where <code>d</code> is the new {@link Downloader}. @param {String} data The (cached) data. @param {Date} lastModified The (cached) last modified date. */ function fakeDownload(url, id, callback, data, lastModified, owner) { var d=newDownload(url,callback); d.owner=owner; d.id=id; d.data=data; d.lastModified=lastModified; return callback(d); } /** Starts a download. @param {String} url The url to download @param {integer} id The ID of the {@link Downloader} object @param {Function} callback The callback function invoked on success @return {String/Downloader} the {@link Downloader} object created, or 'ohdear' if an unsupported browser */ function startDownload(url, id, callback) { var d=newDownload(url, id, callback); if (typeof d == typeof '' ) { return d; } d.start(); return d; } /** Aborts all downloads which have been started. */ function abortAllDownloads() { for ( var x in pg.misc.downloadsInProgress ) { try { pg.misc.downloadsInProgress[x].aborted=true; pg.misc.downloadsInProgress[x].abort(); delete pg.misc.downloadsInProgress[x]; } catch (e) { } } } // ENDFILE: downloader.js // STARTFILE: livepreview.js // TODO: location is often not correct (eg relative links in previews) /** * InstaView - a Mediawiki to HTML converter in JavaScript * Version 0.6.1 * Copyright (C) Pedro Fayolle 2005-2006 * http://en.wikipedia.org/wiki/User:Pilaf * Distributed under the BSD license * * Changelog: * * 0.6.1 * - Fixed problem caused by \r characters * - Improved inline formatting parser * * 0.6 * - Changed name to InstaView * - Some major code reorganizations and factored out some common functions * - Handled conversion of relative links (i.e. [[/foo]]) * - Fixed misrendering of adjacent definition list items * - Fixed bug in table headings handling * - Changed date format in signatures to reflect Mediawiki's * - Fixed handling of [[:Image:...]] * - Updated MD5 function (hopefully it will work with UTF-8) * - Fixed bug in handling of links inside images * * To do: * - Better support for <math> * - Full support for <nowiki> * - Parser-based (as opposed to RegExp-based) inline wikicode handling (make it one-pass and bullet-proof) * - Support for templates (through AJAX) * - Support for coloured links (AJAX) */ var Insta = {} function setupLivePreview() { // options Insta.conf = { baseUrl: '', user: {}, wiki: { lang: pg.wiki.lang, interwiki: pg.wiki.interwiki, default_thumb_width: 180 }, paths: { articles: pg.wiki.articlePath + '/', // Only used for Insta previews with images. (not in popups) math: '/math/', images: 'http://upload.wikimedia.org/wikipedia/en/', // FIXME ( window.getImageUrlStart ? getImageUrlStart(pg.wiki.hostname) : ''), images_fallback: 'http://upload.wikimedia.org/wikipedia/commons/', magnify_icon: 'skins/common/images/magnify-clip.png' }, locale: { user: pg.ns.user, image: pg.ns.image, category: pg.ns.category, // shouldn't be used in popup previews, i think months: ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'] } } // options with default values or backreferences with (Insta.conf) { user.name = user.name || 'Wikipedian' user.signature = '[['+locale.user+':'+user.name+'|'+user.name+']]' //paths.images = 'http://upload.wikimedia.org/wikipedia/' + wiki.lang + '/' } // define constants Insta.BLOCK_IMAGE = new RegExp('^\\[\\[(?:File|Image|'+Insta.conf.locale.image+ '):.*?\\|.*?(?:frame|thumbnail|thumb|none|right|left|center)', 'i'); } Insta.dump = function(from, to) { if (typeof from == 'string') from = document.getElementById(from) if (typeof to == 'string') to = document.getElementById(to) to.innerHTML = this.convert(from.value) } Insta.convert = function(wiki) { var ll = (typeof wiki == 'string')? wiki.replace(/\r/g,'').split(/\n/): wiki, // lines of wikicode o='', // output p=0, // para flag $r // result of passing a regexp to $() // some shorthands function remain() { return ll.length } function sh() { return ll.shift() } // shift function ps(s) { o+=s } // push function f() // similar to C's printf, uses ? as placeholders, ?? to escape question marks { var i=1,a=arguments,f=a[0],o='',c,p for (;i<a.length; i++) if ((p=f.indexOf('?'))+1) { // allow character escaping i -= c=f.charAt(p+1)=='?'?1:0 o += f.substring(0,p)+(c?'?':a[i]) f=f.substr(p+1+c) } else break; return o+f } function html_entities(s) { return s.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;") } function max(a,b) { return (a>b)?a:b } function min(a,b) { return (a<b)?a:b } // return the first non matching character position between two strings function str_imatch(a, b) { for (var i=0, l=min(a.length, b.length); i<l; i++) if (a.charAt(i)!=b.charAt(i)) break return i } // compare current line against a string or regexp // if passed a string it will compare only the first string.length characters // if passed a regexp the result is stored in $r function $(c) { return (typeof c == 'string') ? (ll[0].substr(0,c.length)==c) : ($r = ll[0].match(c)) } function $$(c) { return ll[0]==c } // compare current line against a string function _(p) { return ll[0].charAt(p) } // return char at pos p function endl(s) { ps(s); sh() } function parse_list() { var prev=''; while (remain() && $(/^([*#:;]+)(.*)$/)) { var l_match = $r sh() var ipos = str_imatch(prev, l_match[1]) // close uncontinued lists for (var i=prev.length-1; i >= ipos; i--) { var pi = prev.charAt(i) if (pi=='*') ps('</ul>') else if (pi=='#') ps('</ol>') // close a dl only if the new item is not a dl item (:, ; or empty) else switch (l_match[1].charAt(i)) { case'':case'*':case'#': ps('</dl>') } } // open new lists for (var i=ipos; i<l_match[1].length; i++) { var li = l_match[1].charAt(i) if (li=='*') ps('<ul>') else if (li=='#') ps('<ol>') // open a new dl only if the prev item is not a dl item (:, ; or empty) else switch(prev.charAt(i)) { case'':case'*':case'#': ps('<dl>') } } switch (l_match[1].charAt(l_match[1].length-1)) { case '*': case '#': ps('<li>' + parse_inline_nowiki(l_match[2])); break case ';': ps('<dt>') var dt_match // handle ;dt :dd format if (dt_match = l_match[2].match(/(.*?)(:.*?)$/)) { ps(parse_inline_nowiki(dt_match[1])) ll.unshift(dt_match[2]) } else ps(parse_inline_nowiki(l_match[2])) break case ':': ps('<dd>' + parse_inline_nowiki(l_match[2])) } prev=l_match[1] } // close remaining lists for (var i=prev.length-1; i>=0; i--) ps(f('</?>', (prev.charAt(i)=='*')? 'ul': ((prev.charAt(i)=='#')? 'ol': 'dl'))) } function parse_table() { endl(f('<table?>', $(/^\{\|( .*)$/)? $r[1]: '')) for (;remain();) if ($('|')) switch (_(1)) { case '}': endl('</table>'); return case '-': endl(f('<tr ?>', $(/\|-*(.*)/)[1])); break default: parse_table_data() } else if ($('!')) parse_table_data() else sh() } function parse_table_data() { var td_line, match_i // 1: "|+", '|' or '+' // 2: ?? // 3: attributes ?? // TODO: finish commenting this regexp var td_match = sh().match(/^(\|\+|\||!)((?:([^[|]*?)\|(?!\|))?(.*))$/) if (td_match[1] == '|+') ps('<caption'); else ps('<t' + ((td_match[1]=='|')?'d':'h')) if (typeof td_match[3] != 'undefined') { ps(' ' + td_match[3]) match_i = 4 } else match_i = 2 ps('>') if (td_match[1] != '|+') { // use || or !! as a cell separator depending on context // NOTE: when split() is passed a regexp make sure to use non-capturing brackets td_line = td_match[match_i].split((td_match[1] == '|')? '||': /(?:\|\||!!)/) ps(parse_inline_nowiki(td_line.shift())) while (td_line.length) ll.unshift(td_match[1] + td_line.pop()) } else ps(td_match[match_i]) var tc = 0, td = [] for (;remain(); td.push(sh())) if ($('|')) { if (!tc) break // we're at the outer-most level (no nested tables), skip to td parse else if (_(1)=='}') tc-- } else if (!tc && $('!')) break else if ($('{|')) tc++ if (td.length) ps(Insta.convert(td)) } function parse_pre() { ps('<pre>') do endl(parse_inline_nowiki(ll[0].substring(1)) + "\n"); while (remain() && $(' ')) ps('</pre>') } function parse_block_image() { ps(parse_image(sh())) } function parse_image(str) { //<NOLITE> // get what's in between "[[Image:" and "]]" var tag = str.substring(str.indexOf(':') + 1, str.length - 2); var width; var attr = [], filename, caption = ''; var thumb=0, frame=0, center=0; var align=''; if (tag.match(/\|/)) { // manage nested links var nesting = 0; var last_attr; for (var i = tag.length-1; i > 0; i--) { if (tag.charAt(i) == '|' && !nesting) { last_attr = tag.substr(i+1); tag = tag.substring(0, i); break; } else switch (tag.substr(i-1, 2)) { case ']]': nesting++; i--; break; case '[[': nesting--; i--; } } attr = tag.split(/\s*\|\s*/); attr.push(last_attr); filename = attr.shift(); var w_match; for (;attr.length; attr.shift()) if (w_match = attr[0].match(/^(\d*)(?:[px]*\d*)?px$/)) width = w_match[1] else switch(attr[0]) { case 'thumb': case 'thumbnail': thumb=true; case 'frame': frame=true; break; case 'none': case 'right': case 'left': center=false; align=attr[0]; break; case 'center': center=true; align='none'; break; default: if (attr.length == 1) caption = attr[0]; } } else filename = tag; var o=''; if (frame) { if (align=='') align = 'right'; o += f("<div class='thumb t?'>", align); if (thumb) { if (!width) width = Insta.conf.wiki.default_thumb_width; o += f("<div style='width:?px;'>?", 2+width*1, make_image(filename, caption, width)) + f("<div class='thumbcaption'><div class='magnify' style='float:right'><a href='?' class='internal' title='Enlarge'><img src='?'></a></div>?</div>", Insta.conf.paths.articles + Insta.conf.locale.image + ':' + filename, Insta.conf.paths.magnify_icon, parse_inline_nowiki(caption) ) } else { o += '<div>' + make_image(filename, caption) + f("<div class='thumbcaption'>?</div>", parse_inline_nowiki(caption)) } o += '</div></div>'; } else if (align != '') { o += f("<div class='float?'><span>?</span></div>", align, make_image(filename, caption, width)); } else { return make_image(filename, caption, width); } return center? f("<div class='center'>?</div>", o): o; //</NOLITE> } function parse_inline_nowiki(str) { var start, lastend=0 var substart=0, nestlev=0, open, close, subloop; var html=''; while (-1 != (start = str.indexOf('<nowiki>', substart))) { html += parse_inline_wiki(str.substring(lastend, start)); start += 8; substart = start; subloop = true; do { open = str.indexOf('<nowiki>', substart); close = str.indexOf('</nowiki>', substart); if (close<=open || open==-1) { if (close==-1) { return html + html_entities(str.substr(start)); } substart = close+9; if (nestlev) { nestlev--; } else { lastend = substart; html += html_entities(str.substring(start, lastend-9)); subloop = false; } } else { substart = open+8; nestlev++; } } while (subloop) } return html + parse_inline_wiki(str.substr(lastend)); } function make_image(filename, caption, width) { //<NOLITE> // uppercase first letter in file name filename = filename.charAt(0).toUpperCase() + filename.substr(1); // replace spaces with underscores filename = filename.replace(/ /g, '_'); caption = strip_inline_wiki(caption); var md5 = hex_md5(filename); var source = md5.charAt(0) + '/' + md5.substr(0,2) + '/' + filename; if (width) width = "width='" + width + "px'"; var img = f("<img onerror=\"this.onerror=null;this.src='?'\" src='?' ? ?>", Insta.conf.paths.images_fallback + source, Insta.conf.paths.images + source, (caption!='')? "alt='" + caption + "'" : '', width); return f("<a class='image' ? href='?'>?</a>", (caption!='')? "title='" + caption + "'" : '', Insta.conf.paths.articles + Insta.conf.locale.image + ':' + filename, img); //</NOLITE> } function parse_inline_images(str) { //<NOLITE> var start, substart=0, nestlev=0; var loop, close, open, wiki, html; while (-1 != (start=str.indexOf('[[', substart))) { if(str.substr(start+2).match(RegExp('^(Image|File|' + Insta.conf.locale.image + '):','i'))) { loop=true; substart=start; do { substart+=2; close=str.indexOf(']]',substart); open=str.indexOf('[[',substart); if (close<=open||open==-1) { if (close==-1) return str; substart=close; if (nestlev) { nestlev--; } else { wiki=str.substring(start,close+2); html=parse_image(wiki); str=str.replace(wiki,html); substart=start+html.length; loop=false; } } else { substart=open; nestlev++; } } while (loop) } else break; } //</NOLITE> return str; } // the output of this function doesn't respect the FILO structure of HTML // but since most browsers can handle it I'll save myself the hassle function parse_inline_formatting(str) { var em,st,i,li,o=''; while ((i=str.indexOf("''",li))+1) { o += str.substring(li,i); li=i+2; if (str.charAt(i+2)=="'") { li++; st=!st; o+=st?'<strong>':'</strong>'; } else { em=!em; o+=em?'<em>':'</em>'; } } return o+str.substr(li); } function parse_inline_wiki(str) { var aux_match; str = parse_inline_images(str); str = parse_inline_formatting(str); // math while (aux_match = str.match(/<(?:)math>(.*?)<\/math>/i)) { var math_md5 = hex_md5(aux_match[1]); str = str.replace(aux_match[0], f("<img src='?.png'>", Insta.conf.paths.math+math_md5)); } // Build a Mediawiki-formatted date string var date = new Date; var minutes = date.getUTCMinutes(); if (minutes < 10) minutes = '0' + minutes; var date = f("?:?, ? ? ? (UTC)", date.getUTCHours(), minutes, date.getUTCDate(), Insta.conf.locale.months[date.getUTCMonth()], date.getUTCFullYear()); // text formatting return str. // signatures replace(/~{5}(?!~)/g, date). replace(/~{4}(?!~)/g, Insta.conf.user.name+' '+date). replace(/~{3}(?!~)/g, Insta.conf.user.name). // [[:Category:...]], [[:Image:...]], etc... replace(RegExp('\\[\\[:((?:'+Insta.conf.locale.category+'|Image|File|'+Insta.conf.locale.image+'|'+Insta.conf.wiki.interwiki+'):[^|]*?)\\]\\](\w*)','gi'), "<a href='"+Insta.conf.paths.articles+"$1'>$1$2</a>"). // remove straight category and interwiki tags replace(RegExp('\\[\\[(?:'+Insta.conf.locale.category+'|'+Insta.conf.wiki.interwiki+'):.*?\\]\\]','gi'),''). // [[:Category:...|Links]], [[:Image:...|Links]], etc... replace(RegExp('\\[\\[:((?:'+Insta.conf.locale.category+'|Image|File|'+Insta.conf.locale.image+'|'+Insta.conf.wiki.interwiki+'):.*?)\\|([^\\]]+?)\\]\\](\\w*)','gi'), "<a href='"+Insta.conf.paths.articles+"$1'>$2$3</a>"). // [[/Relative links]] replace(/\[\[(\/[^|]*?)\]\]/g, f("<a href='?$1'>$1</a>", Insta.conf.baseUrl)). // [[/Replaced|Relative links]] replace(/\[\[(\/.*?)\|(.+?)\]\]/g, f("<a href='?$1'>$2</a>", Insta.conf.baseUrl)). // [[Common links]] replace(/\[\[([^|]*?)\]\](\w*)/g, f("<a href='?$1'>$1$2</a>", Insta.conf.paths.articles)). // [[Replaced|Links]] replace(/\[\[(.*?)\|([^\]]+?)\]\](\w*)/g, f("<a href='?$1'>$2$3</a>", Insta.conf.paths.articles)). // [[Stripped:Namespace|Namespace]] replace(/\[\[([^\]]*?:)?(.*?)( *\(.*?\))?\|\]\]/g, f("<a href='?$1$2$3'>$2</a>", Insta.conf.paths.articles)). // External links replace(/\[(https?|news|ftp|mailto|gopher|irc):(\/*)([^\]]*?) (.*?)\]/g, "<a class='external' href='$1:$2$3'>$4</a>"). replace(/\[http:\/\/(.*?)\]/g, "<a class='external' href='http://$1'>[#]</a>"). replace(/\[(news|ftp|mailto|gopher|irc):(\/*)(.*?)\]/g, "<a class='external' href='$1:$2$3'>$1:$2$3</a>"). replace(/(^| )(https?|news|ftp|mailto|gopher|irc):(\/*)([^ $]*[^.,!?;: $])/g, "$1<a class='external' href='$2:$3$4'>$2:$3$4</a>"). replace('__NOTOC__',''). replace('__NOEDITSECTION__',''); } /* */ function strip_inline_wiki(str) { return str .replace(/\[\[[^\]]*\|(.*?)\]\]/g,'$1') .replace(/\[\[(.*?)\]\]/g,'$1') .replace(/''(.*?)''/g,'$1'); } // begin parsing for (;remain();) if ($(/^(={1,6})(.*)\1(.*)$/)) { p=0 endl(f('<h?>?</h?>?', $r[1].length, parse_inline_nowiki($r[2]), $r[1].length, $r[3])) } else if ($(/^[*#:;]/)) { p=0 parse_list() } else if ($(' ')) { p=0 parse_pre() } else if ($('{|')) { p=0 parse_table() } else if ($(/^----+$/)) { p=0 endl('<hr>') } else if ($(Insta.BLOCK_IMAGE)) { p=0 parse_block_image() } else { // handle paragraphs if ($$('')) { if (p = (remain()>1 && ll[1]==(''))) endl('<p><br>') } else { if(!p) { ps('<p>') p=1 } ps(parse_inline_nowiki(ll[0]) + ' ') } sh(); } return o }; window.wiki2html=function(txt,baseurl) { Insta.conf.baseUrl=baseurl; return Insta.convert(txt); }; // ENDFILE: livepreview.js // STARTFILE: pageinfo.js //<NOLITE> function popupFilterPageSize(data) { return formatBytes(data.length); } function popupFilterCountLinks(data) { var num=countLinks(data); return String(num) + '&nbsp;' + ((num!=1)?popupString('wikiLinks'):popupString('wikiLink')); } function popupFilterCountImages(data) { var num=countImages(data); return String(num) + '&nbsp;' + ((num!=1)?popupString('images'):popupString('image')); } function popupFilterCountCategories(data) { var num=countCategories(data); return String(num) + '&nbsp;' + ((num!=1)?popupString('categories'):popupString('category')); } function popupFilterLastModified(data,download) { var lastmod=download.lastModified; var now=new Date(); var age=now-lastmod; if (lastmod && getValueOf('popupLastModified')) { return (tprintf('%s old', [formatAge(age)])).replace(RegExp(' ','g'), '&nbsp;'); } return ''; } function formatAge(age) { // coerce into a number var a=0+age, aa=a; var seclen = 1000; var minlen = 60*seclen; var hourlen = 60*minlen; var daylen = 24*hourlen; var weeklen = 7*daylen; var numweeks = (a-a%weeklen)/weeklen; a = a-numweeks*weeklen; var sweeks = addunit(numweeks, 'week'); var numdays = (a-a%daylen)/daylen; a = a-numdays*daylen; var sdays = addunit(numdays, 'day'); var numhours = (a-a%hourlen)/hourlen; a = a-numhours*hourlen; var shours = addunit(numhours,'hour'); var nummins = (a-a%minlen)/minlen; a = a-nummins*minlen; var smins = addunit(nummins, 'minute'); var numsecs = (a-a%seclen)/seclen; a = a-numsecs*seclen; var ssecs = addunit(numsecs, 'second'); if (aa > 4*weeklen) { return sweeks; } if (aa > weeklen) { return sweeks + ' ' + sdays; } if (aa > daylen) { return sdays + ' ' + shours; } if (aa > 6*hourlen) { return shours; } if (aa > hourlen) { return shours + ' ' + smins; } if (aa > 10*minlen) { return smins; } if (aa > minlen) { return smins + ' ' + ssecs; } return ssecs; } function addunit(num,str) { return '' + num + ' ' + ((num!=1) ? popupString(str+'s') : popupString(str)) ;} function runPopupFilters(list, data, download) { var ret=[]; for (var i=0; i<list.length; ++i) { if (list[i] && typeof list[i] == 'function') { var s=list[i](data, download, download.owner.article); if (s) { ret.push(s); } } } return ret; } function getPageInfo(data, download) { if (!data || data.length === 0) { return popupString('Empty page'); } var popupFilters=getValueOf('popupFilters') || []; var extraPopupFilters = getValueOf('extraPopupFilters') || []; var pageInfoArray = runPopupFilters(popupFilters.concat(extraPopupFilters), data, download); var pageInfo=pageInfoArray.join(', '); if (pageInfo !== '' ) { pageInfo = upcaseFirst(pageInfo); } return pageInfo; } // this could be improved! function countLinks(wikiText) { return wikiText.split('[[').length - 1; } // if N = # matches, n = # brackets, then // String.parenSplit(regex) intersperses the N+1 split elements // with Nn other elements. So total length is // L= N+1 + Nn = N(n+1)+1. So N=(L-1)/(n+1). function countImages(wikiText) { return (wikiText.parenSplit(pg.re.image).length - 1) / (pg.re.imageBracketCount + 1); } function countCategories(wikiText) { return (wikiText.parenSplit(pg.re.category).length - 1) / (pg.re.categoryBracketCount + 1); } function popupFilterStubDetect(data, download, article) { var counts=stubCount(data, article); if (counts.real) { return popupString('stub'); } if (counts.sect) { return popupString('section stub'); } return ''; } function popupFilterDisambigDetect(data, download, article) { if (getValueOf('popupOnlyArticleDabStub') && article.namespace()) { return ''; } return (isDisambig(data, article)) ? popupString('disambig') : ''; } function formatBytes(num) { return (num > 949) ? (Math.round(num/100)/10+popupString('kB')) : (num +'&nbsp;' + popupString('bytes')) ; } //</NOLITE> // ENDFILE: pageinfo.js // STARTFILE: titles.js /** @fileoverview Defines the {@link Title} class, and associated crufty functions. <code>Title</code> deals with article titles and their various forms. {@link Stringwrapper} is the parent class of <code>Title</code>, which exists simply to make things a little neater. */ /** Creates a new Stringwrapper. @constructor @class the Stringwrapper class. This base class is not really useful on its own; it just wraps various common string operations. */ function Stringwrapper() { /** Wrapper for this.toString().indexOf() @param {String} x @type integer */ this.indexOf=function(x){return this.toString().indexOf(x);}; /** Returns this.value. @type String */ this.toString=function(){return this.value;}; /** Wrapper for {@link String#parenSplit} applied to this.toString() @param {RegExp} x @type Array */ this.parenSplit=function(x){return this.toString().parenSplit(x);}; /** Wrapper for this.toString().substring() @param {String} x @param {String} y (optional) @type String */ this.substring=function(x,y){ if (typeof y=='undefined') { return this.toString().substring(x); } return this.toString().substring(x,y); }; /** Wrapper for this.toString().split() @param {String} x @type Array */ this.split=function(x){return this.toString().split(x);}; /** Wrapper for this.toString().replace() @param {String} x @param {String} y @type String */ this.replace=function(x,y){ return this.toString().replace(x,y); }; } /** Creates a new <code>Title</code>. @constructor @class The Title class. Holds article titles and converts them into various forms. Also deals with anchors, by which we mean the bits of the article URL after a # character, representing locations within an article. @param {String} value The initial value to assign to the article. This must be the canonical title (see {@link Title#value}. Omit this in the constructor and use another function to set the title if this is unavailable. */ function Title(val) { /** The canonical article title. This must be in UTF-8 with no entities, escaping or nasties. Also, underscores should be replaced with spaces. @type String @private */ this.value=null; /** The canonical form of the anchor. This should be exactly as it appears in the URL, i.e. with the .C3.0A bits in. @type String */ this.anchor=''; this.setUtf(val); } Title.prototype=new Stringwrapper(); /** Returns the canonical representation of the article title, optionally without anchor. @param {boolean} omitAnchor @fixme Decide specs for anchor @return String The article title and the anchor. */ Title.prototype.toString=function(omitAnchor) { return this.value + ( (!omitAnchor && this.anchor) ? '#' + this.anchorString() : '' ); }; Title.prototype.anchorString=function() { if (!this.anchor) { return ''; } var split=this.anchor.parenSplit(/((?:[.][0-9A-F]{2})+)/); var len=split.length; for (var j=1; j<len; j+=2) { // FIXME s/decodeURI/decodeURIComponent/g ? split[j]=decodeURIComponent(split[j].split('.').join('%')).split('_').join(' '); } return split.join(''); }; Title.prototype.urlAnchor=function() { var split=this.anchor.parenSplit('/((?:[%][0-9A-F]{2})+)/'); var len=split.length; for (var j=1; j<len; j+=2) { split[j]=split[j].split('%').join('.'); } return split.join(''); }; Title.prototype.anchorFromUtf=function(str) { this.anchor=encodeURIComponent(str.split(' ').join('_')) .split('%3A').join(':').split("'").join('%27').split('%').join('.'); }; Title.fromURL=function(h) { return new Title().fromURL(h); }; Title.prototype.fromURL=function(h) { if (typeof h != 'string') { this.value=null; return this; } // NOTE : playing with decodeURI, encodeURI, escape, unescape, // we seem to be able to replicate the IE borked encoding // IE doesn't do this new-fangled utf-8 thing. // and it's worse than that. // IE seems to treat the query string differently to the rest of the url // the query is treated as bona-fide utf8, but the first bit of the url is pissed around with // we fix up & for all browsers, just in case. var splitted=h.split('?'); splitted[0]=splitted[0].split('&').join('%26'); if (pg.flag.linksLikeIE6) { splitted[0]=encodeURI(decode_utf8(splitted[0])); } h=splitted.join('?'); var contribs=pg.re.contribs.exec(h); if (contribs !== null) { if (contribs[1]=='title=') { contribs[3]=contribs[3].split('+').join(' '); } var u=new Title(contribs[3]); this.setUtf(this.decodeNasties(pg.ns.user + ':' + u.stripNamespace())); return this; } var email=pg.re.email.exec(h); if (email !== null) { this.setUtf(this.decodeNasties(pg.ns.user + ':' + new Title(email[3]).stripNamespace())); return this; } var backlinks=pg.re.backlinks.exec(h); if (backlinks) { this.setUtf(this.decodeNasties(new Title(backlinks[3]))); return this; } // no more special cases to check -- // hopefully it's not a disguised user-related or specially treated special page var m=pg.re.main.exec(h); if(m===null) { this.value=null; } else { var fromBotInterface = /[?](.+[&])?title=/.test(h); if (fromBotInterface) { m[2]=m[2].split('+').join('_'); } var extracted = m[2] + (m[3] ? '#' + m[3] : ''); if (pg.flag.isSafari && /%25[0-9A-Fa-f]{2}/.test(extracted)) { // Fix Safari issue // Safari sometimes encodes % as %25 in UTF-8 encoded strings like %E5%A3 -> %25E5%25A3. this.setUtf(decodeURIComponent(unescape(extracted))); } else { this.setUtf(this.decodeNasties(extracted)); } } return this; }; Title.prototype.decodeNasties=function(txt) { var ret= this.decodeEscapes(decodeURI(txt)); ret = ret.replace(/[_ ]*$/, ''); return ret; }; Title.prototype.decodeEscapes=function(txt) { var split=txt.parenSplit(/((?:[%][0-9A-Fa-f]{2})+)/); var len=split.length; for (var i=1; i<len; i=i+2) { // FIXME is decodeURIComponent better? split[i]=unescape(split[i]); } return split.join(''); }; Title.fromAnchor=function(a) { return new Title().fromAnchor(a); }; Title.prototype.fromAnchor=function(a) { if (!a) { this.value=null; return this; } return this.fromURL(a.href); }; Title.fromWikiText=function(txt) { return new Title().fromWikiText(txt); }; Title.prototype.fromWikiText=function(txt) { // FIXME - testing needed if (!pg.flag.linksLikeIE6) { txt=myDecodeURI(txt); } this.setUtf(txt); return this; }; Title.prototype.hintValue=function(){ if(!this.value) { return ''; } return safeDecodeURI(this.value); }; //<NOLITE> Title.prototype.toUserName=function(withNs) { if (this.namespace() != pg.ns.user && this.namespace() != pg.ns.usertalk) { this.value=null; return; } this.value = (withNs ? pg.ns.user + ':' : '') + this.stripNamespace().split('/')[0]; }; Title.prototype.userName=function(withNs) { var t=(new Title(this.value)); t.toUserName(withNs); if (t.value) { return t; } return null; }; Title.prototype.toTalkPage=function() { // convert article to a talk page, or if we can't return null // or, in other words, return null if this ALREADY IS a talk page // and return the corresponding talk page otherwise if (this.value===null) { return null; } var talkRegex=namespaceListToRegex(pg.ns.talkList); if (talkRegex.exec(this.value)) { this.value=null; return null;} var nsReg=namespaceListToRegex(pg.ns.withTalkList); var splitted=this.value.parenSplit(nsReg); if (splitted.length<2) { this.value= (pg.ns.talkList[0]+':'+this.value).split(' ').join('_'); return this.value; } for (var i=0; i< pg.ns.withTalkList.length; ++i) { if (splitted[1]==pg.ns.withTalkList[i]) { splitted[1]=pg.ns.talkList[i]; this.value=splitted.join(':').substring(1).split(' ').join('_'); return this.value; } } this.value=null; return null; }; //</NOLITE> Title.prototype.namespace=function() { var n=this.value.indexOf(':'); if (n<0) { return ''; } var list=pg.ns.list; for (var i=0; i<list.length; ++i) { if (upcaseFirst(list[i]) == this.value.substring(0,n)) { return list[i]; } } return ''; }; //<NOLITE> Title.prototype.talkPage=function() { var t=new Title(this.value); t.toTalkPage(); if (t.value) { return t; } return null; }; Title.prototype.isTalkPage=function() { if (this.talkPage()===null) { return true; } return false; }; Title.prototype.toArticleFromTalkPage=function() { var talkRegex=namespaceListToRegex(pg.ns.talkList); var splitted=this.value.parenSplit(talkRegex); if (splitted.length < 2 || splitted[0].length > 0) { this.value=null; return null; } if (splitted[1]==pg.ns.talkList[0]) { splitted[1]=''; this.value=splitted.join(':').substring(2).split(' ').join('_'); return this.value; } for (var i=1; i< pg.ns.talkList.length; ++i) { if (splitted[1]==pg.ns.talkList[i] || splitted[1]==pg.ns.talkList[i].split(' ').join('_')) { splitted[1]=pg.ns.withTalkList[i]; this.value= splitted.join(':').substring(1).split(' ').join('_'); return this.value; } } this.value=null; return this.value; }; Title.prototype.articleFromTalkPage=function() { var t=new Title(this.value); t.toArticleFromTalkPage(); if (t.value) { return t; } return null; }; Title.prototype.articleFromTalkOrArticle=function() { var t=new Title(this.value); if ( t.toArticleFromTalkPage() ) { return t; } return this; }; Title.prototype.isIpUser=function() { return pg.re.ipUser.test(this.userName()); }; //</NOLITE> Title.prototype.stripNamespace=function(){ // returns a string, not a Title var n=this.value.indexOf(':'); if (n<0) { return this.value; } var list=pg.ns.list; for (var i=0; i<list.length; ++i) { if (upcaseFirst(list[i]) == this.value.substring(0,n)) { return this.value.substring(n+1); } } return this.value; }; Title.prototype.setUtf=function(value){ if (!value) { this.value=''; return; } var anch=value.indexOf('#'); if(anch < 0) { this.value=value.split('_').join(' '); this.anchor=''; return; } this.value=value.substring(0,anch).split('_').join(' '); this.anchor=value.substring(anch+1); this.ns=null; // wait until namespace() is called }; Title.prototype.setUrl=function(urlfrag) { var anch=urlfrag.indexOf('#'); this.value=safeDecodeURI(urlfrag.substring(0,anch)); this.anchor=value.substring(anch+1); }; Title.prototype.append=function(x){ this.setUtf(this.value + x); }; Title.prototype.urlString=function(x) { x || ( x={} ); var v=this.toString(true); if (!x.omitAnchor && this.anchor) { v+= '#' + this.urlAnchor(); } if (!x.keepSpaces) { v=v.split(' ').join('_'); } return encodeURI(v).split('&').join('%26').split('?').join('%3F').split('+').join('%2B'); }; Title.prototype.removeAnchor=function() { return new Title(this.toString(true)); }; Title.prototype.toUrl=function() { return pg.wiki.titlebase + this.urlString(); }; function paramValue(param, url) { var s=url.parenSplit(RegExp('[?&]' + literalizeRegex(param) + '=([^?&]*)')); if (!url) { return null; } return s[1] || null; } function parseParams(url) { var ret={}; if (url.indexOf('?')==-1) { return ret; } var s=url.split('?').slice(1).join(); var t=s.split('&'); for (var i=0; i<t.length; ++i) { var z=t[i].split('='); z.push(null); ret[z[0]]=z[1]; } return ret; } // all sorts of stuff here // FIXME almost everything needs to be rewritten function oldidFromAnchor(a) { return paramValue('oldid', a.href); } //function diffFromAnchor(a) { return paramValue('diff', a.href); } function wikiMarkupToAddressFragment (str) { // for images var ret = safeDecodeURI(str); ret = ret.split(' ').join('_'); ret = encodeURI(ret); return ret; } // (a) myDecodeURI (first standard decodeURI, then pg.re.urlNoPopup) // (b) change spaces to underscores // (c) encodeURI (just the straight one, no pg.re.urlNoPopup) function myDecodeURI (str) { var ret; // FIXME decodeURIComponent?? try { ret=decodeURI(str.toString()); } catch (summat) { return str; } for (var i=0; i<pg.misc.decodeExtras.length; ++i) { var from=pg.misc.decodeExtras[i].from; var to=pg.misc.decodeExtras[i].to; ret=ret.split(from).join(to); } return ret; } function safeDecodeURI(str) { var ret=myDecodeURI(str); return ret || str; } /////////// // TESTS // /////////// //<NOLITE> function isIpUser(user) {return pg.re.ipUser.test(user);} function isDisambig(data, article) { if (!getValueOf('popupAllDabsStubs') && article.namespace()) { return false; } return ! article.isTalkPage() && pg.re.disambig.test(data); } function stubCount(data, article) { if (!getValueOf('popupAllDabsStubs') && article.namespace()) { return false; } var sectStub=0; var realStub=0; if (pg.re.stub.test(data)) { var s=data.parenSplit(pg.re.stub); for (var i=1; i<s.length; i=i+2) { if (s[i]) { ++sectStub; } else { ++realStub; } } } return { real: realStub, sect: sectStub }; } function isValidImageName(str){ // extend as needed... return ( str.indexOf('{') == -1 ); } function isInStrippableNamespace(article) { return ( findInArray( pg.ns.nonArticleList, article.namespace() ) > -1 ); } function isInMainNamespace(article) { return !isInStrippableNamespace(article); } function anchorContainsImage(a) { // iterate over children of anchor a // see if any are images if (a===null) { return false; } kids=a.childNodes; for (var i=0; i<kids.length; ++i) { if (kids[i].nodeName=='IMG') { return true; } } return false; } //</NOLITE> function isPopupLink(a) { // NB for performance reasons, TOC links generally return true // they should be stripped out later if (!markNopopupSpanLinks.done) { markNopopupSpanLinks(); } if (a.inNopopupSpan || a.className=='sortheader') { return false; } // FIXME is this faster inline? if (a.onmousedown || a.getAttribute('nopopup')) { return false; } var h=a.href; if (!pg.re.basenames.test(h)) { return false; } if ( !pg.re.urlNoPopup.test(h) ) { return true; } return ( (pg.re.email.test(h) || pg.re.contribs.test(h) || pg.re.backlinks.test(h)) && h.indexOf('&limit=') == -1 ); } function markNopopupSpanLinks() { if( !getValueOf('popupOnlyArticleLinks')) fixVectorMenuPopups(); var s=getElementsByClassName(document, '*', "nopopups") for (var i=0; i<s.length; ++i) { var as=s[i].getElementsByTagName('a'); for (var j=0; j<as.length; ++j) { as[j].inNopopupSpan=true; } } markNopopupSpanLinks.done=true; } function fixVectorMenuPopups() { var vmenus = getElementsByClassName( document, 'div', 'vectorMenu'); for( i= 0; vmenus && i< vmenus.length; i++ ) { var h5 = vmenus[i].getElementsByTagName('h5')[0]; if( h5) var a = h5.getElementsByTagName('a')[0]; if( a ) a.inNopopupSpan=true; } } // ENDFILE: titles.js // STARTFILE: cookies.js //<NOLITE> ////////////////////////////////////////////////// // Cookie handling // from http://www.quirksmode.org/js/cookies.html var Cookie= { create: function(name,value,days) { var expires; if (days) { var date = new Date(); date.setTime(date.getTime()+(days*24*60*60*1000)); expires = "; expires="+date.toGMTString(); } else { expires = ""; } document.cookie = name+"="+value+expires+"; path=/"; }, read: function(name) { var nameEQ = name + "="; var ca = document.cookie.split(';'); for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==' ') { c = c.substring(1,c.length); } if (c.indexOf(nameEQ) === 0) { return c.substring(nameEQ.length,c.length); } } return null; }, erase: function(name) { Cookie.create(name,"",-1); } }; //</NOLITE> // ENDFILE: cookies.js // STARTFILE: getpage.js ////////////////////////////////////////////////// // Wiki-specific downloading // // Schematic for a getWiki call // // getWiki->-getPageWithCaching // | // false | true // getPage<-[findPictureInCache]->-onComplete(a fake download) // \. // (async)->addPageToCache(download)->-onComplete(download) /** @todo {document} @param {Title} article @param {Function} onComplete @param {integer} oldid @param {Navapopup} owner */ function getWiki(article, onComplete, oldid, owner) { // set ctype=text/css to get around opera gzip bug var url = pg.wiki.titlebase + article.removeAnchor().urlString() + '&action=raw&ctype=text/css'; if (oldid || oldid===0 || oldid==='0') { url += '&oldid='+oldid; } url += '&maxage=0&smaxage=0'; getPageWithCaching(url, onComplete, owner); } // check cache to see if page exists function getPageWithCaching(url, onComplete, owner) { log('getPageWithCaching, url='+url); var i=findInPageCache(url); if (i > -1) { var d=fakeDownload(url, owner.idNumber, onComplete, pg.cache.pages[i].data, pg.cache.pages[i].lastModified, owner); } else { var d=getPage(url, onComplete, owner); if (d && owner && owner.addDownload) { owner.addDownload(d); d.owner=owner; } } } function getPage(url, onComplete, owner) { log('getPage'); var callback= function (d) { if (!d.aborted) {addPageToCache(d); onComplete(d);} }; return startDownload(url, owner.idNumber, callback); } function findInPageCache(url) { for (var i=0; i<pg.cache.pages.length; ++i) { if (url==pg.cache.pages[i].url) { return i; } } return -1; } function addPageToCache(download) { log('addPageToCache '+download.url); var page = {url: download.url, data: download.data, lastModified: download.lastModified}; return pg.cache.pages.push(page); } // ENDFILE: getpage.js // STARTFILE: md5-2.2alpha.js //<NOLITE> /* * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message * Digest Algorithm, as defined in RFC 1321. * Version 2.2-alpha Copyright (C) Paul Johnston 1999 - 2005 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet * Distributed under the BSD License * See http://pajhome.org.uk/crypt/md5 for more info. */ /* * Configurable variables. You may need to tweak these to be compatible with * the server-side, but the defaults work in most cases. */ var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */ var b64pad = ""; /* base-64 pad character. "=" for strict RFC compliance */ /* * These are the functions you'll usually want to call * They take string arguments and return either hex or base-64 encoded strings */ function hex_md5(s) { return rstr2hex(rstr_md5(str2rstr_utf8(s))); } function b64_md5(s) { return rstr2b64(rstr_md5(str2rstr_utf8(s))); } function any_md5(s, e) { return rstr2any(rstr_md5(str2rstr_utf8(s)), e); } function hex_hmac_md5(k, d) { return rstr2hex(rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d))); } function b64_hmac_md5(k, d) { return rstr2b64(rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d))); } function any_hmac_md5(k, d, e) { return rstr2any(rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d)), e); } /* * Perform a simple self-test to see if the VM is working */ function md5_vm_test() { return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72"; } /* * Calculate the MD5 of a raw string */ function rstr_md5(s) { return binl2rstr(binl_md5(rstr2binl(s), s.length * 8)); } /* * Calculate the HMAC-MD5, of a key and some data (raw strings) */ function rstr_hmac_md5(key, data) { var bkey = rstr2binl(key); if(bkey.length > 16) bkey = binl_md5(bkey, key.length * 8); var ipad = Array(16), opad = Array(16); for(var i = 0; i < 16; i++) { ipad[i] = bkey[i] ^ 0x36363636; opad[i] = bkey[i] ^ 0x5C5C5C5C; } var hash = binl_md5(ipad.concat(rstr2binl(data)), 512 + data.length * 8); return binl2rstr(binl_md5(opad.concat(hash), 512 + 128)); } /* * Convert a raw string to a hex string */ function rstr2hex(input) { var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef"; var output = ""; var x; for(var i = 0; i < input.length; i++) { x = input.charCodeAt(i); output += hex_tab.charAt((x >>> 4) & 0x0F) + hex_tab.charAt( x & 0x0F); } return output; } /* * Convert a raw string to a base-64 string */ function rstr2b64(input) { var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; var output = ""; var len = input.length; for(var i = 0; i < len; i += 3) { var triplet = (input.charCodeAt(i) << 16) | (i + 1 < len ? input.charCodeAt(i+1) << 8 : 0) | (i + 2 < len ? input.charCodeAt(i+2) : 0); for(var j = 0; j < 4; j++) { if(i * 8 + j * 6 > input.length * 8) output += b64pad; else output += tab.charAt((triplet >>> 6*(3-j)) & 0x3F); } } return output; } /* * Convert a raw string to an arbitrary string encoding */ function rstr2any(input, encoding) { var divisor = encoding.length; var remainders = Array(); var i, q, x, quotient; /* Convert to an array of 16-bit big-endian values, forming the dividend */ var dividend = Array(input.length / 2); for(i = 0; i < dividend.length; i++) { dividend[i] = (input.charCodeAt(i * 2) << 8) | input.charCodeAt(i * 2 + 1); } /* * Repeatedly perform a long division. The binary array forms the dividend, * the length of the encoding is the divisor. Once computed, the quotient * forms the dividend for the next step. We stop when the dividend is zero. * All remainders are stored for later use. */ while(dividend.length > 0) { quotient = Array(); x = 0; for(i = 0; i < dividend.length; i++) { x = (x << 16) + dividend[i]; q = Math.floor(x / divisor); x -= q * divisor; if(quotient.length > 0 || q > 0) quotient[quotient.length] = q; } remainders[remainders.length] = x; dividend = quotient; } /* Convert the remainders to the output string */ var output = ""; for(i = remainders.length - 1; i >= 0; i--) output += encoding.charAt(remainders[i]); return output; } /* * Encode a string as utf-8. * For efficiency, this assumes the input is valid utf-16. */ function str2rstr_utf8(input) { var output = ""; var i = -1; var x, y; while(++i < input.length) { /* Decode utf-16 surrogate pairs */ x = input.charCodeAt(i); y = i + 1 < input.length ? input.charCodeAt(i + 1) : 0; if(0xD800 <= x && x <= 0xDBFF && 0xDC00 <= y && y <= 0xDFFF) { x = 0x10000 + ((x & 0x03FF) << 10) + (y & 0x03FF); i++; } /* Encode output as utf-8 */ if(x <= 0x7F) output += String.fromCharCode(x); else if(x <= 0x7FF) output += String.fromCharCode(0xC0 | ((x >>> 6 ) & 0x1F), 0x80 | ( x & 0x3F)); else if(x <= 0xFFFF) output += String.fromCharCode(0xE0 | ((x >>> 12) & 0x0F), 0x80 | ((x >>> 6 ) & 0x3F), 0x80 | ( x & 0x3F)); else if(x <= 0x1FFFFF) output += String.fromCharCode(0xF0 | ((x >>> 18) & 0x07), 0x80 | ((x >>> 12) & 0x3F), 0x80 | ((x >>> 6 ) & 0x3F), 0x80 | ( x & 0x3F)); } return output; } /* * Encode a string as utf-16 */ function str2rstr_utf16le(input) { var output = ""; for(var i = 0; i < input.length; i++) output += String.fromCharCode( input.charCodeAt(i) & 0xFF, (input.charCodeAt(i) >>> 8) & 0xFF); return output; } function str2rstr_utf16be(input) { var output = ""; for(var i = 0; i < input.length; i++) output += String.fromCharCode((input.charCodeAt(i) >>> 8) & 0xFF, input.charCodeAt(i) & 0xFF); return output; } /* * Convert a raw string to an array of little-endian words * Characters >255 have their high-byte silently ignored. */ function rstr2binl(input) { var output = Array(input.length >> 2); for(var i = 0; i < output.length; i++) output[i] = 0; for(var i = 0; i < input.length * 8; i += 8) output[i>>5] |= (input.charCodeAt(i / 8) & 0xFF) << (i%32); return output; } /* * Convert an array of little-endian words to a string */ function binl2rstr(input) { var output = ""; for(var i = 0; i < input.length * 32; i += 8) output += String.fromCharCode((input[i>>5] >>> (i % 32)) & 0xFF); return output; } /* * Calculate the MD5 of an array of little-endian words, and a bit length. */ function binl_md5(x, len) { /* append padding */ x[len >> 5] |= 0x80 << ((len) % 32); x[(((len + 64) >>> 9) << 4) + 14] = len; var a = 1732584193; var b = -271733879; var c = -1732584194; var d = 271733878; for(var i = 0; i < x.length; i += 16) { var olda = a; var oldb = b; var oldc = c; var oldd = d; a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936); d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586); c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819); b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330); a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897); d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426); c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341); b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983); a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416); d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417); c = md5_ff(c, d, a, b, x[i+10], 17, -42063); b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162); a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682); d = md5_ff(d, a, b, c, x[i+13], 12, -40341101); c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290); b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329); a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510); d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632); c = md5_gg(c, d, a, b, x[i+11], 14, 643717713); b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302); a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691); d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083); c = md5_gg(c, d, a, b, x[i+15], 14, -660478335); b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848); a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438); d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690); c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961); b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501); a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467); d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784); c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473); b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734); a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558); d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463); c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562); b = md5_hh(b, c, d, a, x[i+14], 23, -35309556); a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060); d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353); c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632); b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640); a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174); d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222); c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979); b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189); a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487); d = md5_hh(d, a, b, c, x[i+12], 11, -421815835); c = md5_hh(c, d, a, b, x[i+15], 16, 530742520); b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651); a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844); d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415); c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905); b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055); a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571); d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606); c = md5_ii(c, d, a, b, x[i+10], 15, -1051523); b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799); a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359); d = md5_ii(d, a, b, c, x[i+15], 10, -30611744); c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380); b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649); a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070); d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379); c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259); b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551); a = safe_add(a, olda); b = safe_add(b, oldb); c = safe_add(c, oldc); d = safe_add(d, oldd); } return Array(a, b, c, d); } /* * These functions implement the four basic operations the algorithm uses. */ function md5_cmn(q, a, b, x, s, t) { return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b); } function md5_ff(a, b, c, d, x, s, t) { return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t); } function md5_gg(a, b, c, d, x, s, t) { return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t); } function md5_hh(a, b, c, d, x, s, t) { return md5_cmn(b ^ c ^ d, a, b, x, s, t); } function md5_ii(a, b, c, d, x, s, t) { return md5_cmn(c ^ (b | (~d)), a, b, x, s, t); } /* * Add integers, wrapping at 2^32. This uses 16-bit operations internally * to work around bugs in some JS interpreters. */ function safe_add(x, y) { var lsw = (x & 0xFFFF) + (y & 0xFFFF); var msw = (x >> 16) + (y >> 16) + (lsw >> 16); return (msw << 16) | (lsw & 0xFFFF); } /* * Bitwise rotate a 32-bit number to the left. */ function bit_rol(num, cnt) { return (num << cnt) | (num >>> (32 - cnt)); } //</NOLITE> // ENDFILE: md5-2.2alpha.js // STARTFILE: parensplit.js ////////////////////////////////////////////////// // parenSplit // String.prototype.parenSplit should do what ECMAscript says // String.prototype.split does, interspersing paren matches between // the split elements if (String('abc'.split(/(b)/))!='a,b,c') { // broken String.split, e.g. konq, IE String.prototype.parenSplit=function (re) { re=nonGlobalRegex(re); var s=this; var m=re.exec(s); var ret=[]; while (m && s) { // without the following loop, we have // 'ab'.parenSplit(/a|(b)/) != 'ab'.split(/a|(b)/) for(var i=0; i<m.length; ++i) { if (typeof m[i]=='undefined') m[i]=''; } ret.push(s.substring(0,m.index)); ret = ret.concat(m.slice(1)); s=s.substring(m.index + m[0].length); m=re.exec(s); } ret.push(s); return ret; }; } else { String.prototype.parenSplit=function (re) { return this.split(re); }; String.prototype.parenSplit.isNative=true; } function nonGlobalRegex(re) { var s=re.toString(); flags=''; for (var j=s.length; s.charAt(j) != '/'; --j) { if (s.charAt(j) != 'g') { flags += s.charAt(j); } } var t=s.substring(1,j); return RegExp(t,flags); } // ENDFILE: parensplit.js // STARTFILE: tools.js // IE madness with encoding // ======================== // // suppose throughout that the page is in utf8, like wikipedia // // if a is an anchor DOM element and a.href should consist of // // http://host.name.here/wiki/foo?bar=baz // // then IE gives foo as "latin1-encoded" utf8; we have foo = decode_utf8(decodeURI(foo_ie)) // but IE gives bar=baz correctly as plain utf8 // // --------------------------------- // // IE's xmlhttp doesn't understand utf8 urls. Have to use encodeURI here. // // --------------------------------- // // summat else // Source: http://aktuell.de.selfhtml.org/artikel/javascript/utf8b64/utf8.htm //<NOLITE> function encode_utf8(rohtext) { // dient der Normalisierung des Zeilenumbruchs rohtext = rohtext.replace(/\r\n/g,"\n"); var utftext = ""; for(var n=0; n<rohtext.length; n++) { // ermitteln des Unicodes des aktuellen Zeichens var c=rohtext.charCodeAt(n); // alle Zeichen von 0-127 => 1byte if (c<128) utftext += String.fromCharCode(c); // alle Zeichen von 127 bis 2047 => 2byte else if((c>127) && (c<2048)) { utftext += String.fromCharCode((c>>6)|192); utftext += String.fromCharCode((c&63)|128);} // alle Zeichen von 2048 bis 66536 => 3byte else { utftext += String.fromCharCode((c>>12)|224); utftext += String.fromCharCode(((c>>6)&63)|128); utftext += String.fromCharCode((c&63)|128);} } return utftext; } function getJsObj(json) { try { var json_ret = eval('(' + json + ')'); } catch (someError) { errlog('Something went wrong with getJsobj, json='+json); return 1; } if( json_ret['warnings'] ) { for( var w=0; w < json_ret['warnings'].length; w++ ) { log( json_ret['warnings'][w]['*'] ); } } else if ( json_ret['error'] ) { errlog( json_ret['error'].code + ': ' + json_ret['error'].info ); } return json_ret; } function anyChild(obj) { for (var p in obj) { return obj[p]; } return null; } //</NOLITE> function decode_utf8(utftext) { var plaintext = ""; var i=0, c=0, c1=0, c2=0; // while-Schleife, weil einige Zeichen uebersprungen werden while(i<utftext.length) { c = utftext.charCodeAt(i); if (c<128) { plaintext += String.fromCharCode(c); i++;} else if((c>191) && (c<224)) { c2 = utftext.charCodeAt(i+1); plaintext += String.fromCharCode(((c&31)<<6) | (c2&63)); i+=2;} else { c2 = utftext.charCodeAt(i+1); c3 = utftext.charCodeAt(i+2); plaintext += String.fromCharCode(((c&15)<<12) | ((c2&63)<<6) | (c3&63)); i+=3;} } return plaintext; } function upcaseFirst(str) { if (typeof str != typeof '' || str=='') return ''; return str.charAt(0).toUpperCase() + str.substring(1); } function findInArray(arr, foo) { if (!arr || !arr.length) { return -1; } var len=arr.length; for (var i=0; i<len; ++i) { if (arr[i]==foo) { return i; } } return -1; } function nextOne (array, value) { // NB if the array has two consecutive entries equal // then this will loop on successive calls var i=findInArray(array, value); if (i<0) { return null; } return array[i+1]; } function literalizeRegex(str){ return str.replace(RegExp('([-.|()\\+?*^${}\\[\\]])', 'g'), '\\$1'); } String.prototype.entify=function() { //var shy='&shy;'; return this.split('&').join('&amp;').split('<').join('&lt;').split('>').join('&gt;'/*+shy*/).split('"').join('&quot;'); }; function findThis(array, value) { if (typeof array.length == 'undefined') { return null; } for (var i=0; i<array.length; ++i) { if (array[i]==value) { return i; } } return null; } function removeNulls(list) { var ret=[]; for (var i=0; i<list.length; ++i) { if (list[i]) { ret.push(list[i]); } } return ret; } function joinPath(list) { return removeNulls(list).join('/'); } function simplePrintf(str, subs) { if (!str || !subs) { return str; } var ret=[]; var s=str.parenSplit(/(%s|\$[0-9]+)/); var i=0; do { ret.push(s.shift()); if ( !s.length ) { break; } var cmd=s.shift(); if (cmd == '%s') { if ( i < subs.length ) { ret.push(subs[i]); } else { ret.push(cmd); } ++i; } else { var j=parseInt( cmd.replace('$', ''), 10 ) - 1; if ( j > -1 && j < subs.length ) { ret.push(subs[j]); } else { ret.push(cmd); } } } while (s.length > 0); return ret.join(''); } function max(a,b){return a<b ? b : a;} function min(a,b){return a>b ? b : a;} function isString(x) { return (typeof x === 'string' || x instanceof String); } //function isNumber(x) { return (typeof x === 'number' || x instanceof Number); } function isRegExp(x) { return x instanceof RegExp; } function isArray (x) { return x instanceof Array; } function isObject(x) { return x instanceof Object; } function isFunction(x) { return !isRegExp(x) && (typeof x === 'function' || x instanceof Function); } function repeatString(s,mult) { var ret=''; for (var i=0; i<mult; ++i) { ret += s; } return ret; } function zeroFill(s, min) { min = min || 2; var t=s.toString(); return repeatString('0', min - t.length) + t; } function map(f, o) { if (isArray(o)) { return map_array(f,o); } return map_object(f,o); } function map_array(f,o) { var ret=[]; for (var i=0; i<o.length; ++i) { ret.push(f(o[i])); } return ret; } function map_object(f,o) { var ret={}; for (var i in o) { ret[o]=f(o[i]); } return ret; } // ENDFILE: tools.js // STARTFILE: dab.js //<NOLITE> ////////////////////////////////////////////////// // Dab-fixing code // function retargetDab(newTarget, oldTarget, friendlyCurrentArticleName, titleToEdit) { log('retargetDab: newTarget='+newTarget + ' oldTarget=' + oldTarget); return changeLinkTargetLink( {newTarget: newTarget, text: newTarget.split(' ').join('&nbsp;'), hint: tprintf('disambigHint', [newTarget]), summary: simplePrintf( getValueOf('popupFixDabsSummary'), [friendlyCurrentArticleName, newTarget ]), clickButton: 'wpDiff', minor: true, oldTarget: oldTarget, watch: getValueOf('popupWatchDisambiggedPages'), title: titleToEdit}); } function listLinks(wikitext, oldTarget, titleToEdit) { // mediawiki strips trailing spaces, so we do the same // testcase: http://en.wikipedia.org/w/index.php?title=Radial&oldid=97365633 var reg=RegExp('\\[\\[([^|]*?) *(\\||\\]\\])', 'gi'); var ret=[]; var splitted=wikitext.parenSplit(reg); // ^[a-z]+ should match interwiki links, hopefully (case-insensitive) // and ^[a-z]* should match those and [[:Category...]] style links too var omitRegex=RegExp('^[a-z]*:|^[Ss]pecial:|^[Ii]mage|^[Cc]ategory'); var friendlyCurrentArticleName= oldTarget.toString(); var wikPos = getValueOf('popupDabWiktionary'); for (var i=1; i<splitted.length; i=i+3) { if (typeof splitted[i] == typeof 'string' && splitted[i].length>0 && !omitRegex.test(splitted[i])) { ret.push( retargetDab(splitted[i], oldTarget, friendlyCurrentArticleName, titleToEdit) ); } /* if */ } /* for loop */ ret = rmDupesFromSortedList(ret.sort()); if (wikPos) { var wikTarget='wiktionary:' + friendlyCurrentArticleName.replace( RegExp('^(.+)\\s+[(][^)]+[)]\\s*$'), '$1' ); var meth; if (wikPos.toLowerCase() == 'first') { meth = 'unshift'; } else { meth = 'push'; } ret[meth]( retargetDab(wikTarget, oldTarget, friendlyCurrentArticleName, titleToEdit) ); } ret.push(changeLinkTargetLink( { newTarget: null, text: popupString('remove this link').split(' ').join('&nbsp;'), hint: popupString("remove all links to this disambig page from this article"), clickButton: "wpDiff", oldTarget: oldTarget, summary: simplePrintf(getValueOf('popupRmDabLinkSummary'), [friendlyCurrentArticleName]), watch: getValueOf('popupWatchDisambiggedPages'), title: titleToEdit })); return ret; } function rmDupesFromSortedList(list) { var ret=[]; for (var i=0; i<list.length; ++i) { if (ret.length===0 || list[i]!=ret[ret.length-1]) { ret.push(list[i]); } } return ret; } function makeFixDab(data, navpop) { // grab title from parent popup if there is one; default exists in changeLinkTargetLink var titleToEdit=(navpop.parentPopup && navpop.parentPopup.article.toString()); var list=listLinks(data, navpop.originalArticle, titleToEdit); if (list.length===0) { log('listLinks returned empty list'); return null; } var html='<hr>' + popupString('Click to disambiguate this link to:') + '<br>'; html+=list.join(', '); return html; } function makeFixDabs(wikiText, navpop) { if (getValueOf('popupFixDabs') && isDisambig(wikiText, navpop.article) && Title.fromURL(location.href).namespace() != pg.ns.special && navpop.article.talkPage() ) { setPopupHTML(makeFixDab(wikiText, navpop), 'popupFixDab', navpop.idNumber); } } function popupRedlinkHTML(article) { return changeLinkTargetLink( { newTarget: null, text: popupString('remove this link').split(' ').join('&nbsp;'), hint: popupString("remove all links to this page from this article"), clickButton: "wpDiff", oldTarget: article.toString(), summary: simplePrintf(getValueOf('popupRedlinkSummary'), [article.toString()])}); } //</NOLITE> // ENDFILE: dab.js // STARTFILE: htmloutput.js function appendPopupContent(obj, elementId, popupId, onSuccess) { return setPopupHTML(obj, elementId, popupId, onSuccess, true); } // this has to use a timer loop as we don't know if the DOM element exists when we want to set the text function setPopupHTML (str, elementId, popupId, onSuccess, append) { if (elementId=='popupPreview') { } if (typeof popupId === 'undefined') { //console.error('popupId is not defined in setPopupHTML, html='+str.substring(0,100)); popupId = pg.idNumber; } var popupElement=document.getElementById(elementId+popupId); if (popupElement) { if (!append) { popupElement.innerHTML=''; } if (isString(str)) { popupElement.innerHTML+=str; } else { popupElement.appendChild(str); } if (onSuccess) { onSuccess(); } setTimeout(checkPopupPosition, 100); return true; } else { // call this function again in a little while... setTimeout(function(){ setPopupHTML(str,elementId,popupId,onSuccess); }, 600); } return null; } //<NOLITE> function setPopupTrailer(str,id) {return setPopupHTML(str, 'popupData', id);} //</NOLITE> function fillEmptySpans(args) { return fillEmptySpans2(args); } // args.navpopup is mandatory // optional: args.redir, args.redirTarget // FIXME: ye gods, this is ugly stuff function fillEmptySpans2(args) { // if redir is present and true then redirTarget is mandatory var redir=true; if (typeof args != 'object' || typeof args.redir == 'undefined' || !args.redir) { redir=false; } var a=args.navpopup.parentAnchor; var article, hint=null, oldid=null, params={}; if (redir && typeof args.redirTarget == typeof {}) { article=args.redirTarget; //hint=article.hintValue(); } else { article=(new Title()).fromAnchor(a); hint=a.originalTitle || article.hintValue(); params=parseParams(a.href); oldid=(getValueOf('popupHistoricalLinks')) ? params.oldid : null; rcid=params.rcid; } var x={ article:article, hint: hint, oldid: oldid, rcid: rcid, navpop:args.navpopup, params:params }; var structure=pg.structures[getValueOf('popupStructure')]; if (typeof structure != 'object') { setPopupHTML('popupError', 'Unknown structure (this should never happen): '+ pg.option.popupStructure, args.navpopup.idNumber); return; } var spans=flatten(pg.misc.layout); var numspans = spans.length; var redirs=pg.misc.redirSpans; for (var i=0; i<numspans; ++i) { var f=findThis(redirs, spans[i]); //log('redir='+redir+', f='+f+', spans[i]='+spans[i]); if ( (f!==null && !redir) || (f===null && redir) ) { //log('skipping this set of the loop'); continue; } var structurefn=structure[spans[i]]; var setfn = setPopupHTML; if (getValueOf('popupActiveNavlinks') && (spans[i].indexOf('popupTopLinks')==0 || spans[i].indexOf('popupRedirTopLinks')==0) ) { setfn = setPopupTipsAndHTML; } switch (typeof structurefn) { case 'function': //log('running '+spans[i]+'({article:'+x.article+', hint:'+x.hint+', oldid: '+x.oldid+'})'); setfn(structurefn(x), spans[i], args.navpopup.idNumber); break; case 'string': setfn(structurefn, spans[i], args.navpopup.idNumber); break; default: errlog('unknown thing with label '+spans[i]); break; } } } // flatten an array function flatten(list, start) { var ret=[]; if (typeof start == 'undefined') { start=0; } for (var i=start; i<list.length; ++i) { if (typeof list[i] == typeof []) { return ret.concat(flatten(list[i])).concat(flatten(list, i+1)); } else { ret.push(list[i]); } } return ret; } // Generate html for whole popup function popupHTML (a) { getValueOf('popupStructure'); var structure=pg.structures[pg.option.popupStructure]; if (typeof structure != 'object') { //return 'Unknown structure: '+pg.option.popupStructure; // override user choice pg.option.popupStructure=pg.optionDefault.popupStructure; return popupHTML(a); } if (typeof structure.popupLayout != 'function') { return 'Bad layout'; } pg.misc.layout=structure.popupLayout(); if (typeof structure.popupRedirSpans == 'function') { pg.misc.redirSpans=structure.popupRedirSpans(); } else { pg.misc.redirSpans=[]; } return makeEmptySpans(pg.misc.layout, a.navpopup); } function makeEmptySpans (list, navpop) { var ret=''; for (var i=0; i<list.length; ++i) { if (typeof list[i] == typeof '') { ret += emptySpanHTML(list[i], navpop.idNumber, 'div'); } else if (typeof list[i] == typeof [] && list[i].length > 0 ) { ret = ret.parenSplit(RegExp('(</[^>]*?>$)')).join(makeEmptySpans(list[i], navpop)); } else if (typeof list[i] == typeof {} && list[i].nodeType ) { ret += emptySpanHTML(list[i].name, navpop.idNumber, list[i].nodeType); } } return ret; } function emptySpanHTML(name, id, tag, classname) { tag = tag || 'span'; if (!classname) { classname = emptySpanHTML.classAliases[name]; } classname = classname || name; if (name == getValueOf('popupDragHandle')) { classname += ' popupDragHandle'; } return simplePrintf('<%s id="%s" class="%s"></%s>', [tag, name + id, classname, tag]); } emptySpanHTML.classAliases={ 'popupSecondPreview': 'popupPreview' }; // generate html for popup image // <a id="popupImageLinkn"><img id="popupImagen"> // where n=idNumber function imageHTML(article, idNumber) { return simplePrintf('<a id="popupImageLink$1">' + '<img align="right" valign="top" id="popupImg$1" style="display: none;"></img>' + '</a>', [ idNumber ]); } function popTipsSoonFn(id, when, popData) { when || ( when=250 ); var popTips=function(){ setupTooltips(document.getElementById(id), false, true, popData); }; return function() { setTimeout( popTips, when, popData ); }; } function setPopupTipsAndHTML(html, divname, idnumber, popData) { setPopupHTML(html, divname, idnumber, getValueOf('popupSubpopups') ? popTipsSoonFn(divname + idnumber, null, popData) : null); } // ENDFILE: htmloutput.js // STARTFILE: mouseout.js ////////////////////////////////////////////////// // fuzzy checks function fuzzyCursorOffMenus(x,y, fuzz, parent) { if (!parent) { return null; } var uls=parent.getElementsByTagName('ul'); for (var i=0; i<uls.length; ++i) { if (uls[i].className=='popup_menu') { if (uls[i].offsetWidth > 0) return false; } // else {document.title+='.';} } return true; } function checkPopupPosition () { // stop the popup running off the right of the screen // FIXME avoid pg.current.link pg.current.link && pg.current.link.navpopup && pg.current.link.navpopup.limitHorizontalPosition(); } function mouseOutWikiLink () { if (!window.popupsReady || !window.popupsReady()) { return; } //console ('mouseOutWikiLink'); var a=this; if (a.navpopup==null) return; if ( ! a.navpopup.isVisible() ) { a.navpopup.banish(); return; } Navpopup.tracker.addHook(posCheckerHook(a.navpopup)); } function posCheckerHook(navpop) { return function() { if (!navpop.isVisible()) { return true; /* remove this hook */ } if (Navpopup.tracker.dirty) { return false; } var x=Navpopup.tracker.x, y=Navpopup.tracker.y; var mouseOverNavpop = navpop.isWithin(x,y,navpop.fuzz, navpop.mainDiv) || !fuzzyCursorOffMenus(x,y,navpop.fuzz, navpop.mainDiv); // FIXME it'd be prettier to do this internal to the Navpopup objects var t=getValueOf('popupHideDelay'); if (t) { t = t * 1000; } if (!t) { if(!mouseOverNavpop) { navpop.banish(); return true; /* remove this hook */ } return false; } // we have a hide delay set var d=+(new Date()); if ( !navpop.mouseLeavingTime ) { navpop.mouseLeavingTime = d; return false; } if ( mouseOverNavpop ) { navpop.mouseLeavingTime=null; return false; } if (d - navpop.mouseLeavingTime > t) { navpop.mouseLeavingTime=null; navpop.banish(); return true; /* remove this hook */ } return false; }; } function runStopPopupTimer(navpop) { // at this point, we should have left the link but remain within the popup // so we call this function again until we leave the popup. if (!navpop.stopPopupTimer) { navpop.stopPopupTimer=setInterval(posCheckerHook(navpop), 500); navpop.addHook(function(){clearInterval(navpop.stopPopupTimer);}, 'hide', 'before'); } } // ENDFILE: mouseout.js // STARTFILE: previewmaker.js /** @fileoverview Defines the {@link Previewmaker} object, which generates short previews from wiki markup. */ /** Creates a new Previewmaker @constructor @class The Previewmaker class. Use an instance of this to generate short previews from Wikitext. @param {String} wikiText The Wikitext source of the page we wish to preview. @param {String} baseUrl The url we should prepend when creating relative urls. @param {Navpopup} owner The navpop associated to this preview generator */ function Previewmaker(wikiText, baseUrl, owner) { /** The wikitext which is manipulated to generate the preview. */ this.originalData=wikiText; this.setData(); this.baseUrl=baseUrl; this.owner=owner; this.maxCharacters=getValueOf('popupMaxPreviewCharacters'); this.maxSentences=getValueOf('popupMaxPreviewSentences'); } Previewmaker.prototype.setData=function() { var maxSize=max(10000, 2*this.maxCharacters); this.data=this.originalData.substring(0,maxSize); }; /** Remove HTML comments @private */ Previewmaker.prototype.killComments = function () { // this also kills trailing spaces and one trailing newline, eg [[diamyo]] this.data=this.data.replace(RegExp('<!--[\\s\\S]*?--> *\\n?', 'g'), ''); }; /** @private */ Previewmaker.prototype.killDivs = function () { // say goodbye, divs (can be nested, so use * not *?) this.data=this.data.replace(RegExp('< *div[^>]* *>[\\s\\S]*?< */ *div *>', 'gi'), ''); }; /** @private */ Previewmaker.prototype.killGalleries = function () { this.data=this.data.replace(RegExp('< *gallery[^>]* *>[\\s\\S]*?< */ *gallery *>', 'gi'), ''); }; /** @private */ Previewmaker.prototype.kill = function(opening, closing, subopening, subclosing, repl) { var oldk=this.data; var k=this.killStuff(this.data, opening, closing, subopening, subclosing, repl); while (k.length < oldk.length) { oldk=k; k=this.killStuff(k, opening, closing, subopening, subclosing, repl); } this.data=k; }; /** @private */ Previewmaker.prototype.killStuff = function (txt, opening, closing, subopening, subclosing, repl) { var op=this.makeRegexp(opening); var cl=this.makeRegexp(closing, '^'); var sb=subopening ? this.makeRegexp(subopening, '^') : null; var sc=subclosing ? this.makeRegexp(subclosing, '^') : cl; if (!op || !cl) { alert('Navigation Popups error: op or cl is null! something is wrong.'); return; } if (!op.test(txt)) { return txt; } var ret=''; var opResult = op.exec(txt); ret = txt.substring(0,opResult.index); txt=txt.substring(opResult.index+opResult[0].length); var depth = 1; while (txt.length > 0) { var removal=0; if (depth==1 && cl.test(txt)) { depth--; removal=cl.exec(txt)[0].length; } else if (depth > 1 && sc.test(txt)) { depth--; removal=sc.exec(txt)[0].length; }else if (sb && sb.test(txt)) { depth++; removal=sb.exec(txt)[0].length; } if ( !removal ) { removal = 1; } txt=txt.substring(removal); if (depth==0) { break; } } return ret + (repl || '') + txt; }; /** @private */ Previewmaker.prototype.makeRegexp = function (x, prefix, suffix) { prefix = prefix || ''; suffix = suffix || ''; var reStr=''; var flags=''; if (isString(x)) { reStr=prefix + literalizeRegex(x) + suffix; } else if (isRegExp(x)) { var s=x.toString().substring(1); var sp=s.split('/'); flags=sp[sp.length-1]; sp[sp.length-1]=''; s=sp.join('/'); s=s.substring(0,s.length-1); reStr= prefix + s + suffix; } else { log ('makeRegexp failed'); } log ('makeRegexp: got reStr=' + reStr + ', flags=' + flags); return RegExp(reStr, flags); }; /** @private */ Previewmaker.prototype.killBoxTemplates = function () { // taxobox removal... in fact, there's a saudiprincebox_begin, so let's be more general // also, have float_begin, ... float_end this.kill(RegExp('[{][{][^{}\\s|]*?(float|box)[_ ](begin|start)', 'i'), /[}][}]\s*/, '{{'); // infoboxes etc // from [[User:Zyxw/popups.js]]: kill frames too this.kill(RegExp('[{][{][^{}\\s|]*?(infobox|elementbox|frame)[_ ]', 'i'), /[}][}]\s*/, '{{'); }; /** @private */ Previewmaker.prototype.killTemplates = function () { this.kill('{{', '}}', '{', '}', ' '); }; /** @private */ Previewmaker.prototype.killTables = function () { // tables are bad, too // this can be slow, but it's an inprovement over a browser hang // torture test: [[Comparison_of_Intel_Central_Processing_Units]] this.kill('{|', /[|]}\s*/, '{|'); this.kill(/<table.*?>/i, /<\/table.*?>/i, /<table.*?>/i); // remove lines starting with a pipe for the hell of it (?) this.data=this.data.replace(RegExp('^[|].*$', 'mg'), ''); }; /** @private */ Previewmaker.prototype.killImages = function () { // images and categories are a nono this.kill(RegExp('[[][[]\\s*(Image|File|' + pg.ns.image + '|' + pg.ns.category + ')\\s*:', 'i'), /\]\]\s*/, '[', ']'); }; /** @private */ Previewmaker.prototype.killHTML = function () { // kill <ref ...>...</ref> this.kill(/<ref\b[^/>]*?>/i, /<\/ref>/i); // let's also delete entire lines starting with <. it's worth a try. this.data=this.data.replace(RegExp('(^|\\n) *<.*', 'g'), '\n'); // and those pesky html tags, but not <nowiki> or <blockquote> var splitted=this.data.parenSplit(/(<.*?>)/); var len=splitted.length; for (var i=1; i<len; i=i+2) { switch (splitted[i]) { case '<nowiki>': case '</nowiki>': break; default: if (! /^< *\/? *blockquote\b/i.test(splitted[i])) { splitted[i]=''; } } } this.data=splitted.join(''); }; /** @private */ Previewmaker.prototype.killChunks = function() { // heuristics alert // chunks of italic text? you crazy, man? var italicChunkRegex=new RegExp ("((^|\\n)\\s*:*\\s*''[^']([^']|'''|'[^']){20}(.|\\n[^\\n])*''[.!?\\s]*\\n)+", 'g'); // keep stuff separated, though, so stick in \n (fixes [[Union Jack]]? this.data=this.data.replace(italicChunkRegex, '\n'); }; /** @private */ Previewmaker.prototype.mopup = function () { // we simply *can't* be doing with horizontal rules right now this.data=this.data.replace(RegExp('^-{4,}','mg'),''); // no indented lines this.data=this.data.replace(RegExp('(^|\\n) *:[^\\n]*','g'), ''); // replace __TOC__, __NOTOC__ and whatever else there is // this'll probably do this.data=this.data.replace(RegExp('^__[A-Z_]*__ *$', 'gmi'),''); }; /** @private */ Previewmaker.prototype.firstBit = function () { // dont't be givin' me no subsequent paragraphs, you hear me? /// first we "normalize" section headings, removing whitespace after, adding before var d=this.data; if (getValueOf('popupPreviewCutHeadings')) { this.data=this.data.replace(RegExp('\\s*(==+[^=]*==+)\\s*', 'g'), '\n\n$1 '); /// then we want to get rid of paragraph breaks whose text ends badly this.data=this.data.replace(RegExp('([:;]) *\\n{2,}', 'g'), '$1\n'); this.data=this.data.replace(RegExp('^[\\s\\n]*'), ''); stuff=(RegExp('^([^\\n]|\\n[^\\n\\s])*')).exec(this.data); if (stuff) { d = stuff[0]; } if (!getValueOf('popupPreviewFirstParOnly')) { d = this.data; } /// now put \n\n after sections so that bullets and numbered lists work d=d.replace(RegExp('(==+[^=]*==+)\\s*', 'g'), '$1\n\n'); } // superfluous sentences are RIGHT OUT. // note: exactly 1 set of parens here needed to make the slice work d = d.parenSplit(RegExp('([!?.]+["'+"'"+']*\\s)','g')); // leading space is bad, mmkay? d[0]=d[0].replace(RegExp('^\\s*'), ''); var notSentenceEnds=RegExp('([^.][a-z][.] *[a-z]|etc|sic|Dr|Mr|Mrs|Ms|St|no|op|cit|\\[[^\\]]*|\\s[A-Zvclm])$', 'i'); d = this.fixSentenceEnds(d, notSentenceEnds); this.fullLength=d.join('').length; var maxChars=getValueOf('popupMaxPreviewCharacters') + this.extraCharacters; var n=this.maxSentences; var dd=this.firstSentences(d,n); do { dd=this.firstSentences(d,n); --n; } while ( dd.length > this.maxCharacters && n != 0 ); this.data = dd; }; /** @private */ Previewmaker.prototype.fixSentenceEnds = function(strs, reg) { // take an array of strings, strs // join strs[i] to strs[i+1] & strs[i+2] if strs[i] matches regex reg var abbrevRe=/\b[a-z][^a-z]*$/i; for (var i=0; i<strs.length-2; ++i) { if (reg.test(strs[i])) { a=[]; for (var j=0; j<strs.length; ++j) { if (j<i) a[j]=strs[j]; if (j==i) a[i]=strs[i]+strs[i+1]+strs[i+2]; if (j>i+2) a[j-2]=strs[j]; } return this.fixSentenceEnds(a,reg); } // BUGGY STUFF - trying to fix up [[S. C. Johnson & Son]] preview if (false && abbrevRe.test(strs[i])) { var j=i, buf=''; do { buf=buf+strs[i]+strs[i+1]; i=i+2; } while (i<strs.length-2 && abbrevRe.test(strs[i])); strs[i]=buf+strs[i]; var a=(j?strs.slice(0,j-1):[]).concat(strs.slice(i)); return this.fixSentenceEnds(a,reg); } } return strs; }; /** @private */ Previewmaker.prototype.firstSentences = function(strs, howmany) { var t=strs.slice(0, 2*howmany); return t.join(''); }; /** @private */ Previewmaker.prototype.killBadWhitespace = function() { // also cleans up isolated '''', eg [[Suntory Sungoliath]] this.data=this.data.replace(RegExp('^ *\'+ *$', 'gm'), ''); }; /** Runs the various methods to generate the preview. The preview is stored in the <code>html</html> field. @private */ Previewmaker.prototype.makePreview = function() { if (this.owner.article.namespace()!=pg.ns.template && this.owner.article.namespace()!=pg.ns.image ) { this.killComments(); this.killDivs(); this.killGalleries(); this.killBoxTemplates(); if (getValueOf('popupPreviewKillTemplates')) { this.killTemplates(); } else { this.killMultilineTemplates(); } this.killTables(); this.killImages(); this.killHTML(); this.killChunks(); this.mopup(); this.firstBit(); this.killBadWhitespace(); } else { this.killHTML(); } this.html=wiki2html(this.data, this.baseUrl); // needs livepreview this.fixHTML(); this.stripLongTemplates(); }; /** @private */ Previewmaker.prototype.esWiki2HtmlPart = function(data) { var reLinks = /(?:\[\[([^|\]]*)(?:\|([^|\]]*))*]]([a-z]*))/gi; //match a wikilink reLinks.lastIndex = 0; //reset regex var match; var result = ""; var postfixIndex = 0; while ((match = reLinks.exec(data)) != null) //match all wikilinks { //FIXME: the way that link is built here isn't perfect. It is clickable, but popups preview won't recognize it in some cases. result += escapeQuotesHTML(data.substring(postfixIndex, match.index)) + '<a href="'+Insta.conf.paths.articles+escapeQuotesHTML(match[1])+'">'+escapeQuotesHTML((match[2]?match[2]:match[1])+match[3])+"</a>"; postfixIndex = reLinks.lastIndex; } //append the rest result += escapeQuotesHTML(data.substring(postfixIndex)); return result; }; Previewmaker.prototype.editSummaryPreview=function() { var reAes = /\/\* *(.*?) *\*\//g; //match the first section marker reAes.lastIndex = 0; //reset regex var match; match = reAes.exec(this.data); if (match) { //we have a section link. Split it, process it, combine it. var prefix = this.data.substring(0,match.index-1); var section = match[1]; var postfix = this.data.substring(reAes.lastIndex); var start = "<span class='autocomment'>"; var end = "</span>"; if (prefix.length>0) start = this.esWiki2HtmlPart(prefix) + " " + start + "- "; if (postfix.length>0) end = ": " + end + this.esWiki2HtmlPart(postfix); var t=new Title().fromURL(this.baseUrl); t.anchorFromUtf(section); var sectionLink = Insta.conf.paths.articles + escapeQuotesHTML(t.toString(true)) + '#' + escapeQuotesHTML(t.anchor); return start + '<a href="'+sectionLink+'">&rarr;</a> '+escapeQuotesHTML(section) + end; } //else there's no section link, htmlify the whole thing. return this.esWiki2HtmlPart(this.data); }; //<NOLITE> /** Test function for debugging preview problems one step at a time. */ function previewSteps(txt) { try { txt=txt || document.editform.wpTextbox1.value; } catch (err) { if (pg.cache.pages.length > 0) { txt=pg.cache.pages[pg.cache.pages.length-1].data; } else { alert('provide text or use an edit page'); } } txt=txt.substring(0,10000); var base=pg.wiki.articlebase + Title.fromURL(document.location.href).urlString(); var p=new Previewmaker(txt, base, pg.current.link.navpopup); if (this.owner.article.namespace() != pg.ns.template) { p.killComments(); if (!confirm('done killComments(). Continue?\n---\n' + p.data)) { return; } p.killDivs(); if (!confirm('done killDivs(). Continue?\n---\n' + p.data)) { return; } p.killGalleries(); if (!confirm('done killGalleries(). Continue?\n---\n' + p.data)) { return; } p.killBoxTemplates(); if (!confirm('done killBoxTemplates(). Continue?\n---\n' + p.data)) { return; } if (getValueOf('popupPreviewKillTemplates')) { p.killTemplates(); if (!confirm('done killTemplates(). Continue?\n---\n' + p.data)) { return; } } else { p.killMultilineTemplates(); if (!confirm('done killMultilineTemplates(). Continue?\n---\n' + p.data)) { return; } } p.killTables(); if (!confirm('done killTables(). Continue?\n---\n' + p.data)) { return; } p.killImages(); if (!confirm('done killImages(). Continue?\n---\n' + p.data)) { return; } p.killHTML(); if (!confirm('done killHTML(). Continue?\n---\n' + p.data)) { return; } p.killChunks(); if (!confirm('done killChunks(). Continue?\n---\n' + p.data)) { return; } p.mopup(); if (!confirm('done mopup(). Continue?\n---\n' + p.data)) { return; } p.firstBit(); if (!confirm('done firstBit(). Continue?\n---\n' + p.data)) { return; } p.killBadWhitespace(); if (!confirm('done killBadWhitespace(). Continue?\n---\n' + p.data)) { return; } } p.html=wiki2html(p.data, base); // needs livepreview p.fixHTML(); if (!confirm('done fixHTML(). Continue?\n---\n' + p.html)) { return; } p.stripLongTemplates(); if (!confirm('done stripLongTemplates(). Continue?\n---\n' + p.html)) { return; } alert('finished preview - end result follows.\n---\n' + p.html); } //</NOLITE> /** Works around a quoting bug in livepreview. <code>wiki2html('[[Foo\'s "bar"]]')</code> gives @literal{<a href='Foo's "bar"'>} which doesn't do very well. We change this into @literal{<a href="Foo's %22bar%22">} @private */ Previewmaker.prototype.fixHTML = function() { if(!this.html) return; // all links seem to have potential issues with quotation marks var splitted=this.html.parenSplit(/href='([^>]*)'/g); var ret=''; for (var i=0; i<splitted.length; ++i) { if(i%2==0) { ret += splitted[i]; continue; } if(i%2==1) { ret += 'href="' + splitted[i].split('"').join('%22') + '"'; } } // fix question marks in wiki links // maybe this'll break some stuff :-( ret=ret.replace(RegExp('\(<a href="' + pg.wiki.articlePath + '/[^"]*\)[?]\(.*?"\)', 'g'), '$1%3F$2'); // FIXME fix up % too this.html=ret; }; /** Generates the preview and displays it in the current popup. Does nothing if the generated preview is invalid or consists of whitespace only. Also activates wikilinks in the preview for subpopups if the popupSubpopups option is true. */ Previewmaker.prototype.showPreview = function () { this.makePreview(); if (typeof this.html != typeof '') return; if (RegExp('^\\s*$').test(this.html)) return; setPopupHTML('<hr>', 'popupPrePreviewSep', this.owner.idNumber); setPopupTipsAndHTML(this.html, 'popupPreview', this.owner.idNumber, { owner: this.owner }); var more = (this.fullLength > this.data.length) ? this.moreLink() : ''; setPopupHTML(more, 'popupPreviewMore', this.owner.idNumber); }; /** @private */ Previewmaker.prototype.moreLink=function() { var a=document.createElement('a'); a.className='popupMoreLink'; a.innerHTML=popupString('more...'); var savedThis=this; a.onclick=function() { savedThis.maxCharacters+=2000; savedThis.maxSentences+=20; savedThis.setData(); savedThis.showPreview(); } return a; } /** @private */ Previewmaker.prototype.stripLongTemplates = function() { // operates on the HTML! this.html=this.html.replace(RegExp('^.{0,1000}[{][{][^}]*?(<(p|br)( /)?>\\s*){2,}([^{}]*?[}][}])?', 'gi'), ''); this.html=this.html.split('\n').join(' '); // workaround for <pre> templates this.html=this.html.replace(RegExp('[{][{][^}]*<pre>[^}]*[}][}]','gi'), ''); }; /** @private */ Previewmaker.prototype.killMultilineTemplates = function() { this.kill('{{{', '}}}'); this.kill(RegExp('\\s*[{][{][^{}]*\\n'), '}}', '{{'); }; // ENDFILE: previewmaker.js // STARTFILE: querypreview.js function loadAPIPreview(queryType, article, navpop) { var art=new Title(article).urlString(); var url=pg.wiki.apiwikibase + '?format=json&action=query&'; var htmlGenerator=function(a,d){alert('invalid html generator');}; switch (queryType) { case 'history': url += 'meta=userinfo&uiprop=options&titles=' + art + '&prop=revisions&rvlimit=' + getValueOf('popupHistoryPreviewLimit'); htmlGenerator=APIhistoryPreviewHTML; break; case 'category': url += 'list=categorymembers&cmtitle=' + art; htmlGenerator=APIcategoryPreviewHTML; break; case 'userinfo': var usernameart = encodeURIComponent( new Title( article ).userName() ); url += 'list=users&usprop=blockinfo|groups|editcount|registration&ususers=' + usernameart; htmlGenerator=APIuserInfoPreviewHTML; break; case 'contribs': var usernameart = encodeURIComponent( new Title( article ).userName() ); url += 'list=usercontribs&meta=userinfo&uiprop=options&ucuser=' + usernameart + '&uclimit=' + getValueOf('popupContribsPreviewLimit'); htmlGenerator=APIcontribsPreviewHTML; break; case 'imagepagepreview': var trail=''; if (getValueOf('popupImageLinks')) { trail = '&list=imageusage&iutitle=' + art; } url += 'titles=' + art + '&prop=revisions|imageinfo&rvprop=content' + trail; htmlGenerator=APIimagepagePreviewHTML; break; case 'backlinks': url += 'list=backlinks&bltitle=' + art; htmlGenerator=APIbacklinksPreviewHTML; break; } pendingNavpopTask(navpop); if( !window.wgEnableAPI || !wgEnableAPI ) { /* The API is not available */ htmlGenerator=function(a,d){ return 'This function of navigation popups now requires a MediaWiki ' + 'installation with the <a href="http://www.mediawiki.org/wiki/API">API</a> enabled.'; }; } var callback=function(d){ log( "callback of API functions was hit" ); showAPIPreview(queryType, htmlGenerator(article,d,navpop), navpop.idNumber, navpop, d); }; var go = function(){ getPageWithCaching(url, callback, navpop); return true; } if (navpop.visible || !getValueOf('popupLazyDownloads')) { go(); } else { navpop.addHook(go, 'unhide', 'before', 'DOWNLOAD_'+queryType+'_QUERY_DATA'); } } function linkList(list) { list.sort(function(x,y) { return (x==y ? 0 : (x<y ? -1 : 1)); }); var buf=[]; for (var i=0; i<list.length; ++i) { buf.push(wikiLink({article: new Title(list[i]), text: list[i].split(' ').join('&nbsp;'), action: 'view'})); } return buf.join(', '); } function getTimeOffset(tz) { if( tz ) { if( tz.indexOf('|') > -1 ) { // New format return parseInt(tz.split('|')[1],10); } else if ( tz.indexOf(':') > -1 ) { // Old format return( parseInt(tz,10)*60 + parseInt(tz.split(':')[1],10) ); } } return 0; } function editPreviewTable(article, h, reallyContribs, timeOffset) { var html=['<table>']; var day=null; var curart=article; for (var i=0; i<h.length; ++i) { if (reallyContribs) { var page=h[i]['title']; curart = new Title(page); } var minor=typeof h[i]['minor']=='undefined' ? '' : '<b>m </b>'; var editDate=adjustDate(getDateFromTimestamp(h[i].timestamp), timeOffset); var thisDay = dayFormat(editDate); var thisTime = timeFormat(editDate); if (thisDay==day) { thisDay=''; } else { day=thisDay; } if (thisDay) { html.push( '<tr><td colspan=3><span class="popup_history_date">' + thisDay+'</span></td></tr>' ); } html.push('<tr class="popup_history_row_' + ( (i%2) ? 'odd' : 'even') + '">'); html.push('<td>(<a href="' + pg.wiki.titlebase + new Title(curart).urlString() + '&diff=prev&oldid=' + h[i]['revid'] + '">' + popupString('last') + '</a>)</td>'); html.push('<td>' + '<a href="' + pg.wiki.titlebase + new Title(curart).urlString() + '&oldid=' + h[i]['revid'] + '">' + thisTime + '</a></td>'); var col3url='', col3txt=''; if (!reallyContribs) { var user=h[i]['user']; col3url=pg.wiki.titlebase + pg.ns.user + ':' + new Title(user).urlString(); col3txt=escapeQuotesHTML(user); } else { col3url=pg.wiki.titlebase + curart.urlString(); col3txt=escapeQuotesHTML(page); } html.push('<td>' + (reallyContribs ? minor : '') + '<a href="' + col3url + '">' + col3txt + '</a></td>'); var comment=''; var c=h[i].comment || h[i]['*']; if (c) { comment=new Previewmaker(c, new Title(curart).toUrl()).editSummaryPreview(); } html.push('<td>' + (!reallyContribs ? minor : '') + comment + '</td>'); html.push('</tr>'); html=[html.join('')]; } html.push('</table>'); return html.join(''); } function getDateFromTimestamp(t) { var s=t.split(/[^0-9]/); switch(s.length) { case 0: return null; case 1: return new Date(s[0]); case 2: return new Date(s[0], s[1]-1); case 3: return new Date(s[0], s[1]-1, s[2]); case 4: return new Date(s[0], s[1]-1, s[2], s[3]); case 5: return new Date(s[0], s[1]-1, s[2], s[3], s[4]); case 6: return new Date(s[0], s[1]-1, s[2], s[3], s[4], s[5]); default: return new Date(s[0], s[1]-1, s[2], s[3], s[4], s[5], s[6]); } } function adjustDate(d, offset) { // offset is in minutes var o=offset * 60 * 1000; return new Date( +d + o); } function dayFormat(editDate, utc) { if (utc) { return map(zeroFill, [editDate.getUTCFullYear(), editDate.getUTCMonth()+1, editDate.getUTCDate()]).join('-'); } return map(zeroFill, [editDate.getFullYear(), editDate.getMonth()+1, editDate.getDate()]).join('-'); } function timeFormat(editDate, utc) { if (utc) { return map(zeroFill, [editDate.getUTCHours(), editDate.getUTCMinutes(), editDate.getUTCSeconds()]).join(':'); } return map(zeroFill, [editDate.getHours(), editDate.getMinutes(), editDate.getSeconds()]).join(':'); } function showAPIPreview(queryType, html, id, navpop, download) { // DJ: done var target='popupPreview'; switch (queryType) { case 'imagelinks': case 'category': case 'userinfo': target='popupPostPreview'; break; } setPopupTipsAndHTML(html, target, id); completedNavpopTask(navpop); } function APIbacklinksPreviewHTML(article, download, navpop) { try { var jsObj=getJsObj(download.data); var list=jsObj.query.backlinks; } catch (someError) { return 'backlinksPreviewHTML went wonky'; } var html=[]; if (!list) { return popupString('No backlinks found'); } for ( i in list ) { var t=new Title(list[i]['title']); html.push('<a href="' + pg.wiki.titlebase + t.urlString() + '">' + t + '</a>'); } html=html.join(', '); if (jsObj['query-continue'] && jsObj['query-continue'].backlinks && jsObj['query-continue'].backlinks.blcontinue) { html += popupString(' and more'); } return html; } function APIsharedImagePagePreviewHTML(obj) { log( "APIsharedImagePagePreviewHTML" ); var popupid = obj['requestid']; if( obj['query'] && obj['query']['pages'] ) { var page=anyChild(obj['query']['pages']); var content=(page && page.revisions ) ? page.revisions[0]['*'] : null; if( content ) { /* Not entirely safe, but the best we can do */ var p=new Previewmaker(content, pg.current.link.navpopup.article, pg.current.link.navpopup); p.makePreview(); setPopupHTML( p.html, "popupSecondPreview", popupid ); } } } function APIimagepagePreviewHTML(article, download, navpop) { try { var jsObj=getJsObj(download.data); var page=anyChild(jsObj.query.pages); var content=(page && page.revisions ) ? page.revisions[0]['*'] : null; } catch (someError) { return 'API imagepage preview failed :('; } var ret=''; if (content) { var p=prepPreviewmaker(content, article, navpop); p.makePreview(); if (p.html) { ret += '<hr>' + p.html; } } if (content!==null && getValueOf('popupSummaryData')) { var info=getPageInfo(content, download); log(info); setPopupTrailer(info, navpop.idNumber); } if (page && page.imagerepository == "shared" ) { var art=new Title(article).urlString(); var encart = encodeURIComponent( "File:" + art.stripNamespace() ); var shared_url = pg.wiki.apicommonsbase + '?format=json&callback=APIsharedImagePagePreviewHTML' + '&requestid=' + navpop.idNumber + '&action=query&prop=revisions&rvprop=content&titles=' + encart; ret = ret +'<hr>' + popupString( 'Image from Commons') + ': <a href="' + pg.wiki.commonsbase + '?title=' + encart + '">' + popupString( 'Description page') + '</a>'; importScriptURI( shared_url ); } showAPIPreview('imagelinks', APIimagelinksPreviewHTML(article,download), navpop.idNumber, download); return ret; } function APIimagelinksPreviewHTML(article, download) { try { var jsobj=getJsObj(download.data); var list=jsobj.query.imageusage; if (!list) { return popupString('No image links found'); } } catch(someError) { return 'Image links preview generation failed :('; } var ret=[]; for (var i=0; i < list.length; i++) { ret.push(list[i]['title']); } if (ret.length === 0) { return popupString('No image links found'); } return '<h2>' + popupString('File links') + '</h2>' + linkList(ret); } function APIcategoryPreviewHTML(article, download) { try{ var jsobj=getJsObj(download.data); var list=jsobj.query.categorymembers; } catch(someError) { return 'Category preview failed :('; } var ret=[]; for (var p=0; p < list.length; p++) { ret.push(list[p]['title']); } if (ret.length === 0) { return popupString('Empty category'); } ret = '<h2>' + tprintf('Category members (%s shown)', [ret.length]) + '</h2>' +linkList(ret); if (jsobj['query-continue'] && jsobj['query-continue'].categorymembers && jsobj['query-continue'].categorymembers.cmcontinue) { ret += popupString(' and more'); } return ret; } function APIuserInfoPreviewHTML(article, download) { try{ var jsobj=getJsObj(download.data); var user=anyChild(jsobj.query.users); } catch(someError) { return 'Userinfo preview failed :('; } if (!user || user.invalid == '') { return '<hr>' + popupString( 'Invalid or IP user'); } else if (user.missing == '') { return '<hr>' + popupString( 'Not a registered username'); } var ret=[]; if( user.blockedby ) ret.push('<b>' + popupString('BLOCKED') + '</b>'); for( var i=0; (user.groups && i < user.groups.length); i++) { ret.push( user.groups[i] ); } if( user.editcount || user.registration ) ret.push( (user.editcount?user.editcount:'') + popupString(' edits since: ') + (user.registration?dayFormat(getDateFromTimestamp(user.registration)):'') ); ret = '<hr>' + ret.join( ', ' ); return ret; } function APIcontribsPreviewHTML(article, download, navpop) { return APIhistoryPreviewHTML(article, download, navpop, true); } function APIhistoryPreviewHTML(article, download, navpop, reallyContribs) { try { var jsobj=getJsObj(download.data); var tz=jsobj.query.userinfo.options.timecorrection; if( reallyContribs ) var edits=jsobj.query.usercontribs; else var edits=anyChild(jsobj.query.pages)['revisions']; } catch (someError) { return 'History preview failed :-('; } var timeOffset = getTimeOffset(tz); Cookie.create('popTz', timeOffset, 1); var ret=editPreviewTable(article, edits, reallyContribs, timeOffset); return ret; } //</NOLITE> // ENDFILE: querypreview.js // STARTFILE: debug.js //////////////////////////////////////////////////////////////////// // Debugging functions //////////////////////////////////////////////////////////////////// function log(){}; // dummy to stop errors function setupDebugging() { //<NOLITE> if (window.popupDebug) { // popupDebug is set from .version window.log=function(x) { //if(gMsg!='')gMsg += '\n'; gMsg+=time() + ' ' + x; }; window.console.log(x); } window.errlog=function(x) { window.console.error(x); } log('Initializing logger'); } else { //</NOLITE> window.log = function(x) {}; window.errlog = function(x) {}; //<NOLITE> } //</NOLITE> } // ENDFILE: debug.js // STARTFILE: images.js // load image of type Title. function loadImage(image, navpop) { if (typeof image.stripNamespace != 'function') { alert('loadImages bad'); } // API call to retrieve image info. if (!getValueOf('popupImages') || !window.wgEnableAPI || !wgEnableAPI) return; if (!isValidImageName(image)) return false; var art=image.urlString(); var url=pg.wiki.apiwikibase + '?format=json&action=query'; url += '&prop=imageinfo&iiprop=url|mime&iiurlwidth=' + getValueOf('popupImageSizeLarge');; url += '&titles=' + art; pendingNavpopTask(navpop); var callback=function(d){ popupsInsertImage(navpop.idNumber, navpop, d); }; var go = function(){ getPageWithCaching(url, callback, navpop); return true; } if (navpop.visible || !getValueOf('popupLazyDownloads')) { go(); } else { navpop.addHook(go, 'unhide', 'after', 'DOWNLOAD_IMAGE_QUERY_DATA'); } } function popupsInsertImage(id, navpop, download) { log( "popupsInsertImage"); try { var jsObj=getJsObj(download.data); var imagepage=anyChild(jsObj.query.pages); var imageinfo = imagepage.imageinfo[0]; } catch (someError) { log( "popupsInsertImage failed :(" ); return; } var popupImage = document.getElementById("popupImg"+id); if (!popupImage) { log( "could not find insertion point for image"); return; } popupImage.width=getValueOf('popupImageSize'); popupImage.style.display='inline'; // Set the source for the image. if( imageinfo.thumburl ) popupImage.src=imageinfo.thumburl; else if( imageinfo.mime.indexOf("image") == 0 ){ popupImage.src=imageinfo.url; log( "a thumb could not be found, using original image" ); } else log( "fullsize imagethumb, but not sure if it's an image"); var a=document.getElementById("popupImageLink"+id); if (a === null) { return null; } // Determine the action of the surrouding imagelink. switch (getValueOf('popupThumbAction')) { case 'imagepage': if (pg.current.article.namespace()!=pg.ns.image) { a.href=imageinfo.descriptionurl; // FIXME: unreliable pg.idNumber popTipsSoonFn('popupImage' + id)(); break; } // else fall through case 'sizetoggle': a.onclick=toggleSize; a.title=popupString('Toggle image size'); return; case 'linkfull': a.href = imageinfo.url; a.title=popupString('Open full-size image'); return; } } // Toggles the image between inline small and navpop fullwidth. // It's the same image, no actual sizechange occurs, only display width. function toggleSize() { var imgContainer=this; if (!imgContainer) { alert('imgContainer is null :/'); return;} img=imgContainer.firstChild; if (!img) { alert('img is null :/'); return;} if (!img.style.width || img.style.width=='') { img.style.width='100%'; } else { img.style.width=''; } } // Returns one title of an image from wikiText. function getValidImageFromWikiText(wikiText) { // nb in pg.re.image we're interested in the second bracketed expression // this may change if the regex changes :-( //var match=pg.re.image.exec(wikiText); var matched=null; var match; // strip html comments, used by evil bots :-( var t = removeMatchesUnless(wikiText, RegExp('(<!--[\\s\\S]*?-->)'), 1, RegExp('^<!--[^[]*popup', 'i')); while ( match = pg.re.image.exec(t) ) { // now find a sane image name - exclude templates by seeking { var m = match[2] || match[6]; if ( isValidImageName(m) ) { matched=m; break; } } pg.re.image.lastIndex=0; if (!matched) { return null; } return pg.ns.image+':'+upcaseFirst(matched); } function removeMatchesUnless(str, re1, parencount, re2) { var split=str.parenSplit(re1); var c=parencount + 1; for (var i=0; i<split.length; ++i) { if ( i%c === 0 || re2.test(split[i]) ) { continue; } split[i]=''; } return split.join(''); } //</NOLITE> // ENDFILE: images.js // STARTFILE: namespaces.js // Set up namespaces and other non-strings.js localization // (currently that means redirs too) // Put the right namespace list into pg.ns.list, based on pg.wiki.lang // Default to english if nothing seems to fit function setNamespaceList() { var m="Media"; var list = [m, "Special", "Talk", "User", "User talk", "Wikipedia", "Wikipedia talk", "File", "File talk", "MediaWiki", "MediaWiki talk", "Template", "Template talk", "Help", "Help talk", "Category", "Category talk", "Portal", "Portal talk"]; var nsIndex = { '': 0, 'Special': 1, 'Talk': 2, 'User': 3, 'User talk': 4, 'Wikipedia': 5, 'Wikipedia talk': 6, 'Image': 7, 'File': 7, 'Image talk': 8, 'File talk' : 8, 'MediaWiki': 9, 'MediaWiki talk': 10, 'Template': 11, 'Template talk': 12, 'Help': 13, 'Help talk': 14, 'Category': 15, 'Category talk':16, 'Portal': 17, 'Portal talk': 18}; var nsLists = { //<NOLITE> "af": [m, "Spesiaal", "Bespreking", "Gebruiker", "Gebruikerbespreking", "Wikipedia", "Wikipediabespreking", "Beeld", "Beeldbespreking", "MediaWiki", "MediaWikibespreking", "Sjabloon", "Sjabloonbespreking", "Hulp", "Hulpbespreking", "Kategorie", "Kategoriebespreking"], "als": [m, "Spezial", "Diskussion", "Benutzer", "Benutzer Diskussion", "Wikipedia", "Wikipedia Diskussion", "Bild", "Bild Diskussion", "MediaWiki", "MediaWiki Diskussion", "Vorlage", "Vorlage Diskussion", "Hilfe", "Hilfe Diskussion", "Kategorie", "Kategorie Diskussion"], "ar": ["ملف", "خاص", "نقاش", "مستخدم", "نقاش المستخدم", "ويكيبيديا", "نقاش ويكيبيديا", "صورة", "نقاش الصورة", "ميدياويكي", "نقاش ميدياويكي", "Template", "نقاش Template", "مساعدة", "نقاش المساعدة", "تصنيف", "نقاش التصنيف"], "ast": [m, "Especial", "Discusión", "Usuariu", "Usuariu discusión", "Uiquipedia", "Uiquipedia discusión", "Imaxen", "Imaxen discusión", "MediaWiki", "MediaWiki discusión", "Plantilla", "Plantilla discusión", "Ayuda", "Ayuda discusión", "Categoría", "Categoría discusión"], "be": ["Мэдыя", "Спэцыяльныя", "Абмеркаваньне", "Удзельнік", "Гутаркі ўдзельніка", "Вікіпэдыя", "Абмеркаваньне Вікіпэдыя", "Выява", "Абмеркаваньне выявы", "MediaWiki", "Абмеркаваньне MediaWiki", "Шаблён", "Абмеркаваньне шаблёну", "Дапамога", "Абмеркаваньне дапамогі", "Катэгорыя", "Абмеркаваньне катэгорыі"], "bg": ["Медия", "Специални", "Беседа", "Потребител", "Потребител беседа", "Уикипедия", "Уикипедия беседа", "Картинка", "Картинка беседа", "МедияУики", "МедияУики беседа", "Шаблон", "Шаблон беседа", "Помощ", "Помощ беседа", "Категория", "Категория беседа"], "bm": [m, "Special", "Discuter", "Utilisateur", "Discussion Utilisateur", "Wikipedia", "Discussion Wikipedia", "Image", "Discussion Image", "MediaWiki", "Discussion MediaWiki", "Modèle", "Discussion Modèle", "Aide", "Discussion Aide", "Catégorie", "Discussion Catégorie"], "bn": ["বিশেষ", "আলাপ", "ব্যবহারকারী", "ব্যবহারকারী আলাপ", "উইকিপেডিয়া", "উইকিপেডিয়া আলাপ", "চিত্র", "চিত্র আলাপ", "MediaWik i আলাপ", m, "MediaWiki", "Template", "Template talk", "Help", "Help talk", "Category", "Category talk"], "br": [m, "Dibar", "Kaozeal", "Implijer", "Kaozeadenn Implijer", "Wikipedia", "Kaozeadenn Wikipedia", "Skeudenn", "Kaozeadenn Skeudenn", "MediaWiki", "Kaozeadenn MediaWiki", "Patrom", "Kaozeadenn Patrom", "Skoazell", "Kaozeadenn Skoazell", "Rummad", "Kaozeadenn Rummad"], "ca": [m, "Especial", "Discussió", "Usuari", "Usuari Discussió", "Viquipèdia", "Viquipèdia Discussió", "Imatge", "Imatge Discussió", "MediaWiki", "MediaWiki Discussió", "Template", "Template Discussió", "Ajuda", "Ajuda Discussió", "Categoria", "Categoria Discussió"], "cs": ["Média", "Speciální", "Diskuse", "Wikipedista", "Wikipedista diskuse", "Wikipedie", "Wikipedie diskuse", "Soubor", "Soubor diskuse", "MediaWiki", "MediaWiki diskuse", "Šablona", "Šablona diskuse", "Nápověda", "Nápověda diskuse", "Kategorie", "Kategorie diskuse"], "csb": [m, "Specjalnô", "Diskùsëjô", "Brëkòwnik", "Diskùsëjô brëkòwnika", "Wiki", "Diskùsëjô Wiki", "Òbrôzk", "Diskùsëjô òbrôzków", "MediaWiki", "Diskùsëjô MediaWiki", "Szablóna", "Diskùsëjô Szablónë", "Pòmòc", "Diskùsëjô Pòmòcë", "Kategòrëjô", "Diskùsëjô Kategòrëji"], "cv": ["Медиа", "Ятарлă", "Сӳтсе явасси", "Хутшăнакан", "Хутшăнаканăн канашлу страници", "Wikipedia", "0", "Ӳкерчĕк", "Ӳкерчĕке сӳтсе явмалли", "MediaWiki", "MediaWiki сӳтсе явмалли", "Шаблон", "Шаблона сӳтсе явмалли", "Пулăшу", "Пулăшăва сӳтсе явмалли", "Категори", "Категорине сӳтсе явмалли"], "cy": [m, "Arbennig", "Sgwrs", "Defnyddiwr", "Sgwrs Defnyddiwr", "Wicipedia", "Sgwrs Wicipedia", "Delwedd", "Sgwrs Delwedd", "MediaWiki", "Sgwrs MediaWiki", "Nodyn", "Sgwrs Nodyn", "Help", "Help talk", "Category", "Category talk"], "da": [m, "Speciel", "Diskussion", "Bruger", "Brugerdiskussion", "Wikipedia", "Wikipedia-diskussion", "Billede", "Billeddiskussion", "MediaWiki", "MediaWiki-diskussion", "Skabelon", "Skabelondiskussion", "Hjælp", "Hjælpdiskussion", "Kategori", "Kategoridiskussion", "Portal", "Portaldiskussion"], "de": [m, "Spezial", "Diskussion", "Benutzer", "Benutzer Diskussion", "Wikipedia", "Wikipedia Diskussion", "Bild", "Bild Diskussion", "MediaWiki", "MediaWiki Diskussion", "Vorlage", "Vorlage Diskussion", "Hilfe", "Hilfe Diskussion", "Kategorie", "Kategorie Diskussion", "Portal", "Portal Diskussion"], "el": ["Μέσον", "Ειδικό", "Συζήτηση", "Χρήστης", "Συζήτηση χρήστη", "Βικιπαίδεια", "Βικιπαίδεια συζήτηση", "Εικόνα", "Συζήτηση εικόνας", "MediaWiki", "MediaWiki talk", "Πρότυπο", "Συζήτηση προτύπου", "Βοήθεια", "Συζήτηση βοήθειας", "Κατηγορία", "Συζήτηση κατηγορίας"], "eo": [m, "Speciala", "Diskuto", "Uzanto", "Uzanta diskuto", "Vikipedio", "Vikipedio diskuto", "Dosiero", "Dosiera diskuto", "MediaWiki", "MediaWiki diskuto", "Ŝablono", "Ŝablona diskuto", "Helpo", "Helpa diskuto", "Kategorio", "Kategoria diskuto"], "es": [m, "Especial", "Discusión", "Usuario", "Usuario Discusión", "Wikipedia", "Wikipedia Discusión", "Imagen", "Imagen Discusión", "MediaWiki", "MediaWiki Discusión", "Plantilla", "Plantilla Discusión", "Ayuda", "Ayuda Discusión", "Categoría", "Categoría Discusión"], "et": ["Meedia", "Eri", "Arutelu", "Kasutaja", "Kasutaja arutelu", "Vikipeedia", "Vikipeedia arutelu", "Pilt", "Pildi arutelu", "MediaWiki", "MediaWiki arutelu", "Mall", "Malli arutelu", "Juhend", "Juhendi arutelu", "Kategooria", "Kategooria arutelu"], "eu": [m, "Aparteko", "Eztabaida", "Lankide", "Lankide eztabaida", "Wikipedia", "Wikipedia eztabaida", "Irudi", "Irudi eztabaida", "MediaWiki", "MediaWiki eztabaida", "Template", "Template talk", "Help", "Help talk", "Category", "Category talk"], "fa": ["مدیا", "ویژه", "بحث", "کاربر", "بحث کاربر", "ویکی‌پدیا", "بحث ویکی‌پدیا", "تصویر", "بحث تصویر", "مدیاویکی", "بحث مدیاویکی", "الگو", "بحث الگو", "راهنما", "بحث راهنما", "رده", "بحث رده"], "fi": [m, "Toiminnot", "Keskustelu", "Käyttäjä", "Keskustelu käyttäjästä", "Wikipedia", "Keskustelu Wikipediasta", "Kuva", "Keskustelu kuvasta", "MediaWiki", "MediaWiki talk", "Malline", "Keskustelu mallineesta", "Ohje", "Keskustelu ohjeesta", "Luokka", "Keskustelu luokasta"], "fo": ["Miðil", "Serstakur", "Kjak", "Brúkari", "Brúkari kjak", "Wikipedia", "Wikipedia kjak", "Mynd", "Mynd kjak", "MidiaWiki", "MidiaWiki kjak", "Fyrimynd", "Fyrimynd kjak", "Hjálp", "Hjálp kjak", "Bólkur", "Bólkur kjak"], "fr": [m, "Spécial", "Discuter", "Utilisateur", "Discussion Utilisateur", "Wikipédia", "Discussion Wikipédia", "Image", "Discussion Image", "MediaWiki", "Discussion MediaWiki", "Modèle", "Discussion Modèle", "Aide", "Discussion Aide", "Catégorie", "Discussion Catégorie", "Portail", "Discussion Portail"], "fur": [m, "Speciâl", "Discussion", "Utent", "Discussion utent", "Vichipedie", "Discussion Vichipedie", "Figure", "Discussion figure", "MediaWiki", "Discussion MediaWiki", "Model", "Discussion model", "Jutori", "Discussion jutori", "Categorie", "Discussion categorie"], "fy": [m, "Wiki", "Oerlis", "Meidogger", "Meidogger oerlis", "Wikipedy", "Wikipedy oerlis", "Ofbyld", "Ofbyld oerlis", "MediaWiki", "MediaWiki oerlis", "Berjocht", "Berjocht oerlis", "Hulp", "Hulp oerlis", "Kategory", "Kategory oerlis"], "ga": ["Meán", "Speisialta", "Plé", "Úsáideoir", "Plé úsáideora", "Vicipéid", "Plé Vicipéide", "Íomhá", "Plé íomhá", "MediaWiki", "Plé MediaWiki", "Teimpléad", "Plé teimpléid", "Cabhair", "Plé cabhrach", "Catagóir", "Plé catagóire"], "gl": [m, "Especial", "Conversa", "Usuario", "Conversa usuario", "Wikipedia", "Conversa Wikipedia", "Ficheiro", "Conversa ficheiro", "MediaWiki", "Conversa MediaWiki", "Modelo", "Conversa modelo", "Axuda", "Conversa axuda", "Categoría", "Conversa categoría", "Portal", "Portal talk"], "gu": [m, "Special", "Talk", "User", "User talk", "વિકિપીડિયા", "વિકિપીડિયા talk", "Image", "Image talk", "MediaWiki", "MediaWiki talk", "Template", "Template talk", "Help", "Help talk", "Category", "Category talk"], "he": [m, "מיוחד", "שיחה", "משתמש", "שיחת משתמש", "ויקיפדיה", "שיחת ויקיפדיה", "תמונה", "שיחת תמונה", "MediaWiki", "שיחת MediaWiki", "תבנית", "שיחת תבנית", "עזרה", "שיחת עזרה", "קטגוריה", "שיחת קטגוריה"], "hi": [m, "विशेष", "वार्ता", "सदस्य", "सदस्य वार्ता", "विकिपीडिया", "विकिपीडिया वार्ता", "चित्र", "चित्र वार्ता", "MediaWiki", "MediaWiki talk", "Template", "Template talk", "श्रेणी", "श्रेणी वार्ता", "Help", "Help talk"], "hr": ["Mediji", "Posebno", "Razgovor", "Suradnik", "Razgovor sa suradnikom", "Wikipedia", "Razgovor Wikipedia", "Slika", "Razgovor o slici", "MediaWiki", "MediaWiki razgovor", "Predložak", "Razgovor o predlošku", "Pomoć", "Razgovor o pomoći", "Kategorija", "Razgovor o kategoriji"], "hu": [ "Média", "Speciális", "Vita", "Szerkesztő", "Szerkesztővita", "Wikipédia", "Wikipédia-vita", "Kép", "Képvita", "MediaWiki", "MediaWiki-vita", "Sablon", "Sablonvita", "Segítség", "Segítségvita", "Kategória", "Kategóriavita", "Portál", "Portálvita"], "ia": [m, "Special", "Discussion", "Usator", "Discussion Usator", "Wikipedia", "Discussion Wikipedia", "Imagine", "Discussion Imagine", "MediaWiki", "Discussion MediaWiki", "Template", "Template talk", "Help", "Help talk", "Category", "Category talk"], "id": [m, "Istimewa", "Bicara", "Pengguna", "Bicara Pengguna", "Wikipedia", "Pembicaraan Wikipedia", "Gambar", "Pembicaraan Gambar", "MediaWiki", "Pembicaraan MediaWiki", "Templat", "Pembicaraan Templat", "Bantuan", "Pembicaraan Bantuan", "Kategori", "Pembicaraan Kategori"], "is": ["Miðill", "Kerfissíða", "Spjall", "Notandi", "Notandaspjall", "Wikipedia", "Wikipediaspjall", "Mynd", "Myndaspjall", "Melding", "Meldingarspjall", "Snið", "Sniðaspjall", "Hjálp", "Hjálparspjall", "Flokkur", "Flokkaspjall"], "it": [m, "Speciale", "Discussione", "Utente", "Discussioni utente", "Wikipedia", "Discussioni Wikipedia", "File", "Discussioni file", "MediaWiki", "Discussioni MediaWiki", "Template", "Discussioni template", "Aiuto", "Discussioni aiuto", "Categoria", "Discussioni categoria", "Portale", "Discussioni portale", "Progetto", "Discussioni progetto"], "ja": [m, "特別", "ノート", "利用者", "利用者‐会話", "Wikipedia", "Wikipedia‐ノート", "画像", "画像‐ノート", "MediaWiki", "MediaWiki‐ノート", "Template", "Template‐ノート", "Help", "Help‐ノート", "Category", "Category‐ノート"], "ka": ["მედია", "სპეციალური", "განხილვა", "მომხმარებელი", "მომხმარებელი განხილვა", "ვიკიპედია", "ვიკიპედია განხილვა", "სურათი", "სურათი განხილვა", "მედიავიკი", "მედიავიკი განხილვა", "თარგი", "თარგი განხილვა", "დახმარება", "დახმარება განხილვა", "კატეგორია", "კატეგორია განხილვა"], "ko": [m, "특수기능", "토론", "사용자", "사용자토론", "위키백과", "위키백과토론", "그림", "그림토론", "분류", "분류토론", "MediaWiki", "MediaWiki talk", "Template", "Template talk", "Help", "Help talk"], "ku": ["Medya", "Taybet", "Nîqaş", "Bikarhêner", "Bikarhêner nîqaş", "Wîkîpediya", "Wîkîpediya nîqaş", "Wêne", "Wêne nîqaş", "MediaWiki", "MediaWiki nîqaş", "Şablon", "Şablon nîqaş", "Alîkarî", "Alîkarî nîqaş", "Kategorî", "Kategorî nîqaş"], "la": ["Specialis", "Disputatio", "Usor", "Disputatio Usoris", "Vicipaedia", "Disputatio Vicipaediae", "Imago", "Disputatio Imaginis", "MediaWiki", "Disputatio MediaWiki", "Formula", "Disputatio Formulae", "Auxilium", "Disputatio Auxilii", "Categoria", "Disputatio Categoriae", m], "li": [m, "Speciaal", "Euverlik", "Gebroeker", "Euverlik gebroeker", "Wikipedia", "Euverlik Wikipedia", "Aafbeilding", "Euverlik afbeelding", "MediaWiki", "Euverlik MediaWiki", "Sjabloon", "Euverlik sjabloon", "Help", "Euverlik help", "Kategorie", "Euverlik kategorie"], "lt": ["Medija", "Specialus", "Aptarimas", "Naudotojas", "Naudotojo aptarimas", "Wikipedia", "Wikipedia aptarimas", "Vaizdas", "Vaizdo aptarimas", "MediaWiki", "MediaWiki aptarimas", "Šablonas", "Šablono aptarimas", "Pagalba", "Pagalbos aptarimas", "Kategorija", "Kategorijos aptarimas"], "mk": ["Медија", "Специјални", "Разговор", "Корисник", "Корисник разговор", "Wikipedia", "Wikipedia разговор", "Слика", "Слика разговор", "МедијаВики", "МедијаВики разговор", "Шаблон", "Шаблон разговор", "Помош", "Помош разговор", "Категорија", "Категорија разговор"], "ms": [m, "Istimewa", "Perbualan", "Pengguna", "Perbualan Pengguna", "Wikipedia", "Perbualan Wikipedia", "Imej", "Imej Perbualan", "MediaWiki", "MediaWiki Perbualan", "Template", "Template talk", "Help", "Help talk", "Category", "Category talk"], "mt": [m, "Special", "Talk", "User", "User talk", "Wikipedija", "Wikipedija talk", "Image", "Image talk", "MediaWiki", "MediaWiki talk", "Template", "Template talk", "Help", "Help talk", "Category", "Category talk"], "nap": [m, "Speciale", "Discussione", "Utente", "Discussioni utente", "Wikipedia", "Discussioni Wikipedia", "Immagine", "Discussioni immagine", "MediaWiki", "Discussioni MediaWiki", "Template", "Discussioni template", "Aiuto", "Discussioni aiuto", "Categoria", "Discussioni categoria"], "nds": [m, "Spezial", "Diskuschoon", "Bruker", "Bruker Diskuschoon", "Wikipedia", "Wikipedia Diskuschoon", "Bild", "Bild Diskuschoon", "MediaWiki", "MediaWiki Diskuschoon", "Vörlaag", "Vörlaag Diskuschoon", "Hülp", "Hülp Diskuschoon", "Kategorie", "Kategorie Diskuschoon"], "nl": [m, "Speciaal", "Overleg", "Gebruiker", "Overleg gebruiker", "Wikipedia", "Overleg Wikipedia", "Bestand", "Overleg bestand", "MediaWiki", "Overleg MediaWiki", "Sjabloon", "Overleg sjabloon", "Help", "Overleg help", "Categorie", "Overleg categorie"], "nn": ["Filpeikar", "Spesial", "Diskusjon", "Brukar", "Brukardiskusjon", "Wikipedia", "Wikipedia-diskusjon", "Fil", "Fildiskusjon", "MediaWiki", "MediaWiki-diskusjon", "Mal", "Maldiskusjon", "Hjelp", "Hjelpdiskusjon", "Kategori", "Kategoridiskusjon"], "no": ["Medium", "Spesial", "Diskusjon", "Bruker", "Brukerdiskusjon", "Wikipedia", "Wikipedia-diskusjon", "Bilde", "Bildediskusjon", "MediaWiki", "MediaWiki-diskusjon", "Mal", "Maldiskusjon", "Hjelp", "Hjelpdiskusjon", "Kategori", "Kategoridiskusjon"], "nv": [m, "Special", "Naaltsoos baa yinísht'į́", "Choinish'įįhí", "Choinish'įįhí baa yinísht'į́", "Wikiibíídiiya", "Wikiibíídiiya baa yinísht'į́", "E'elyaaígíí", "E'elyaaígíí baa yinísht'į́", "MediaWiki", "MediaWiki baa yinísht'į́", "Template", "Template talk", "Aná'álwo'", "Aná'álwo' baa yinísht'į́", "T'ááłáhági át'éego", "T'ááłáhági át'éego baa yinísht'į́"], "oc": ["Especial", "Discutir", "Utilisator", "Discutida Utilisator", "Oiquipedià", "Discutida Oiquipedià", "Image", "Discutida Image", "MediaWiki", "MediaWiki talk", "Template", "Template talk", m, "Help", "Help talk", "Category", "Category talk"], "os": [m, "Сæрмагонд", "Дискусси", "Архайæг", "Архайæджы дискусси", "Wikipedia", "0", "Ныв", "Нывы тыххæй дискусси", "MediaWiki", "Дискусси MediaWiki", "Шаблон", "Шаблоны тыххæй дискусси", "Æххуыс", "Æххуысы тыххæй дискусси", "Категори", "Категорийы тыххæй дискусси"], "pa": ["ਮੀਡੀਆ", "ਖਾਸ", "ਚਰਚਾ", "ਮੈਂਬਰ", "ਮੈਂਬਰ ਚਰਚਾ", "Wikipedia", "Wikipedia ਚਰਚਾ", "ਤਸਵੀਰ", "ਤਸਵੀਰ ਚਰਚਾ", "ਮੀਡੀਆਵਿਕਿ", "ਮੀਡੀਆਵਿਕਿ ਚਰਚਾ", "ਨਮੂਨਾ", "ਨਮੂਨਾ ਚਰਚਾ", "ਮਦਦ", "ਮਦਦ ਚਰਚਾ", "ਸ਼੍ਰੇਣੀ", "ਸ਼੍ਰੇਣੀ ਚਰਚਾ"], "pl": [m, "Specjalna", "Dyskusja", "Wikipedysta", "Dyskusja wikipedysty", "Wikipedia", "Dyskusja Wikipedii", "Plik", "Dyskusja pliku", "MediaWiki", "Dyskusja MediaWiki", "Szablon", "Dyskusja szablonu", "Pomoc", "Dyskusja pomocy", "Kategoria", "Dyskusja kategorii", "Portal", "Dyskusja portalu","Wikiprojekt","Dyskusja Wikiprojektu"], "pt": [m, "Especial", "Discussão", "Usuário", "Usuário Discussão", "Wikipedia", "Wikipedia Discussão", "Imagem", "Imagem Discussão", "MediaWiki", "MediaWiki Discussão", "Predefinição", "Predefinição Discussão", "Ajuda", "Ajuda Discussão", "Categoria", "Categoria Discussão"], "ro": [m, "Special", "Discuţie", "Utilizator", "Discuţie Utilizator", "Wikipedia", "Discuţie Wikipedia", "Imagine", "Discuţie Imagine", "MediaWiki", "Discuţie MediaWiki", "Format", "Discuţie Format", "Ajutor", "Discuţie Ajutor", "Categorie", "Discuţie Categorie"], "ru": ["Медиа", "Служебная", "Обсуждение", "Участник", "Обсуждение участника", "Википедия", "Обсуждение Википедии", "Изображение", "Обсуждение изображения", "MediaWiki", "Обсуждение MediaWiki", "Шаблон", "Обсуждение шаблона", "Справка", "Обсуждение справки", "Категория", "Обсуждение категории"], "sc": ["Speciale", "Contièndha", "Utente", "Utente discussioni", "Wikipedia", "Wikipedia discussioni", "Immàgini", "Immàgini contièndha", m, "MediaWiki", "MediaWiki talk", "Template", "Template talk", "Help", "Help talk", "Category", "Category talk"], "sk": ["Médiá", "Špeciálne", "Diskusia", "Redaktor", "Diskusia s redaktorom", "Wikipédia", "Diskusia k Wikipédii", "Obrázok", "Diskusia k obrázku", "MediaWiki", "Diskusia k MediaWiki", "Šablóna", "Diskusia k šablóne", "Pomoc", "Diskusia k pomoci", "Kategória", "Diskusia ku kategórii"], "sl": [m, "Posebno", "Pogovor", "Uporabnik", "Uporabniški pogovor", "Wikipedija", "Pogovor k Wikipediji", "Slika", "Pogovor k sliki", "MediaWiki", "MediaWiki talk", "Template", "Template talk", "Help", "Help talk", "Category", "Category talk"], "sq": [m, "Speciale", "Diskutim", "Përdoruesi", "Përdoruesi diskutim", "Wikipedia", "Wikipedia diskutim", "Figura", "Figura diskutim", "MediaWiki", "MediaWiki diskutim", "Stampa", "Stampa diskutim", "Ndihmë", "Ndihmë diskutim", "Category", "Category talk"], "sr": [m, "Посебно", "Разговор", "Корисник", "Разговор са корисником", "Википедија", "Разговор о Википедији", "Слика", "Разговор о слици", "МедијаВики", "Разговор о МедијаВикију", "Шаблон", "Разговор о шаблону", "Помоћ", "Разговор о помоћи", "Категорија", "Разговор о категорији", "Портал", "Разговор о порталу"], "sv": [m, "Special", "Diskussion", "Användare", "Användardiskussion", "Wikipedia", "Wikipediadiskussion", "Bild", "Bilddiskussion", "MediaWiki", "MediaWiki diskussion", "Mall", "Malldiskussion", "Hjälp", "Hjälp diskussion", "Kategori", "Kategoridiskussion"], "ta": ["ஊடகம்", "சிறப்பு", "பேச்சு", "பயனர்", "பயனர் பேச்சு", "Wikipedia", "Wikipedia பேச்சு", "படிமம்", "படிமப் பேச்சு", "மீடியாவிக்கி", "மீடியாவிக்கி பேச்சு", "வார்ப்புரு", "வார்ப்புரு பேச்சு", "உதவி", "உதவி பேச்சு", "பகுப்பு", "பகுப்பு பேச்சு"], "th": [m, "พิเศษ", "พูดคุย", "ผู้ใช้", "คุยเกี่ยวกับผู้ใช้", "Wikipedia", "Wikipedia talk", "ภาพ", "คุยเกี่ยวกับภาพ", "MediaWiki", "คุยเกี่ยวกับ MediaWiki", "Template", "Template talk", "Help", "Help talk", "Category", "Category talk"], "tlh": ["Doch", "le'", "ja'chuq", "lo'wI'", "lo'wI' ja'chuq", "wIqIpe'DIya", "wIqIpe'DIya ja'chuq", "nagh beQ", "nagh beQ ja'chuq", "MediaWiki", "MediaWiki ja'chuq", "chen'ay'", "chen'ay' ja'chuq", "QaH", "QaH ja'chuq", "Segh", "Segh ja'chuq"], "tr": [m, "Özel", "Tartışma", "Kullanıcı", "Kullanıcı mesaj", "Vikipedi", "Vikipedi tartışma", "Resim", "Resim tartışma", "MedyaViki", "MedyaViki tartışma", "Şablon", "Şablon tartışma", "Yardım", "Yardım tartışma", "Kategori", "Kategori tartışma"], "tt": [m, "Maxsus", "Bäxäs", "Äğzä", "Äğzä bäxäse", "Wikipedia", "Wikipedia bäxäse", "Räsem", "Räsem bäxäse", "MediaWiki", "MediaWiki bäxäse", "Ürnäk", "Ürnäk bäxäse", "Yärdäm", "Yärdäm bäxäse", "Törkem", "Törkem bäxäse"], "uk": ["Медіа", "Спеціальні", "Обговорення", "Користувач", "Обговорення користувача", "Wikipedia", "Обговорення Wikipedia", "Зображення", "Обговорення зображення", "MediaWiki", "Обговорення MediaWiki", "Шаблон", "Обговорення шаблону", "Довідка", "Обговорення довідки", "Категорія", "Обговорення категорії"], "vi": ["Phương tiện", "Đặc biệt", "Thảo luận", "Thành viên", "Thảo luận Thành viên", "Wikipedia", "Thảo luận Wikipedia", "Hình", "Thảo luận Hình", "MediaWiki", "Thảo luận MediaWiki", "Tiêu bản", "Thảo luận Tiêu bản", "Trợ giúp", "Thảo luận Trợ giúp", "Thể loại", "Thảo luận Thể loại"], "wa": [m, "Sipeciås", "Copene", "Uzeu", "Uzeu copene", "Wikipedia", "Wikipedia copene", "Imådje", "Imådje copene", "MediaWiki", "MediaWiki copene", "Modele", "Modele copene", "Aidance", "Aidance copene", "Categoreye", "Categoreye copene"] //</NOLITE> }; pg.ns.list = nsLists[pg.wiki.lang] || list; pg.ns.index = nsIndex; } function namespaceListToRegex(list) {return RegExp('^('+list.join('|').split(' ').join('[ _]')+'):');}; // function setNamespaceList is ugly as sin, moved to later in the code function setNamespaces() { setNamespaceList(); pg.ns.withTalkList=[null]; // NB root (article) corresponds with this entry, null pg.ns.talkList=[pg.ns.list[2]]; // if the number of namespaces changes then this will have to be changed // maybe the easiest way is to specify the arrays by hand as in the comments following the loop for (var i=3; i+1<pg.ns.list.length; i=i+2) { pg.ns.withTalkList.push(pg.ns.list[i]); pg.ns.talkList.push(pg.ns.list[i+1]); } // ALERT! SILLY HARDCODED VALUES FOLLOW! pg.ns.special = pg.ns.list[pg.ns.index.Special]; pg.ns.image = pg.ns.list[pg.ns.index.File]; pg.ns.user = pg.ns.list[pg.ns.index.User]; pg.ns.usertalk = pg.ns.list[pg.ns.index['User talk']]; pg.ns.category = pg.ns.list[pg.ns.index.Category]; pg.ns.template = pg.ns.list[pg.ns.index.Template]; pg.ns.nonArticleList=pg.ns.list.slice(0,2).concat(pg.ns.list.slice(2)); } function setRedirs() { var r='redirect'; var R='REDIRECT'; var redirLists={ //<NOLITE> 'ar': [ R, 'تحويل' ], 'be': [ r, 'перанакіраваньне' ], 'bg': [ r, 'пренасочване', 'виж' ], 'bs': [ r, 'Preusmjeri', 'preusmjeri', 'PREUSMJERI' ], 'cs': [ R, 'PŘESMĚRUJ' ], 'cy': [ r, 'ail-cyfeirio' ], 'de': [ R, 'WEITERLEITUNG' ], 'eo': [ R, 'ALIDIREKTU', 'ALIDIREKTI' ], 'et': [ r, 'suuna' ], 'ga': [ r, 'athsheoladh' ], 'gl': [ r, 'REDIRECCIÓN', 'REDIRECIONAMENTO'], 'he': [ R, 'הפניה' ], 'hu': [ R, 'ÁTIRÁNYÍTÁS' ], 'is': [ r, 'tilvísun', 'TILVÍSUN' ], 'it': [ R, 'RINVIA', 'Rinvia'], 'mk': [ r, 'пренасочување', 'види' ], 'nds': [ r, 'wiederleiden' ], 'nl': [ R, 'DOORVERWIJZING' ], 'nn': [ r, 'omdiriger' ], 'pl': [ R, 'PATRZ', 'PRZEKIERUJ', 'TAM' ], 'pt': [ R, 'redir' ], 'ru': [ R, 'ПЕРЕНАПРАВЛЕНИЕ', 'ПЕРЕНАПР' ], 'sk': [ r, 'presmeruj' ], 'sr': [ r, 'Преусмери', 'преусмери', 'ПРЕУСМЕРИ', 'Preusmeri', 'preusmeri', 'PREUSMERI' ], 'tt': [ R, 'yünältü', 'перенаправление', 'перенапр' ], 'vi': [ r, 'đổi' ] // no comma //</NOLITE> }; var redirList=redirLists[ pg.wiki.lang ] || [r, R]; // Mediawiki is very tolerant about what comes after the #redirect at the start pg.re.redirect=RegExp('^\\s*[#](' + redirList.join('|') + ').*?\\[{2}([^\\|\\]]*)(|[^\\]]*)?\\]{2}\\s*(.*)', 'i'); } function setInterwiki() { if (pg.wiki.wikimedia) { pg.wiki.interwiki='aa|ab|af|ak|als|am|an|ang|ar|arc|arz|as|ast|av|ay|az|ba|be|ber|bg|bh|bi|bm|bn|bdf|bo|br|bs|ca|ce|ceb|ch|cho|chr|chy|co|commons|cr|cs|csb|cu|cv|cy|da|de|dsb|dv|dz|el|en|eo|es|et|eu|fa|ff|fi|fiu-vro|fj|fo|fr|fur|fy|ga|gd|gil|gl|gn|got|gu|gv|ha|haw|he|hi|ho|hr|hsb|ht|hu|hy|hz|ia|id|ie|ig|ii|ik|ilo|io|is|it|iu|ja|jbo|jv|ka|kg|ki|kj|kk|kl|km|kn|ko|kr|ks|ksh|ku|kv|kw|ky|la|lad|lan|lb|lg|li|ln|lmo|lo|lt|lu|lv|map-bms|mg|mh|mi|mk|ml|mn|mo|mr|ms|mt|stq|mus|my|na|nah|nap|nb|nd|nds|nds-nl|ne|new|ng|nl|nn|no|nr|nv|ny|oc|oj|om|or|os|pa|pam|pi|pl|pms|ps|pt|qu|rm|rn|ro|roa-rup|ru|rw|sa|sc|scn|sco|sd|se|sg|sh|si|simple|sk|sl|sm|smg|sn|so|sq|sr|ss|st|stq|su|sv|sw|szl|ta|te|tg|th|ti|tk|tl|tlh|tn|to|tpi|tr|ts|tt|tum|tw|ty|ug|uk|ur|uz|ve|vi|vk|vo|wa|war|wen|wo|xh|yi|yo|za|zh|zh-min-nan|zh-yue|zu'; pg.re.interwiki=RegExp('^'+pg.wiki.interwiki+':'); } else { pg.wiki.interwiki=null; pg.re.interwiki=RegExp('^$'); } } function nsRe(label) { var l=upcaseFirst(label); return nsRegexString(pg.ns.list[pg.ns.index[l]], l); } function nsReImage() { var str = pg.ns.list[pg.ns.index["File"]]; return '(?:' + str + '|' + encodeURI(str) + '|' + upcaseFirst(str) + '|Image|' + upcaseFirst('Image') + ')'; } function nsRegexString(str, extra) { return '(?:' + str + '|' + encodeURI(str) + (extra ? '|' + extra : '') + ')'; } function nsRegex(str, extra) { return RegExp(nsRegexString(str, extra)); } // ENDFILE: namespaces.js // STARTFILE: selpop.js //<NOLITE> function getEditboxSelection() { // see http://www.webgurusforum.com/8/12/0 try { var editbox=document.editform.wpTextbox1; } catch (dang) { return; } // IE, Opera if (document.selection) { return document.selection.createRange().text; } // Mozilla var selStart = editbox.selectionStart; var selEnd = editbox.selectionEnd; return (editbox.value).substring(selStart, selEnd); } function doSelectionPopup() { // popup if the selection looks like [[foo|anything afterwards at all // or [[foo|bar]]text without ']]' // or [[foo|bar]] var sel=getEditboxSelection(); var open=sel.indexOf('[['); var pipe=sel.indexOf('|'); var close=sel.indexOf(']]'); if (open == -1 || ( pipe == -1 && close == -1) ) { return; } if (pipe != -1 && open > pipe || close != -1 && open > close) { return; } if (getValueOf('popupOnEditSelection')=='boxpreview') { return doSeparateSelectionPopup(sel); } var article=new Title(sel.substring(open+2, (pipe < 0) ? close : pipe)).urlString(); if (close > 0 && sel.substring(close+2).indexOf('[[') >= 0) { return; } var a=document.createElement('a'); a.href=pg.wiki.titlebase + article; mouseOverWikiLink2(a); if (a.navpopup) { a.navpopup.addHook(function(){runStopPopupTimer(a.navpopup);}, 'unhide', 'after'); } } function doSeparateSelectionPopup(str) { var div=document.getElementById('selectionPreview'); if (!div) { div = document.createElement('div'); div.id='selectionPreview'; try { var box=document.editform.wpTextbox1; } catch (oopsie) { return; } box.parentNode.insertBefore(div, box); } div.innerHTML=wiki2html(str); div.ranSetupTooltipsAlready = false; popTipsSoonFn('selectionPreview')(); } //</NOLITE> // ENDFILE: selpop.js // STARTFILE: navpopup.js /** @fileoverview Defines two classes: {@link Navpopup} and {@link Mousetracker}. <code>Navpopup</code> describes popups: when they appear, where, what they look like and so on. <code>Mousetracker</code> "captures" the mouse using <code>document.onmousemove</code>. */ /** Creates a new Mousetracker. @constructor @class The Mousetracker class. This monitors mouse movements and manages associated hooks. */ function Mousetracker() { /** Interval to regularly run the hooks anyway, in milliseconds. @type Integer */ this.loopDelay=400; /** Timer for the loop. @type Timer */ this.timer=null; /** Flag - are we switched on? @type Boolean */ this.active=false; /** Flag - are we probably inaccurate, i.e. not reflecting the actual mouse position? */ this.dirty=true; /** Array of hook functions. @private @type Array */ this.hooks=[]; } /** Adds a hook, to be called when we get events. @param {Function} f A function which is called as <code>f(x,y)</code>. It should return <code>true</code> when it wants to be removed, and <code>false</code> otherwise. */ Mousetracker.prototype.addHook = function (f) { this.hooks.push(f); }; /** Runs hooks, passing them the x and y coords of the mouse. Hook functions that return true are passed to {@link Mousetracker#removeHooks} for removal. @private */ Mousetracker.prototype.runHooks = function () { if (!this.hooks || !this.hooks.length) { return; } //log('Mousetracker.runHooks; we got some hooks to run'); var remove=false; var removeObj={}; // this method gets called a LOT - // pre-cache some variables var x=this.x, y=this.y, len = this.hooks.length; for (var i=0; i<len; ++i) { //~ run the hook function, and remove it if it returns true if (this.hooks[i](x, y)===true) { remove=true; removeObj[i]=true; } } if (remove) { this.removeHooks(removeObj); } }; /** Removes hooks. @private @param {Object} removeObj An object whose keys are the index numbers of functions for removal, with values that evaluate to true */ Mousetracker.prototype.removeHooks = function(removeObj) { var newHooks=[]; var len = this.hooks.length; for (var i=0; i<len; ++i) { if (! removeObj[i]) { newHooks.push(this.hooks[i]); } } this.hooks=newHooks; }; /** Event handler for mouse wiggles. We simply grab the event, set x and y and run the hooks. This makes the cpu all hot and bothered :-( @private @param {Event} e Mousemove event */ Mousetracker.prototype.track=function (e) { //~ Apparently this is needed in IE. e = e || window.event; var x, y; if (e) { if (e.pageX) { x=e.pageX; y=e.pageY; } else if (typeof e.clientX!='undefined') { var left, top, docElt = window.document.documentElement; if (docElt) { left=docElt.scrollLeft; } left = left || window.document.body.scrollLeft || window.document.scrollLeft || 0; if (docElt) { top=docElt.scrollTop; } top = top || window.document.body.scrollTop || window.document.scrollTop || 0; x=e.clientX + left; y=e.clientY + top; } else { return; } this.setPosition(x,y); } }; /** Sets the x and y coordinates stored and takes appropriate action, running hooks as appropriate. @param {Integer} x, y Screen coordinates to set */ Mousetracker.prototype.setPosition=function(x,y) { this.x = x; this.y = y; if (this.dirty || this.hooks.length === 0) { this.dirty=false; return; } if (typeof this.lastHook_x != 'number') { this.lastHook_x = -100; this.lastHook_y=-100; } var diff = (this.lastHook_x - x)*(this.lastHook_y - y); diff = (diff >= 0) ? diff : -diff; if ( diff > 1 ) { this.lastHook_x=x; this.lastHook_y=y; if (this.dirty) { this.dirty = false; } else { this.runHooks(); } } } /** Sets things in motion, unless they are already that is, registering an event handler on <code>document.onmousemove</code>. A half-hearted attempt is made to preserve the old event handler if there is one. */ Mousetracker.prototype.enable = function () { if (this.active) { return; } this.active=true; //~ Save the current handler for mousemove events. This isn't too //~ robust, of course. this.savedHandler=document.onmousemove; //~ Gotta save @tt{this} again for the closure, and use apply for //~ the member function. var savedThis=this; document.onmousemove=function (e) {savedThis.track.apply(savedThis, [e]);}; if (this.loopDelay) { this.timer = setInterval(function() { //log('loop delay in mousetracker is working'); savedThis.runHooks();}, this.loopDelay); } }; /** Disables the tracker, removing the event handler. */ Mousetracker.prototype.disable = function () { if (!this.active) { return; } if (typeof this.savedHandler=='function') { document.onmousemove=this.savedHandler; } else { delete document.onmousemove; } if (this.timer) { clearInterval(this.timer); } this.active=false; }; /** Creates a new Navpopup. Gets a UID for the popup and @param init Contructor object. If <code>init.draggable</code> is true or absent, the popup becomes draggable. @constructor @class The Navpopup class. This generates popup hints, and does some management of them. */ function Navpopup(init) { //alert('new Navpopup(init)'); /** UID for each Navpopup instance. Read-only. @type integer */ this.uid=Navpopup.uid++; /** Read-only flag for current visibility of the popup. @type boolean @private */ this.visible=false; /** Flag to be set when we want to cancel a previous request to show the popup in a little while. @private @type boolean */ this.noshow=false; /** Categorised list of hooks. @see #runHooks @see #addHook @private @type Object */ this.hooks={ 'create': [], 'unhide': [], 'hide': [] }; /** list of unique IDs of hook functions, to avoid duplicates @private */ this.hookIds={}; /** List of downloads associated with the popup. @private @type Array */ this.downloads=[]; /** Number of uncompleted downloads. @type integer */ this.pending=null; /** Tolerance in pixels when detecting whether the mouse has left the popup. @type integer */ this.fuzz=5; /** Flag to toggle running {@link #limitHorizontalPosition} to regulate the popup's position. @type boolean */ this.constrained=true; /** The popup width in pixels. @private @type integer */ this.width=0; /** The popup width in pixels. @private @type integer */ this.height=0; /** The main content DIV element. @type HTMLDivElement */ this.mainDiv=null; this.createMainDiv(); // if (!init || typeof init.popups_draggable=='undefined' || init.popups_draggable) { // this.makeDraggable(true); // } } /** A UID for each Navpopup. This constructor property is just a counter. @type integer @private */ Navpopup.uid=0; /** Retrieves the {@link #visible} attribute, indicating whether the popup is currently visible. @type boolean */ Navpopup.prototype.isVisible=function() { return this.visible; }; /** Repositions popup using CSS style. @private @param {integer} x x-coordinate (px) @param {integer} y y-coordinate (px) @param {boolean} noLimitHor Don't call {@link #limitHorizontalPosition} */ Navpopup.prototype.reposition= function (x,y, noLimitHor) { log ('reposition('+x+','+y+','+noLimitHor+')'); if (typeof x != 'undefined' && x!==null) { this.left=x; } if (typeof y != 'undefined' && y!==null) { this.top=y; } if (typeof this.left != 'undefined' && typeof this.top != 'undefined') { this.mainDiv.style.left=this.left + 'px'; this.mainDiv.style.top=this.top + 'px'; } if (!noLimitHor) { this.limitHorizontalPosition(); } //console.log('navpop'+this.uid+' - (left,top)=(' + this.left + ',' + this.top + '), css=(' //+ this.mainDiv.style.left + ',' + this.mainDiv.style.top + ')'); }; /** Prevents popups from being in silly locations. Hopefully. Should not be run if {@link #constrained} is true. @private */ Navpopup.prototype.limitHorizontalPosition=function() { if (!this.constrained || this.tooWide) { return; } this.updateDimensions(); var x=this.left; var w=this.width; var cWidth=document.body.clientWidth; // log('limitHorizontalPosition: x='+x+ // ', this.left=' + this.left + // ', this.width=' + this.width + // ', cWidth=' + cWidth); if ( (x+w) >= cWidth || ( x > 0 && this.maxWidth && this.width < this.maxWidth && this.height > this.width && x > cWidth - this.maxWidth ) ) { // This is a very nasty hack. There has to be a better way! // We find the "natural" width of the div by positioning it at the far left // then reset it so that it should be flush right (well, nearly) this.mainDiv.style.left='-10000px'; this.mainDiv.style.width = this.maxWidth + 'px'; var naturalWidth=parseInt(this.mainDiv.offsetWidth, 10); var newLeft=cWidth - naturalWidth - 1; if (newLeft < 0) { newLeft = 0; this.tooWide=true; } // still unstable for really wide popups? log ('limitHorizontalPosition: moving to ('+newLeft + ','+ this.top+');' + ' naturalWidth=' + naturalWidth + ', clientWidth=' + cWidth); this.reposition(newLeft, null, true); } }; /** Counter indicating the z-order of the "highest" popup. We start the z-index at 1000 so that popups are above everything else on the screen. @private @type integer */ Navpopup.highest=1000; /** Brings popup to the top of the z-order. We increment the {@link #highest} property of the contructor here. @private */ Navpopup.prototype.raise = function () { this.mainDiv.style.zIndex=Navpopup.highest + 1; ++Navpopup.highest; }; /** Shows the popup provided {@link #noshow} is not true. Updates the position, brings the popup to the top of the z-order and unhides it. */ Navpopup.prototype.show = function () { //document.title+='s'; if (this.noshow) { return; } //document.title+='t'; this.reposition(); this.raise(); this.unhide(); }; /** Runs the {@link #show} method in a little while, unless we're already visible. @param {integer} time Delay in milliseconds @see #showSoonIfStable */ Navpopup.prototype.showSoon = function (time) { if (this.visible) { return; } this.noshow=false; //~ We have to save the value of @tt{this} so that the closure below //~ works. var savedThis=this; //this.start_x = Navpopup.tracker.x; //this.start_y = Navpopup.tracker.y; setTimeout(function () { if (Navpopup.tracker.active) { savedThis.reposition.apply(savedThis, [Navpopup.tracker.x + 2, Navpopup.tracker.y + 2]); } //~ Have to use apply to invoke his member function here savedThis.show.apply(savedThis, []); }, time); }; /** Checks to see if the mouse pointer has stabilised (checking every <code>time</code>/2 milliseconds) and runs the {@link #show} method if it has. This method makes {@link #showSoon} redundant. @param {integer} time The minimum time (ms) before the popup may be shown. */ Navpopup.prototype.showSoonIfStable = function (time) { log ('showSoonIfStable, time='+time); if (this.visible) { return; } this.noshow = false; //~ initialize these variables so that we never run @tt{show} after //~ just half the time this.stable_x = -10000; this.stable_y = -10000; var stableShow = function() { log('stableShow called'); var new_x = Navpopup.tracker.x, new_y = Navpopup.tracker.y; var dx = savedThis.stable_x - new_x, dy = savedThis.stable_y - new_y; var fuzz2 = 0; // savedThis.fuzz * savedThis.fuzz; //document.title += '[' + [savedThis.stable_x,new_x, savedThis.stable_y,new_y, dx, dy, fuzz2].join(',') + '] '; if ( dx * dx <= fuzz2 && dy * dy <= fuzz2 ) { log ('mouse is stable'); clearInterval(savedThis.showSoonStableTimer); savedThis.reposition.apply(savedThis, [new_x + 2, new_y + 2]); savedThis.show.apply(savedThis, []); return; } savedThis.stable_x = new_x; savedThis.stable_y = new_y; }; var savedThis = this; this.showSoonStableTimer = setInterval(stableShow, time/2); }; /** Makes the popup unhidable until we call {@link #unstick}. */ Navpopup.prototype.stick=function() { this.noshow=false; this.sticky=true; }; /** Allows the popup to be hidden. */ Navpopup.prototype.unstick=function() { this.sticky=false; }; /** Sets the {@link #noshow} flag and hides the popup. This should be called when the mouse leaves the link before (or after) it's actually been displayed. */ Navpopup.prototype.banish = function () { log ('banish called'); // hide and prevent showing with showSoon in the future this.noshow=true; if (this.showSoonStableTimer) { log('clearing showSoonStableTimer'); clearInterval(this.showSoonStableTimer); } this.hide(); }; /** Runs hooks added with {@link #addHook}. @private @param {String} key Key name of the {@link #hooks} array - one of 'create', 'unhide', 'hide' @param {String} when Controls exactly when the hook is run: either 'before' or 'after' */ Navpopup.prototype.runHooks = function (key, when) { if (!this.hooks[key]) { return; } var keyHooks=this.hooks[key]; var len=keyHooks.length; for (var i=0; i< len; ++i) { if (keyHooks[i] && keyHooks[i].when == when) { if (keyHooks[i].hook.apply(this, [])) { // remove the hook if (keyHooks[i].hookId) { delete this.hookIds[keyHooks[i].hookId]; } keyHooks[i]=null; } } } }; /** Adds a hook to the popup. Hook functions are run with <code>this</code> set to refer to the Navpopup instance, and no arguments. @param {Function} hook The hook function. Functions that return true are deleted. @param {String} key Key name of the {@link #hooks} array - one of 'create', 'unhide', 'hide' @param {String} when Controls exactly when the hook is run: either 'before' or 'after' @param {String} uid A truthy string identifying the hook function; if it matches another hook in this position, it won't be added again. */ Navpopup.prototype.addHook = function ( hook, key, when, uid ) { when = when || 'after'; if (!this.hooks[key]) { return; } // if uid is specified, don't add duplicates var hookId=null; if (uid) { hookId=[key,when,uid].join('|'); if (this.hookIds[hookId]) { return; } this.hookIds[hookId]=true; } this.hooks[key].push( {hook: hook, when: when, hookId: hookId} ); }; /** Creates the main DIV element, which contains all the actual popup content. Runs hooks with key 'create'. @private */ Navpopup.prototype.createMainDiv = function () { if (this.mainDiv) { return; } this.runHooks('create', 'before'); var mainDiv=document.createElement('div'); var savedThis=this; mainDiv.onclick=function(e) {savedThis.onclickHandler(e);}; mainDiv.className=(this.className) ? this.className : 'navpopup_maindiv'; mainDiv.id=mainDiv.className + this.uid; mainDiv.style.position='absolute'; mainDiv.style.display='none'; mainDiv.className='navpopup'; // easy access to javascript object through DOM functions mainDiv.navpopup=this; this.mainDiv=mainDiv; document.body.appendChild(mainDiv); this.runHooks('create', 'after'); }; /** Calls the {@link #raise} method. @private */ Navpopup.prototype.onclickHandler=function(e) { this.raise(); }; /** Makes the popup draggable, using a {@link Drag} object. @private */ Navpopup.prototype.makeDraggable=function(handleName) { if (!this.mainDiv) { this.createMainDiv(); } var drag=new Drag(); if (!handleName) { drag.startCondition=function(e) { try { if (!e.shiftKey) { return false; } } catch (err) { return false; } return true; }; } var dragHandle = document.getElementById(handleName) || this.mainDiv; var np=this; drag.endHook=function(x,y) { Navpopup.tracker.dirty=true; np.reposition(x,y); }; drag.init(dragHandle,this.mainDiv); }; /** Hides the popup using CSS. Runs hooks with key 'hide'. Sets {@link #visible} appropriately. {@link #banish} should be called externally instead of this method. @private */ Navpopup.prototype.hide = function () { this.runHooks('hide', 'before'); this.abortDownloads(); if (this.sticky) { return; } if (typeof this.visible != 'undefined' && this.visible) { this.mainDiv.style.display='none'; this.visible=false; } this.runHooks('hide', 'after'); }; /** Shows the popup using CSS. Runs hooks with key 'unhide'. Sets {@link #visible} appropriately. {@link #show} should be called externally instead of this method. @private */ Navpopup.prototype.unhide = function () { this.runHooks('unhide', 'before'); if (typeof this.visible != 'undefined' && !this.visible) { this.mainDiv.style.display='inline'; this.visible=true; } this.runHooks('unhide', 'after'); }; /** Sets the <code>innerHTML</code> attribute of the main div containing the popup content. @param {String} html The HTML to set. */ Navpopup.prototype.setInnerHTML = function (html) { this.mainDiv.innerHTML = html; }; /** Updates the {@link #width} and {@link #height} attributes with the CSS properties. @private */ Navpopup.prototype.updateDimensions = function () { this.width=parseInt(this.mainDiv.offsetWidth, 10); this.height=parseInt(this.mainDiv.offsetHeight, 10); }; /** Checks if the point (x,y) is within {@link #fuzz} of the {@link #mainDiv}. @param {integer} x x-coordinate (px) @param {integer} y y-coordinate (px) @type boolean */ Navpopup.prototype.isWithin = function(x,y) { //~ If we're not even visible, no point should be considered as //~ being within the popup. if (!this.visible) { return false; } this.updateDimensions(); var fuzz=this.fuzz || 0; //~ Use a simple box metric here. return (x+fuzz >= this.left && x-fuzz <= this.left + this.width && y+fuzz >= this.top && y-fuzz <= this.top + this.height); }; /** Adds a download to {@link #downloads}. @param {Downloader} download */ Navpopup.prototype.addDownload=function(download) { if (!download) { return; } this.downloads.push(download); }; /** Aborts the downloads listed in {@link #downloads}. @see Downloader#abort */ Navpopup.prototype.abortDownloads=function() { for(var i=0; i<this.downloads.length; ++i) { var d=this.downloads[i]; if (d && d.abort) { d.abort(); } } this.downloads=[]; }; /** A {@link Mousetracker} instance which is a property of the constructor (pseudo-global). */ Navpopup.tracker=new Mousetracker(); // ENDFILE: navpopup.js // STARTFILE: diff.js //<NOLITE> /* * Javascript Diff Algorithm * By John Resig (http://ejohn.org/) and [[:en:User:Lupin]] * * More Info: * http://ejohn.org/projects/javascript-diff-algorithm/ */ function delFmt(x) { if (!x.length) { return ''; } return "<del class='popupDiff'>" + x.join('') +"</del>"; } function insFmt(x) { if (!x.length) { return ''; } return "<ins class='popupDiff'>" + x.join('') +"</ins>"; } function countCrossings(a, b, i, eject) { // count the crossings on the edge starting at b[i] if (!b[i].row && b[i].row !== 0) { return -1; } var count=0; for (var j=0; j<a.length; ++j) { if (!a[j].row && a[j].row !== 0) { continue; } if ( (j-b[i].row)*(i-a[j].row) > 0) { if(eject) { return true; } count++; } } return count; } function shortenDiffString(str, context) { var re=RegExp('(<del[\\s\\S]*?</del>|<ins[\\s\\S]*?</ins>)'); var splitted=str.parenSplit(re); var ret=['']; for (var i=0; i<splitted.length; i+=2) { if (splitted[i].length < 2*context) { ret[ret.length-1] += splitted[i]; if (i+1<splitted.length) { ret[ret.length-1] += splitted[i+1]; } continue; } else { if (i > 0) { ret[ret.length-1] += splitted[i].substring(0,context); } if (i+1 < splitted.length) { ret.push(splitted[i].substring(splitted[i].length-context) + splitted[i+1]); } } } while (ret.length > 0 && !ret[0]) { ret = ret.slice(1); } return ret; } function diffString( o, n, simpleSplit ) { var splitRe=RegExp('([[]{2}|[\]]{2}|[{]{2,3}|[}]{2,3}|[|]|=|[*:]+|\\s|\\b)'); o=o.entify(); n=n.entify(); var out, i; if (simpleSplit) { out = diff( o.split(/\b/), n.split(/\b/) ); } else { out = diff( o.parenSplit(splitRe), n.parenSplit(splitRe) ); } var str = ""; var acc=[]; // accumulator for prettier output // crossing pairings -- eg 'A B' vs 'B A' -- cause problems, so let's iron them out // this doesn't always do things optimally but it should be fast enough var maxOutputPair=0; for (i=0; i<out.n.length; ++i) { if ( out.n[i].paired ) { if( maxOutputPair > out.n[i].row ) { // tangle - delete pairing out.o[ out.n[i].row ]=out.o[ out.n[i].row ].text; out.n[i]=out.n[i].text; } if (maxOutputPair < out.n[i].row) { maxOutputPair = out.n[i].row; } } } // output the stuff preceding the first paired old line for (i=0; i<out.o.length && !out.o[i].paired; ++i) { acc.push( out.o[i] ); } str += delFmt(acc); acc=[]; // main loop for ( i = 0; i < out.n.length; ++i ) { // output unpaired new "lines" while ( i < out.n.length && !out.n[i].paired ) { acc.push( out.n[i++] ); } str += insFmt(acc); acc=[]; if ( i < out.n.length ) { // this new "line" is paired with the (out.n[i].row)th old "line" str += out.n[i].text; // output unpaired old rows starting after this new line's partner var m = out.n[i].row + 1; while ( m < out.o.length && !out.o[m].paired ) { acc.push ( out.o[m++] ); } str += delFmt(acc); acc=[]; } } return str; } // see http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Object // FIXME: use obj.hasOwnProperty instead of this kludge! window.jsReservedProperties=RegExp('^(constructor|prototype|__((define|lookup)[GS]etter)__' + '|eval|hasOwnProperty|propertyIsEnumerable' + '|to(Source|String|LocaleString)|(un)?watch|valueOf)$'); function diffBugAlert(word) { if (!diffBugAlert.list[word]) { diffBugAlert.list[word]=1; alert('Bad word: '+word+'\n\nPlease report this bug.'); } } diffBugAlert.list={}; function makeDiffHashtable(src) { var ret={}; for ( var i = 0; i < src.length; i++ ) { if ( jsReservedProperties.test(src[i]) ) { src[i] += '<!-- -->'; } if ( !ret[ src[i] ] ) { ret[ src[i] ] = []; } try { ret[ src[i] ].push( i ); } catch (err) { diffBugAlert(src[i]); } } return ret; } function diff( o, n ) { // pass 1: make hashtable ns with new rows as keys var ns = makeDiffHashtable(n); // pass 2: make hashtable os with old rows as keys var os = makeDiffHashtable(o); // pass 3: pair unique new rows and matching unique old rows var i; for ( i in ns ) { if ( ns[i].length == 1 && os[i] && os[i].length == 1 ) { n[ ns[i][0] ] = { text: n[ ns[i][0] ], row: os[i][0], paired: true }; o[ os[i][0] ] = { text: o[ os[i][0] ], row: ns[i][0], paired: true }; } } // pass 4: pair matching rows immediately following paired rows (not necessarily unique) for ( i = 0; i < n.length - 1; i++ ) { if ( n[i].paired && ! n[i+1].paired && n[i].row + 1 < o.length && ! o[ n[i].row + 1 ].paired && n[i+1] == o[ n[i].row + 1 ] ) { n[i+1] = { text: n[i+1], row: n[i].row + 1, paired: true }; o[n[i].row+1] = { text: o[n[i].row+1], row: i + 1, paired: true }; } } // pass 5: pair matching rows immediately preceding paired rows (not necessarily unique) for ( i = n.length - 1; i > 0; i-- ) { if ( n[i].paired && ! n[i-1].paired && n[i].row > 0 && ! o[ n[i].row - 1 ].paired && n[i-1] == o[ n[i].row - 1 ] ) { n[i-1] = { text: n[i-1], row: n[i].row - 1, paired: true }; o[n[i].row-1] = { text: o[n[i].row-1], row: i - 1, paired: true }; } } return { o: o, n: n }; } //</NOLITE> // ENDFILE: diff.js // STARTFILE: init.js function setSiteInfo() { if (window.popupLocalDebug) { pg.wiki.hostname = 'en.wikipedia.org'; } else { pg.wiki.hostname = location.hostname; // use in preference to location.hostname for flexibility (?) } pg.wiki.wikimedia=RegExp('(wiki([pm]edia|source|books|news|quote|versity)|wiktionary|mediawiki)[.]org').test(pg.wiki.hostname); pg.wiki.wikia=RegExp('[.]wikia[.]com$', 'i').test(pg.wiki.hostname); pg.wiki.isLocal=RegExp('^localhost').test(pg.wiki.hostname); pg.wiki.commons=( pg.wiki.wikimedia && pg.wiki.hostname != 'commons.wikimedia.org') ? 'commons.wikimedia.org' : null; pg.wiki.lang = wgContentLanguage; var port = location.port ? ':' + location.port : ''; pg.wiki.sitebase = pg.wiki.hostname + port; } function setTitleBase() { var protocol = ( window.popupLocalDebug ? 'http:' : location.protocol ); pg.wiki.articlePath = wgArticlePath.replace(/\/\$1/, ""); // as in http://some.thing.com/wiki/Article pg.wiki.botInterfacePath = wgScript; pg.wiki.APIPath = wgScriptPath +"/api.php"; // default mediawiki setting is paths like http://some.thing.com/articlePath/index.php?title=foo var titletail = pg.wiki.botInterfacePath + '?title='; //var titletail2 = joinPath([pg.wiki.botInterfacePath, 'wiki.phtml?title=']); // other sites may need to add code here to set titletail depending on how their urls work pg.wiki.titlebase = protocol + '//' + pg.wiki.sitebase + titletail; //pg.wiki.titlebase2 = protocol + '//' + joinPath([pg.wiki.sitebase, titletail2]); pg.wiki.wikibase = protocol + '//' + pg.wiki.sitebase + pg.wiki.botInterfacePath; pg.wiki.apiwikibase = protocol + '//' + pg.wiki.sitebase + pg.wiki.APIPath; pg.wiki.articlebase = protocol + '//' + pg.wiki.sitebase + pg.wiki.articlePath; pg.wiki.commonsbase = protocol + '//' + pg.wiki.commons + pg.wiki.botInterfacePath; pg.wiki.apicommonsbase = protocol + '//' + pg.wiki.commons + pg.wiki.APIPath; pg.re.basenames = RegExp( '^(' + map( literalizeRegex, [ pg.wiki.titlebase, //pg.wiki.titlebase2, pg.wiki.articlebase ]).join('|') + ')' ); } ////////////////////////////////////////////////// // Global regexps function setMainRegex() { var reStart='[^:]*://'; var preTitles = literalizeRegex(wgScriptPath) + '/(?:index[.]php|wiki[.]phtml)[?]title='; // slightly ugly hack when pg.wiki.articlePath is empty preTitles += '|' + literalizeRegex( ( pg.wiki.articlePath ? pg.wiki.articlePath + '/': '')); var reEnd='(' + preTitles + ')([^&?#]*)[^#]*(?:#(.+))?'; pg.re.main = RegExp(reStart + literalizeRegex(pg.wiki.sitebase) + reEnd); } function setRegexps() { setMainRegex(); var sp=nsRe('Special'); pg.re.urlNoPopup=RegExp('((title=|/)' + sp + '(?:%3A|:)|section=[0-9])') ; pg.re.contribs =RegExp('(title=|/)' + sp + '(?:%3A|:)Contributions' + '(&target=|/|/' + pg.ns.user+':)(.*)') ; pg.re.email =RegExp('(title=|/)' + sp + '(?:%3A|:)Emailuser' + '(&target=|/|/(?:' + pg.ns.user+':)?)(.*)') ; pg.re.backlinks =RegExp('(title=|/)' + sp + '(?:%3A|:)Whatlinkshere' + '(&target=|/)([^&]*)'); //<NOLITE> var im=nsReImage(); // note: tries to get images in infobox templates too, e.g. movie pages, album pages etc // (^|\[\[)image: *([^|\]]*[^|\] ]) * // (^|\[\[)image: *([^|\]]*[^|\] ])([^0-9\]]*([0-9]+) *px)? // $4 = 120 as in 120px pg.re.image = RegExp('(^|\\[\\[)' + im + ': *([^|\\]]*[^|\\] ])' + '([^0-9\\]]*([0-9]+) *px)?|(?:\\n *[|]?|[|]) *' + '(' + getValueOf('popupImageVarsRegexp') + ')' + ' *= *(?:\\[\\[ *)?(?:' + im + ':)?' + '([^|]*?)(?:\\]\\])? *[|]? *\\n', 'img') ; pg.re.imageBracketCount = 6; pg.re.category = RegExp('\\[\\[' +nsRe('Category') + ': *([^|\\]]*[^|\\] ]) *', 'i'); pg.re.categoryBracketCount = 1; pg.re.ipUser=RegExp('('+nsRe('User')+':)?' + '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}' + '(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])'); pg.re.stub= RegExp(getValueOf('popupStubRegexp'), 'im'); pg.re.disambig=RegExp(getValueOf('popupDabRegexp'), 'im'); //</NOLITE> // FIXME replace with general parameter parsing function, this is daft pg.re.oldid=RegExp('[?&]oldid=([^&]*)'); pg.re.diff=RegExp('[?&]diff=([^&]*)'); } ////////////////////////////////////////////////// // miscellany function setupCache() { // page caching pg.cache.pages = []; } function setMisc() { pg.current.link=null; pg.current.links=[]; pg.current.linksHash={}; setupCache(); pg.timer.checkPopupPosition=null; pg.counter.loop=0; // ids change with each popup: popupImage0, popupImage1 etc pg.idNumber=0; // for myDecodeURI pg.misc.decodeExtras = [ {from: '%2C', to: ',' }, {from: '_', to: ' ' }, {from: '%24', to: '$'}, {from: '%26', to: '&' } // no , ]; } function leadingInteger(s){ var n=s.match(/^(\d*)/)[1]; if (n) { return +n; } return null; } function setBrowserHacks() { var useOriginal=false; // browser-specific hacks if (typeof window.opera != 'undefined') { //if (leadingInteger(opera.version()) < 9) { useOriginal=true; } // v9 beta still seems to have buggy css setDefault('popupNavLinkSeparator', ' &#183; '); } else if (navigator.appName=='Konqueror') { setDefault('popupNavLinkSeparator', ' &bull; '); pg.flag.isKonq=true; } else if ( navigator.vendor && navigator.vendor.toLowerCase().indexOf('apple computer')===0) { pg.flag.isSafari=true; var webkit=+navigator.userAgent.replace(RegExp('^.*AppleWebKit[/](\\d+).*', 'i'), '$1'); if (webkit < 420) { useOriginal=true; } } else if (navigator.appName.indexOf("Microsoft")!=-1) { setDefault('popupNavLinkSeparator', ' &#183; '); useOriginal=true; var ver=+navigator.userAgent.replace(RegExp('^.*MSIE (\\d+).*'), '$1'); pg.flag.isIE=true; pg.flag.IEVersion=ver; } if ((pg.flag.isIE && pg.flag.IEVersion < 7) || pg.flag.isKonq || (pg.flag.isSafari && webkit < 420)) { pg.flag.linksLikeIE6=true; } if (useOriginal && pg.structures.original) { setDefault('popupStructure','original'); } } function setupPopups() { // NB translatable strings should be set up first (strings.js) // basics setupDebugging(); setSiteInfo(); setTitleBase(); setOptions(); // see options.js // namespaces etc setNamespaces(); setInterwiki(); // regexps setRegexps(); setRedirs(); // other stuff setBrowserHacks(); setMisc(); setupLivePreview(); // main deal here setupTooltips(); Navpopup.tracker.enable(); setupPopups.completed = true; } // ENDFILE: init.js // STARTFILE: navlinks.js //<NOLITE> ////////////////////////////////////////////////// // navlinks... let the fun begin // function defaultNavlinkSpec() { var str=''; str += '<b><<mainlink|shortcut= >></b>'; if (getValueOf('popupLastEditLink')) { str += '*<<lastEdit|shortcut=/>>|<<lastContrib>>|<<sinceMe>>if(oldid){|<<oldEdit>>|<<diffCur>>}'; } // user links // contribs - log - count - email - block // count only if applicable; block only if popupAdminLinks str += 'if(user){<br><<contribs|shortcut=c>>*<<userlog|shortcut=L|log>>'; str+='if(ipuser){*<<arin>>}if(wikimedia){*<<count|shortcut=#>>}'; str+='if(ipuser){}else{*<<email|shortcut=E>>}if(admin){*<<block|shortcut=b>>|<<blocklog|log>>}}'; // editing links // talkpage -> edit|new - history - un|watch - article|edit // other page -> edit - history - un|watch - talk|edit|new var editstr='<<edit|shortcut=e>>'; var editOldidStr='if(oldid){<<editOld|shortcut=e>>|<<revert|shortcut=v|rv>>|<<edit|cur>>}else{' + editstr + '}' var historystr='<<history|shortcut=h>>if(mainspace_en){|<<editors|shortcut=E|>>}'; var watchstr='<<unwatch|unwatchShort>>|<<watch|shortcut=w|watchThingy>>'; str+='<br>if(talk){' + editOldidStr+'|<<new|shortcut=+>>' + '*' + historystr+'*'+watchstr + '*' + '<b><<article|shortcut=a>></b>|<<editArticle|edit>>' + '}else{' + // not a talk page editOldidStr + '*' + historystr + '*' + watchstr + '*' + '<b><<talk|shortcut=t>></b>|<<editTalk|edit>>|<<newTalk|shortcut=+|new>>' + '}'; // misc links str += '<br><<whatLinksHere|shortcut=l>>*<<relatedChanges|shortcut=r>>*<<move|shortcut=m>>'; // admin links str += 'if(admin){<br><<unprotect|unprotectShort>>|<<protect|shortcut=p>>|<<protectlog|log>>*' + '<<undelete|undeleteShort>>|<<delete|shortcut=d>>|<<deletelog|log>>}'; return str; } function navLinksHTML (article, hint, params) { //oldid, rcid) { var str = '<span class="popupNavLinks">' + defaultNavlinkSpec() + '</span>'; // BAM return navlinkStringToHTML(str, article, params); } function expandConditionalNavlinkString(s,article,z,recursionCount) { var oldid=z.oldid, rcid=z.rcid, diff=z.diff; // nested conditionals (up to 10 deep) are ok, hopefully! (work from the inside out) if (typeof recursionCount!=typeof 0) { recursionCount=0; } var conditionalSplitRegex=RegExp( //(1 if \\( (2 2) \\) {(3 3)} (4 else {(5 5)} 4)1) '(;?\\s*if\\s*\\(\\s*([\\w]*)\\s*\\)\\s*\\{([^{}]*)\\}(\\s*else\\s*\\{([^{}]*?)\\}|))', 'i'); var splitted=s.parenSplit(conditionalSplitRegex); // $1: whole conditional // $2: test condition // $3: true expansion // $4: else clause (possibly empty) // $5: false expansion (possibly null) var numParens=5; var ret = splitted[0]; for (var i=1; i<splitted.length; i=i+numParens+1) { var testString=splitted[i+2-1]; var trueString=splitted[i+3-1]; var falseString=splitted[i+5-1]; if (typeof falseString=='undefined' || !falseString) { falseString=''; } var testResult=null; switch (testString) { case 'user': testResult=(article.userName())?true:false; break; case 'talk': testResult=(article.talkPage())?false:true; // talkPage converts _articles_ to talkPages break; case 'admin': testResult=getValueOf('popupAdminLinks')?true:false; break; case 'oldid': testResult=(typeof oldid != 'undefined' && oldid)?true:false; break; case 'rcid': testResult=(typeof rcid != 'undefined' && rcid)?true:false; break; case 'ipuser': testResult=(article.isIpUser())?true:false; break; case 'mainspace_en': testResult=isInMainNamespace(article) && pg.wiki.hostname=='en.wikipedia.org'; break; case 'wikimedia': testResult=(pg.wiki.wikimedia) ? true : false; break; case 'diff': testResult=(typeof diff != 'undefined' && diff)?true:false; break; } switch(testResult) { case null: ret+=splitted[i]; break; case true: ret+=trueString; break; case false: ret+=falseString; break; } // append non-conditional string ret += splitted[i+numParens]; } if (conditionalSplitRegex.test(ret) && recursionCount < 10) { return expandConditionalNavlinkString(ret,article,z,recursionCount+1); } return ret; } function navlinkStringToArray(s, article, params) { s=expandConditionalNavlinkString(s,article,params); var splitted=s.parenSplit(RegExp('<<(.*?)>>')); var ret=[]; for (var i=0; i<splitted.length; ++i) { if (i%2) { // i odd, so s is a tag var t=new navlinkTag(); var ss=splitted[i].split('|'); t.id=ss[0]; for (var j=1; j<ss.length; ++j) { var sss=ss[j].split('='); if (sss.length>1) { t[sss[0]]=sss[1]; } else { // no assignment (no "="), so treat this as a title (overwriting the last one) t.text=popupString(sss[0]); } } t.article=article; var oldid=params.oldid, rcid=params.rcid, diff=params.diff; if (typeof oldid != 'undefined' && oldid != null) { t.oldid=oldid; } if (typeof rcid != 'undefined' && rcid != null) { t.rcid=rcid; } if (typeof diff != 'undefined' && diff != null) { t.diff=diff; } if (!t.text && t.id != 'mainlink') { t.text=popupString(t.id); } ret.push(t); } else { // plain HTML ret.push(splitted[i]); } } return ret; } function navlinkSubstituteHTML(s) { return s.split('*').join(getValueOf('popupNavLinkSeparator')) .split('<menurow>').join('<li class="popup_menu_row">') .split('</menurow>').join('</li>') .split('<menu>').join('<ul class="popup_menu">') .split('</menu>').join('</ul>'); } function navlinkDepth(magic,s) { return s.split('<' + magic + '>').length - s.split('</' + magic + '>').length; } // navlinkString: * becomes the separator // <<foo|bar=baz|fubar>> becomes a foo-link with attribute bar='baz' // and visible text 'fubar' // if(test){...} and if(test){...}else{...} work too (nested ok) function navlinkStringToHTML(s,article,params) { //limitAlert(navlinkStringToHTML, 5, 'navlinkStringToHTML\n' + article + '\n' + (typeof article)); var p=navlinkStringToArray(s,article,params); var html=''; var menudepth = 0; // nested menus not currently allowed, but doesn't do any harm to code for it var menurowdepth = 0; var wrapping = null; for (var i=0; i<p.length; ++i) { if (typeof p[i] == typeof '') { html+=navlinkSubstituteHTML(p[i]); menudepth += navlinkDepth('menu', p[i]); menurowdepth += navlinkDepth('menurow', p[i]); // if (menudepth === 0) { // tagType='span'; // } else if (menurowdepth === 0) { // tagType='li'; // } else { // tagType = null; // } } else if (typeof p[i].type != 'undefined' && p[i].type=='navlinkTag') { if (menudepth > 0 && menurowdepth === 0) { html += '<li class="popup_menu_item">' + p[i].html() + '</li>'; } else { html+=p[i].html(); } } } return html; } function navlinkTag() { this.type='navlinkTag'; } navlinkTag.prototype.html=function () { this.getNewWin(); this.getPrintFunction(); var html=''; var opening, closing; var tagType='span'; if (!tagType) { opening = ''; closing = ''; } else { opening = '<' + tagType + ' class="popup_' + this.id + '">'; closing = '</' + tagType + '>'; } if (typeof this.print!='function') { errlog ('Oh dear - invalid print function for a navlinkTag, id='+this.id); } else { html=this.print(this); if (typeof html != typeof '') {html='';} else if (typeof this.shortcut!='undefined') html=addPopupShortcut(html, this.shortcut); } return opening + html + closing; }; navlinkTag.prototype.getNewWin=function() { getValueOf('popupLinksNewWindow'); if (typeof pg.option.popupLinksNewWindow[this.id] === 'undefined') { this.newWin=null; } this.newWin=pg.option.popupLinksNewWindow[this.id]; } navlinkTag.prototype.getPrintFunction=function() { //think about this some more // this.id and this.article should already be defined if (typeof this.id!=typeof '' || typeof this.article!=typeof {} ) { return; } var html=''; var a,t; this.noPopup=1; switch (this.id) { case 'contribs': case 'history': case 'whatLinksHere': case 'userPage': case 'monobook': case 'userTalk': case 'talk': case 'article': case 'lastEdit': this.noPopup=null; } switch (this.id) { case 'email': case 'contribs': case 'block': case 'unblock': case 'userlog': case 'userSpace': case 'deletedContribs': this.article=this.article.userName(); } switch (this.id) { case 'userTalk': case 'newUserTalk': case 'editUserTalk': case 'userPage': case 'monobook': case 'editMonobook': case 'blocklog': this.article=this.article.userName(true); // fall through; no break case 'pagelog': case 'deletelog': case 'protectlog': delete this.oldid; } if (this.id=='editMonobook' || this.id=='monobook') { this.article.append('/monobook.js'); } if (this.id != 'mainlink') { // FIXME anchor handling should be done differently with Title object this.article=this.article.removeAnchor(); // if (typeof this.text=='undefined') this.text=popupString(this.id); } switch (this.id) { case 'undelete': this.print=specialLink; this.specialpage='Undelete'; this.sep='/'; break; case 'whatLinksHere': this.print=specialLink; this.specialpage='Whatlinkshere'; break; case 'relatedChanges': this.print=specialLink; this.specialpage='Recentchangeslinked'; break; case 'move': this.print=specialLink; this.specialpage='Movepage'; break; case 'contribs': this.print=specialLink; this.specialpage='Contributions'; break; case 'deletedContribs':this.print=specialLink; this.specialpage='Deletedcontributions'; break; case 'email': this.print=specialLink; this.specialpage='Emailuser'; break; case 'block': this.print=specialLink; this.specialpage='Blockip'; this.sep='&ip='; break; case 'unblock': this.print=specialLink; this.specialpage='Ipblocklist'; this.sep='&action=unblock&ip='; break; case 'userlog': this.print=specialLink; this.specialpage='Log'; this.sep='&user='; break; case 'blocklog': this.print=specialLink; this.specialpage='Log'; this.sep='&type=block&page='; break; case 'pagelog': this.print=specialLink; this.specialpage='Log'; this.sep='&page='; break; case 'protectlog': this.print=specialLink; this.specialpage='Log'; this.sep='&type=protect&page='; break; case 'deletelog': this.print=specialLink; this.specialpage='Log'; this.sep='&type=delete&page='; break; case 'userSpace': this.print=specialLink; this.specialpage='PrefixIndex'; this.sep='&namespace=2&prefix='; break; case 'search': this.print=specialLink; this.specialpage='Search'; this.sep='&fulltext=Search&search='; break; case 'history': case 'historyfeed': case 'unwatch': case 'watch': case 'unprotect': case 'protect': this.print=wikiLink; this.action=this.id; break; case 'delete': this.print=wikiLink; this.action='delete'; if (this.article.namespace()==pg.ns.image) { var img=this.article.stripNamespace(); this.action+='&image='+img; } break; case 'markpatrolled': case 'edit': // editOld should keep the oldid, but edit should not. delete this.oldid; // fall through case 'view': case 'purge': case 'render': this.print=wikiLink; this.action=this.id; break; case 'raw': this.print=wikiLink; this.action='raw&ctype=text/css'; break; case 'new': this.print=wikiLink; this.action='edit&section=new'; break; case 'mainlink': if (typeof this.text=='undefined') { this.text=this.article.toString().entify(); } if (getValueOf('popupSimplifyMainLink') && isInStrippableNamespace(this.article)) { var s=this.text.split('/'); this.text=s[s.length-1]; if (this.text=='' && s.length > 1) { this.text=s[s.length-2]; } } this.print=titledWikiLink; if (typeof this.title=='undefined' && pg.current.link && typeof pg.current.link.href != 'undefined') { this.title=safeDecodeURI((pg.current.link.originalTitle)?pg.current.link.originalTitle:this.article); if (typeof this.oldid != 'undefined' && this.oldid) { this.title=tprintf('Revision %s of %s', [this.oldid, this.title]); } } this.action='view'; break; case 'userPage': case 'article': case 'monobook': case 'editMonobook': case 'editArticle': delete this.oldid; //alert(this.id+'\n'+this.article + '\n'+ typeof this.article); this.article=this.article.articleFromTalkOrArticle(); //alert(this.id+'\n'+this.article + '\n'+ typeof this.article); this.print=wikiLink; if (this.id.indexOf('edit')==0) { this.action='edit'; } else { this.action='view';} break; case 'userTalk': case 'talk': this.article=this.article.talkPage(); delete this.oldid; this.print=wikiLink; this.action='view'; break; case 'arin': this.print=arinLink; break; case 'count': this.print=editCounterLink; break; case 'google': this.print=googleLink; break; case 'editors': this.print=editorListLink; break; case 'globalsearch': this.print=globalSearchLink; break; case 'lastEdit': this.print=titledDiffLink; this.title=popupString('Show the last edit'); this.from='prev'; this.to='cur'; break; case 'oldEdit': this.print=titledDiffLink; this.title=popupString('Show the edit made to get revision') + ' ' + this.oldid; this.from='prev'; this.to=this.oldid; break; case 'editOld': this.print=wikiLink; this.action='edit'; break; case 'undo': this.print=wikiLink; this.action='edit&undo='; break; case 'markpatrolled': this.print=wikiLink; this.action='markpatrolled'; case 'revert': this.print=wikiLink; this.action='revert'; break; case 'nullEdit': this.print=wikiLink; this.action='nullEdit'; break; case 'diffCur': this.print=titledDiffLink; this.title=tprintf('Show changes since revision %s', [this.oldid]); this.from=this.oldid; this.to='cur'; break; case 'editUserTalk': case 'editTalk': delete this.oldid; this.article=this.article.talkPage(); this.action='edit'; this.print=wikiLink; break; case 'newUserTalk': case 'newTalk': this.article=this.article.talkPage(); this.action='edit&section=new'; this.print=wikiLink; break; case 'lastContrib': case 'sinceMe': this.print=magicHistoryLink; break; case 'togglePreviews': this.text=popupString(pg.option.simplePopups ? 'enable previews' : 'disable previews'); case 'disablePopups': case 'purgePopups': this.print=popupMenuLink; break; default: this.print=function () {return 'Unknown navlink type: '+this.id+''}; } }; // // end navlinks ////////////////////////////////////////////////// //</NOLITE> // ENDFILE: navlinks.js // STARTFILE: shortcutkeys.js //<NOLITE> function popupHandleKeypress(evt) { var keyCode = window.event ? window.event.keyCode : ( evt.keyCode ? evt.keyCode : evt.which); if (!keyCode || !pg.current.link || !pg.current.link.navpopup) { return; } if (keyCode==27) { // escape killPopup(); return false; // swallow keypress } var letter=String.fromCharCode(keyCode); var links=pg.current.link.navpopup.mainDiv.getElementsByTagName('A'); var startLink=0; var i,j; if (popupHandleKeypress.lastPopupLinkSelected) { for (i=0; i<links.length; ++i) { if (links[i]==popupHandleKeypress.lastPopupLinkSelected) { startLink=i; } } } for (j=0; j<links.length; ++j) { i=(startLink + j + 1) % links.length; if (links[i].getAttribute('popupkey')==letter) { if (evt && evt.preventDefault) evt.preventDefault(); links[i].focus(); popupHandleKeypress.lastPopupLinkSelected=links[i]; return false; // swallow keypress } } // pass keypress on if (document.oldPopupOnkeypress) { return document.oldPopupOnkeypress(evt); } return true; } function addPopupShortcuts() { if (document.onkeypress!=popupHandleKeypress) { document.oldPopupOnkeypress=document.onkeypress; } document.onkeypress=popupHandleKeypress; } function rmPopupShortcuts() { popupHandleKeypress.lastPopupLinkSelected=null; try { if (document.oldPopupOnkeypress && document.oldPopupOnkeypress==popupHandleKeypress) { // panic document.onkeypress=null; //function () {}; return; } document.onkeypress=document.oldPopupOnkeypress; } catch (nasties) { /* IE goes here */ } } function addLinkProperty(html, property) { // take "<a href=...>...</a> and add a property // not sophisticated at all, easily broken var i=html.indexOf('>'); if (i<0) { return html; } return html.substring(0,i) + ' ' + property + html.substring(i); } function addPopupShortcut(html, key) { if (!getValueOf('popupShortcutKeys')) { return html; } var ret= addLinkProperty(html, 'popupkey="'+key+'"'); if (key==' ') { key=popupString('spacebar'); } return ret.replace(RegExp('^(.*?)(title=")(.*?)(".*)$', 'i'),'$1$2$3 ['+key+']$4'); } //</NOLITE> // ENDFILE: shortcutkeys.js // STARTFILE: diffpreview.js //<NOLITE> function loadDiff(article, oldid, diff, navpop) { navpop.diffData={}; var oldRev, newRev; switch (diff) { case 'cur': switch ( oldid ) { case null: case '': case 'prev': // eg newmessages diff link oldRev='0&direction=prev'; newRev=0; break; default: oldRev = oldid; newRev = 0; } break; case 'prev': oldRev = ( oldid || 0 ) + '&direction=prev'; newRev = oldid; break; case 'next': oldRev = oldid; newRev = oldid + '&direction=next'; break; default: oldRev = oldid || 0; newRev = diff || 0; break; } oldRev = oldRev || 0; newRev = newRev || 0; var go = function() { pendingNavpopTask(navpop); getWiki(article, doneDiffNew, newRev, navpop); pendingNavpopTask(navpop); getWiki(article, doneDiffOld, oldRev, navpop); var tz = Cookie.read('popTz'); if ( (window.wgEnableAPI || wgEnableAPI) && getValueOf('popupAdjustDiffDates') && tz===null) { pendingNavpopTask(navpop); getPageWithCaching(pg.wiki.apiwikibase + '?format=json&action=query&meta=userinfo&uiprop=options', function(d) { completedNavpopTask(navpop); setTimecorrectionCookie(d); if (diffDownloadsComplete(navpop)) { insertDiff(navpop); } }, navpop); } return true; // remove hook once run } if (navpop.visible || !getValueOf('popupLazyDownloads')) { go(); } else { navpop.addHook(go, 'unhide', 'before', 'DOWNLOAD_DIFFS'); } } function setTimecorrectionCookie(d) { try { var jsobj=getJsObj(d.data); var tz=jsobj.query.userinfo.options.timecorrection; } catch (someError) { logerr( 'setTimecorretion failed' ); return; } Cookie.create( 'popTz', getTimeOffset(tz), 1); } function doneDiff(download, isOld) { if (!download.owner || !download.owner.diffData) { return; } var navpop=download.owner; var label= (isOld) ? 'Old' : 'New'; var otherLabel=(isOld) ? 'New' : 'Old'; navpop.diffData[label]=download; completedNavpopTask(download.owner); if (diffDownloadsComplete(navpop)) { insertDiff(navpop); } } function diffDownloadsComplete(navpop) { if ( Cookie.read('popTz')===null) { return false; } return navpop.diffData.Old && navpop.diffData.New; } function doneDiffNew(download) { doneDiff(download, false); } function doneDiffOld(download) { doneDiff(download, true); } function rmBoringLines(a,b,context) { if (typeof context == 'undefined') { context=2; } // this is fairly slow... i think it's quicker than doing a word-based diff from the off, though var aa=[], aaa=[]; var bb=[], bbb=[]; var i, j; // first, gather all disconnected nodes in a and all crossing nodes in a and b for (i=0; i<a.length; ++i ) { if(!a[i].paired) { aa[i]=1; } else if (countCrossings(b,a,i, true)) { aa[i]=1; bb[ a[i].row ] = 1; } } // pick up remaining disconnected nodes in b for (i=0; i<b.length; ++i ) { if (bb[i]==1) { continue; } if(!b[i].paired) { bb[i]=1; } } // another pass to gather context: we want the neighbours of included nodes which are not yet included // we have to add in partners of these nodes, but we don't want to add context for *those* nodes in the next pass for (i=0; i<b.length; ++i) { if ( bb[i] == 1 ) { for (j=max(0,i-context); j < min(b.length, i+context); ++j) { if ( !bb[j] ) { bb[j] = 1; aa[ b[j].row ] = 0.5; } } } } for (i=0; i<a.length; ++i) { if ( aa[i] == 1 ) { for (j=max(0,i-context); j < min(a.length, i+context); ++j) { if ( !aa[j] ) { aa[j] = 1; bb[ a[j].row ] = 0.5; } } } } for (i=0; i<bb.length; ++i) { if (bb[i] > 0) { // it's a row we need if (b[i].paired) { bbb.push(b[i].text); } // joined; partner should be in aa else { bbb.push(b[i]); } } } for (i=0; i<aa.length; ++i) { if (aa[i] > 0) { // it's a row we need if (a[i].paired) { aaa.push(a[i].text); } // joined; partner should be in aa else { aaa.push(a[i]); } } } return { a: aaa, b: bbb}; } function stripOuterCommonLines(a,b,context) { var i=0; while (i<a.length && i < b.length && a[i]==b[i]) { ++i; } var j=a.length-1; var k=b.length-1; while ( j>=0 && k>=0 && a[j]==b[k] ) { --j; --k; } return { a: a.slice(max(0,i - 1 - context), min(a.length+1, j + context+1)), b: b.slice(max(0,i - 1 - context), min(b.length+1, k + context+1)) }; } function insertDiff(navpop) { // for speed reasons, we first do a line-based diff, discard stuff that seems boring, then do a word-based diff // FIXME: sometimes this gives misleading diffs as distant chunks are squashed together var oldlines=navpop.diffData.Old.data.split('\n'); var newlines=navpop.diffData.New.data.split('\n'); var inner=stripOuterCommonLines(oldlines,newlines,getValueOf('popupDiffContextLines')); oldlines=inner.a; newlines=inner.b; var truncated=false; getValueOf('popupDiffMaxLines'); if (oldlines.length > pg.option.popupDiffMaxLines || newlines.length > pg.option.popupDiffMaxLines) { // truncate truncated=true; inner=stripOuterCommonLines(oldlines.slice(0,pg.option.popupDiffMaxLines), newlines.slice(0,pg.option.popupDiffMaxLines), pg.option.popupDiffContextLines); oldlines=inner.a; newlines=inner.b; } var lineDiff=diff(oldlines, newlines); var lines2=rmBoringLines(lineDiff.o, lineDiff.n); var oldlines2=lines2.a; var newlines2=lines2.b; var simpleSplit = !String.prototype.parenSplit.isNative; var html='<hr>'; if (getValueOf('popupDiffDates')) { html += diffDatesTable(navpop.diffData.Old, navpop.diffData.New); html += '<hr>'; } html += shortenDiffString( diffString(oldlines2.join('\n'), newlines2.join('\n'), simpleSplit), getValueOf('popupDiffContextCharacters') ).join('<hr>'); setPopupTipsAndHTML(html.split('\n').join('<br>') + (truncated ? '<hr><b>'+popupString('Diff truncated for performance reasons')+'</b>' : '') , 'popupPreview', navpop.idNumber); } function diffDatesTable( oldDl, newDl ) { var html='<table class="popup_diff_dates">'; html += diffDatesTableRow( newDl, tprintf('New revision')); html += diffDatesTableRow( oldDl, tprintf('Old revision')); html += '</table>'; return html; } function diffDatesTableRow( dl, label ) { var txt=''; if (!dl) { txt=popupString('Something went wrong :-('); } else if (!dl.lastModified) { txt= (/^\s*$/.test(dl.data)) ? popupString('Empty revision, maybe non-existent') : popupString('Unknown date'); } else { var datePrint=getValueOf('popupDiffDatePrinter'); if (typeof dl.lastModified[datePrint] == 'function') { if (getValueOf('popupAdjustDiffDates')) { var off; if (off=Cookie.read('popTz')) { var d2=adjustDate(dl.lastModified, off); txt = dayFormat(d2, true) + ' ' + timeFormat(d2, true); } } else { txt = dl.lastModified[datePrint](); } } else { txt = tprintf('Invalid %s %s', ['popupDiffDatePrinter', datePrint]); } } var revlink = generalLink({url: dl.url.replace(/&.*?(oldid=[0-9]+(?:&direction=[^&]*)?).*/, '&$1'), text: label, title: label}); return simplePrintf('<tr><td>%s</td><td>%s</td></tr>', [ revlink, txt ]); } //</NOLITE> // ENDFILE: diffpreview.js // STARTFILE: links.js //<NOLITE> ///////////////////// // LINK GENERATION // ///////////////////// // titledDiffLink --> titledWikiLink --> generalLink // wikiLink --> titledWikiLink --> generalLink // editCounterLink --> generalLink function titledDiffLink(l) { // article, text, title, from, to) { return titledWikiLink({article: l.article, action: l.to + '&oldid=' + l.from, newWin: l.newWin, noPopup: l.noPopup, text: l.text, title: l.title, /* hack: no oldid here */ actionName: 'diff'}); } function wikiLink(l) { //{article:article, action:action, text:text, oldid, newid}) { if (! (typeof l.article == typeof {} && typeof l.action == typeof '' && typeof l.text==typeof '')) return null; if (typeof l.oldid == 'undefined') { l.oldid=null; } var savedOldid = l.oldid; if (!/^(edit|view|revert|render)$|^raw/.test(l.action)) { l.oldid=null; } var hint=popupString(l.action + 'Hint'); // revertHint etc etc etc var oldidData=[l.oldid, safeDecodeURI(l.article)]; var revisionString = tprintf('revision %s of %s', oldidData); log('revisionString='+revisionString); switch (l.action) { case 'edit&section=new': hint = popupString('newSectionHint'); break; case 'edit&undo=': if (l.diff && l.diff != 'prev' && savedOldid ) { l.action += l.diff + '&undoafter=' + savedOldid; } else if (savedOldid) { l.action += savedOldid; } hint = popupString('undoHint'); break; case 'raw&ctype=text/css': hint=popupString('rawHint'); break; case 'revert': if (!window.wgEnableAPI || !wgEnableAPI) { alert( 'This function of navigation popups now requires a MediaWiki ' + 'installation with the API enabled.'); break; } var p=parseParams(pg.current.link.href); l.action='edit&autoclick=wpSave&actoken=' + autoClickToken() + '&autosummary=' + revertSummary(l.oldid, p.diff); if (p.diff=='prev') { l.action += '&direction=prev'; revisionString = tprintf('the revision prior to revision %s of %s', oldidData); } if (getValueOf('popupRevertSummaryPrompt')) { l.action += '&autosummaryprompt=true'; } if (getValueOf('popupMinorReverts')) { l.action += '&autominor=true'; } log('revisionString is now '+revisionString); break; case 'nullEdit': l.action='edit&autoclick=wpSave&actoken=' + autoClickToken() + '&autosummary=null'; break; case 'historyfeed': l.action='history&feed=rss'; break; case 'markpatrolled': l.action='markpatrolled&rcid='+l.rcid; } if (hint) { if (l.oldid) { hint = simplePrintf(hint, [revisionString]); } else { hint = simplePrintf(hint, [safeDecodeURI(l.article)]); } } else { hint = safeDecodeURI(l.article + '&action=' + l.action) + (l.oldid) ? '&oldid='+l.oldid : ''; } return titledWikiLink({article: l.article, action: l.action, text: l.text, newWin:l.newWin, title: hint, oldid: l.oldid, noPopup: l.noPopup}); } function revertSummary(oldid, diff) { var ret=''; if (diff == 'prev') { ret=getValueOf('popupQueriedRevertToPreviousSummary'); } else { ret = getValueOf('popupQueriedRevertSummary'); } return ret + '&autorv=' + oldid; } function titledWikiLink(l) { // possible properties of argument: // article, action, text, title, oldid, actionName, className, noPopup // oldid = null is fine here // article and action are mandatory args if (typeof l.article == 'undefined' || typeof l.action=='undefined') { errlog('got undefined article or action in titledWikiLink'); return null; } var base = pg.wiki.titlebase + l.article.urlString(); var url=base; if (typeof l.actionName=='undefined' || !l.actionName) { l.actionName='action'; } // no need to add &action=view, and this confuses anchors if (l.action != 'view') { url = base + '&' + l.actionName + '=' + l.action; } if (typeof l.oldid!='undefined' && l.oldid) { url+='&oldid='+l.oldid; } var cssClass=pg.misc.defaultNavlinkClassname; if (typeof l.className!='undefined' && l.className) { cssClass=l.className; } return generalNavLink({url: url, newWin: l.newWin, title: (typeof l.title != 'undefined') ? l.title : null, text: (typeof l.text!='undefined')?l.text:null, className: cssClass, noPopup:l.noPopup}); } function getLastContrib(wikipage, newWin) { getHistoryInfo(wikipage, function(x){processLastContribInfo(x,{page: wikipage, newWin: newWin})}); } function processLastContribInfo(info, stuff) { if(!info.edits || !info.edits.length) { alert('Popups: an odd thing happened. Please retry.'); return; } if(!info.firstNewEditor) { alert(tprintf('Only found one editor: %s made %s edits', [info.edits[0].editor,info.edits.length])); return; } var newUrl=pg.wiki.titlebase + new Title(stuff.page).urlString() + '&diff=cur&oldid='+info.firstNewEditor.oldid; displayUrl(newUrl, stuff.newWin); } function getDiffSinceMyEdit(wikipage, newWin) { getHistoryInfo(wikipage, function(x){processDiffSinceMyEdit(x,{page: wikipage, newWin: newWin})}); } function processDiffSinceMyEdit(info, stuff) { if(!info.edits || !info.edits.length) { alert('Popups: something fishy happened. Please try again.'); return; } var friendlyName=stuff.page.split('_').join(' '); if(!info.myLastEdit) { alert(tprintf('Couldn\'t find an edit by %s\nin the last %s edits to\n%s', [info.userName, getValueOf('popupHistoryLimit'), friendlyName])); return; } if(info.myLastEdit.index==0) { alert(tprintf("%s seems to be the last editor to the page %s", [info.userName, friendlyName])); return; } var newUrl=pg.wiki.titlebase + new Title(stuff.page).urlString() + '&diff=cur&oldid='+ info.myLastEdit.oldid; displayUrl(newUrl, stuff.newWin); } function displayUrl(url, newWin){ if(newWin) { window.open(url); } else { document.location=url; } } function purgePopups() { processAllPopups(true); setupCache(); // deletes all cached items (not browser cached, though...) pg.option={}; abortAllDownloads(); } function processAllPopups(nullify, banish) { for (var i=0; i<pg.current.links.length; ++i) { if (!pg.current.links[i].navpopup) { continue; } (nullify || banish) && pg.current.links[i].navpopup.banish(); pg.current.links[i].simpleNoMore=false; nullify && (pg.current.links[i].navpopup=null); } } function disablePopups(){ processAllPopups(false, true); setupTooltips(null, true); } function togglePreviews() { processAllPopups(true, true); pg.option.simplePopups=!pg.option.simplePopups; abortAllDownloads(); } function magicHistoryLink(l) { // FIXME use onclick change href trick to sort this out instead of window.open var jsUrl='', title=''; switch(l.id) { case 'lastContrib': jsUrl=simplePrintf('javascript:getLastContrib(\'%s\',%s)', [l.article.toString(true).split("'").join("\\'"), l.newWin]); title=popupString('lastContribHint'); break; case 'sinceMe': jsUrl=simplePrintf('javascript:getDiffSinceMyEdit(\'%s\',%s)', [l.article.toString(true).split("'").join("\\'"), l.newWin]); title=popupString('sinceMeHint'); break; } return generalNavLink({url: jsUrl, newWin: false, // can't have new windows with JS links, I think title: title, text: l.text, noPopup: l.noPopup}); } function popupMenuLink(l) { var jsUrl=simplePrintf('javascript:%s()', [l.id]); var title=popupString(simplePrintf('%sHint', [l.id])); return generalNavLink({url: jsUrl, newWin:false, title:title, text:l.text, noPopup:l.noPopup}); } function specialLink(l) { // properties: article, specialpage, text, sep if (typeof l.specialpage=='undefined'||!l.specialpage) return null; var base = pg.wiki.titlebase + pg.ns.special+':'+l.specialpage; if (typeof l.sep == 'undefined' || l.sep===null) l.sep='&target='; var article=l.article.urlString({keepSpaces: l.specialpage=='Search'}); var hint=popupString(l.specialpage+'Hint'); switch (l.specialpage) { case 'Log': switch (l.sep) { case '&user=': hint=popupString('userLogHint'); break; case '&type=block&page=': hint=popupString('blockLogHint'); break; case '&page=': hint=popupString('pageLogHint'); break; case '&type=protect&page=': hint=popupString('protectLogHint'); break; case '&type=delete&page=': hint=popupString('deleteLogHint'); break; default: log('Unknown log type, sep=' + l.sep); hint='Missing hint (FIXME)'; } break; case 'PrefixIndex': article += '/'; break; } if (hint) hint = simplePrintf(hint, [safeDecodeURI(l.article)]); else hint = safeDecodeURI(l.specialpage+':'+l.article) ; var url = base + l.sep + article; return generalNavLink({url: url, title: hint, text: l.text, newWin:l.newWin, noPopup:l.noPopup}); } function generalLink(l) { // l.url, l.text, l.title, l.newWin, l.className, l.noPopup if (typeof l.url=='undefined') return null; // only quotation marks in the url can screw us up now... I think var url=l.url.split('"').join('%22'); var ret='<a href="' + url + '"'; if (typeof l.title!='undefined' && l.title) { ret += ' title="' + l.title + '"'; } if (l.noPopup) { ret += ' noPopup=1'; } var newWin; if (typeof l.newWin=='undefined' || l.newWin===null) { newWin=getValueOf('popupNewWindows'); } else { newWin=l.newWin; } if (newWin) { ret += ' target="_blank"'; } if (typeof l.className!='undefined'&&l.className) { ret+=' class="'+l.className+'"'; } ret += '>'; if (typeof l.text==typeof '') { ret+= l.text; } ret +='</a>'; return ret; } function appendParamsToLink(linkstr, params) { var sp=linkstr.parenSplit(RegExp('(href="[^"]+?)"', 'i')); if (sp.length<2) return null; var ret=sp.shift() + sp.shift(); ret += '&' + params + '"'; ret += sp.join(''); return ret; } function changeLinkTargetLink(x) { // newTarget, text, hint, summary, clickButton, minor, title (optional) { if (x.newTarget) { log ('changeLinkTargetLink: newTarget=' + x.newTarget); } // optional: oldTarget (in wikitext) // if x.newTarget omitted or null, remove the link //x.text=encodeURI(x.text); // this buggers things up on zh.wikipedia.org and doesn't seem necessary x.clickButton=encodeURI(x.clickButton); // FIXME: first character of page title as well as namespace should be case insensitive // eg [[category:foo]] and [[Category:Foo]] are equivalent // this'll break if charAt(0) is nasty var cA=literalizeRegex(x.oldTarget); var chs=cA.charAt(0).toUpperCase(); chs='['+chs + chs.toLowerCase()+']'; var currentArticleRegexBit=encodeURIComponent(chs+cA.substring(1)); currentArticleRegexBit=currentArticleRegexBit .split(RegExp('[_ ]+', 'g')).join('[_ ]+') .split( "%20" ).join('[_ ]+') .split('\\(').join('(?:%2528|\\()') .split('\\)').join('(?:%2529|\\))'); // leading and trailing space should be ignored, and anchor bits optional: currentArticleRegexBit = '\\s*(' + currentArticleRegexBit + '(?:#[^\\[\\|]*)?)\\s*'; // e.g. Computer (archaic) -> \s*([Cc]omputer[_ ](?:%2528|\()archaic(?:%2528|\)))\s* // autoedit=s~\[\[([Cc]ad)\]\]~[[Computer-aided%20design|$1]]~g;s~\[\[([Cc]AD)[|]~[[Computer-aided%20design|~g var title=x.title || wgPageName.split('_').join(' '); var lk=titledWikiLink({article: new Title(title), newWin:x.newWin, action: 'edit', text: x.text, title: x.hint, className: 'popup_change_title_link' }); var cmd=''; if (x.newTarget) { // escape '&' and other nasties var t=encodeURIComponent(x.newTarget); var s=encodeURIComponent(literalizeRegex(x.newTarget)); cmd += 's~\\[\\['+currentArticleRegexBit+'\\]\\]~[['+t+'|$1]]~g;'; cmd += 's~\\[\\['+currentArticleRegexBit+'[|]~[['+t+'|~g;'; cmd += 's~\\[\\['+s + '\\|' + s + '\\]\\]~[[' + t + ']]~g'; } else { cmd += 's~\\[\\['+currentArticleRegexBit+'\\]\\]~$1~g;'; cmd += 's~\\[\\['+currentArticleRegexBit+'[|](.*?)\\]\\]~$2~g'; } cmd += '&autoclick='+x.clickButton + '&actoken=' + autoClickToken(); cmd += ( x.minor == null ) ? '' : '&autominor='+x.minor; cmd += ( x.watch == null ) ? '' : '&autowatch='+x.watch; cmd += '&autosummary='+encodeURIComponent(x.summary); return appendParamsToLink(lk, 'autoedit='+cmd); } function redirLink(redirMatch, article) { // NB redirMatch is in wikiText var ret=''; if (getValueOf('popupAppendRedirNavLinks') && getValueOf('popupNavLinks')) { ret += '<hr>'; if (getValueOf('popupFixRedirs') && typeof autoEdit != 'undefined' && autoEdit) { log('redirLink: newTarget=' + redirMatch); ret += addPopupShortcut( changeLinkTargetLink( {newTarget: redirMatch, text: popupString('Redirects'), hint: popupString('Fix this redirect'), summary: simplePrintf(getValueOf('popupFixRedirsSummary'), [article.toString(), redirMatch ]), oldTarget: article.toString(), clickButton: getValueOf('popupRedirAutoClick'), minor: true, watch: getValueOf('popupWatchRedirredPages')}) , 'R'); ret += popupString(' to '); } else ret += popupString('Redirects') + popupString(' to '); return ret; } else return '<br> ' + popupString('Redirects') + popupString(' to ') + titledWikiLink({article: new Title().fromWikiText(redirMatch), action: 'view', /* FIXME: newWin */ text: safeDecodeURI(redirMatch), title: popupString('Bypass redirect')}); } function arinLink(l) { if (!saneLinkCheck(l)) { return null; } if ( ! l.article.isIpUser() || ! pg.wiki.wikimedia) return null; var uN=l.article.userName(); return generalNavLink({url:'http://ws.arin.net/cgi-bin/whois.pl?queryinput=' + encodeURIComponent(uN), newWin:l.newWin, title: tprintf('Look up %s in ARIN whois database', [uN]), text: l.text, noPopup:1}); } function toolDbName(cookieStyle) { var ret = wgDBname; if (!cookieStyle) { ret+= '_p'; } return ret; } function saneLinkCheck(l) { if (typeof l.article != typeof {} || typeof l.text != typeof '') { return false; } return true; } function editCounterLink(l) { if(!saneLinkCheck(l)) return null; if (! pg.wiki.wikimedia) return null; var uN=l.article.userName(); var tool=getValueOf('popupEditCounterTool'); var url; var soxredToolUrl='http://toolserver.org/~soxred93/count/index.php?name=$1&lang=$2&wiki=$3'; var kateToolUrl='http://toolserver.org/~$3/cgi-bin/Tool1/wannabe_kate?username=$1&site=en.wikipedia.org&$2'; switch(tool) { case 'custom': url=simplePrintf(getValueOf('popupEditCounterUrl'), [ encodeURIComponent(uN), toolDbName() ]); break; case 'kate': case 'interiot': url=simplePrintf(kateToolUrl, [ encodeURIComponent(uN), toolDbName(), tool ]); break; default: var theWiki=pg.wiki.hostname.split('.'); url=simplePrintf(soxredToolUrl, [ encodeURIComponent(uN), theWiki[0], theWiki[1] ]); } return generalNavLink({url:url, title: tprintf('editCounterLinkHint', [uN]), newWin:l.newWin, text: l.text, noPopup:1}); } function globalSearchLink(l) { if(!saneLinkCheck(l)) return null; var base='http://vs.aka-online.de/cgi-bin/globalwpsearch.pl?timeout=120&search='; var article=l.article.urlString({keepSpaces:true}); return generalNavLink({url:base + article, newWin:l.newWin, title: tprintf('globalSearchHint', [safeDecodeURI(l.article)]), text: l.text, noPopup:1}); } function googleLink(l) { if(!saneLinkCheck(l)) return null; var base='http://www.google.com/search?q='; var article=l.article.urlString({keepSpaces:true}); return generalNavLink({url:base + '%22' + article + '%22', newWin:l.newWin, title: tprintf('googleSearchHint', [safeDecodeURI(l.article)]), text: l.text, noPopup:1}); } function editorListLink(l) { if(!saneLinkCheck(l)) return null; var article= l.article.articleFromTalkPage() || l.article; var base='http://toolserver.org/~tim/cgi-bin/contribution-counter?page='; return generalNavLink({url:base+article.urlString(), title: tprintf('editorListHint', [article]), newWin:l.newWin, text: l.text, noPopup:1}); } function generalNavLink(l) { l.className = (l.className==null) ? 'popupNavLink' : l.className; return generalLink(l); } ////////////////////////////////////////////////// // magic history links // function getHistoryInfo(wikipage, whatNext) { log('getHistoryInfo'); getHistory(wikipage, whatNext ? function(d){whatNext(processHistory(d));} : processHistory); } // FIXME eliminate pg.idNumber ... how? :-( function getHistory(wikipage, onComplete) { log('getHistory'); if( !window.wgEnableAPI || !wgEnableAPI ) { alert( 'This function of navigation popups now requires a MediaWiki ' + 'installation with the API enabled.'); return false; } var url = pg.wiki.apiwikibase + '?format=json&action=query&prop=revisions&titles=' + new Title(wikipage).urlString() + '&rvlimit=' + getValueOf('popupHistoryLimit'); log('getHistory: url='+url); return startDownload(url, pg.idNumber+'history', onComplete); } function processHistory(download) { var jsobj = getJsObj(download.data); try { window.x=jsobj; var p=jsobj['query']['pages'] for (var pageid in p) { var revisions=p[pageid]['revisions']; // we only get the first one break; } } catch (someError) { log('Something went wrong with JSON business'); return finishProcessHistory([]); } var edits=[]; for (var i=0; i<revisions.length; ++i) { edits.push({ oldid: revisions[i]['revid'], editor: revisions[i]['user'] }); } log('processed ' + edits.length + ' edits'); return finishProcessHistory(edits, wgUserName); } function finishProcessHistory(edits, userName) { var histInfo={}; histInfo.edits=edits; histInfo.userName=userName; for (var i=0; i<edits.length; ++i) { if (typeof histInfo.myLastEdit == 'undefined' && userName && edits[i].editor==userName) { histInfo.myLastEdit={index: i, oldid: edits[i].oldid, previd: (i==0 ? null : edits[i-1].oldid)}; } if (typeof histInfo.firstNewEditor == 'undefined' && edits[i].editor != edits[0].editor) { histInfo.firstNewEditor={index:i, oldid:edits[i].oldid, previd: (i==0 ? null : edits[i-1].oldid)}; } } //pg.misc.historyInfo=histInfo; return histInfo; } //</NOLITE> // ENDFILE: links.js // STARTFILE: options.js ////////////////////////////////////////////////// // options // check for cookies and existing value, else use default function defaultize(x) { var val=null; if (x!='popupCookies') { defaultize('popupCookies'); if (pg.option.popupCookies && (val=Cookie.read(x))) { pg.option[x]=val; return; } } if (pg.option[x]===null || typeof pg.option[x]=='undefined') { if (typeof window[x] != 'undefined' ) pg.option[x]=window[x]; else pg.option[x]=pg.optionDefault[x]; } } function newOption(x, def) { pg.optionDefault[x]=def; } function setDefault(x, def) { return newOption(x, def); } function getValueOf(varName) { defaultize(varName); return pg.option[varName]; } function useDefaultOptions() { // for testing for (var p in pg.optionDefault) { pg.option[p]=pg.optionDefault[p]; if (typeof window[p]!='undefined') { delete window[p]; } } } function setOptions() { // user-settable parameters and defaults var userIsSysop = false; if ( wgUserGroups ) { for ( var g = 0; g < wgUserGroups.length; ++g ) { if ( wgUserGroups[g] == "sysop" ) userIsSysop = true } } // Basic options newOption('popupDelay', 0.5); newOption('popupHideDelay', 0.5); newOption('simplePopups', false); newOption('popupStructure', 'shortmenus'); // see later - default for popupStructure is 'original' if simplePopups is true newOption('popupActionsMenu', true); newOption('popupSetupMenu', true); newOption('popupAdminLinks', userIsSysop); newOption('popupShortcutKeys', false); newOption('popupHistoricalLinks', true); newOption('popupOnlyArticleLinks', true); newOption('removeTitles', true); newOption('popupMaxWidth', 350); newOption('popupInitialWidth', false); // integer or false newOption('popupSimplifyMainLink', true); newOption('popupAppendRedirNavLinks', true); newOption('popupTocLinks', false); newOption('popupSubpopups', true); newOption('popupDragHandle', false /* 'popupTopLinks'*/); newOption('popupLazyPreviews', true); newOption('popupLazyDownloads', true); newOption('popupAllDabsStubs', false); newOption('popupDebugging', false); newOption('popupAdjustDiffDates', true); newOption('popupActiveNavlinks', true); newOption('popupModifier', false); // ctrl, shift, alt or meta newOption('popupModifierAction', 'enable'); // or 'disable' newOption('popupDraggable', true); //<NOLITE> // images newOption('popupImages', true); newOption('imagePopupsForImages', true); newOption('popupNeverGetThumbs', false); //newOption('popupImagesToggleSize', true); newOption('popupThumbAction', 'imagepage'); //'sizetoggle'); newOption('popupImageSize', 60); newOption('popupImageSizeLarge', 200); // redirs, dabs, reversion newOption('popupFixRedirs', false); newOption('popupRedirAutoClick', 'wpDiff'); newOption('popupFixDabs', false); newOption('popupRevertSummaryPrompt', false); newOption('popupMinorReverts', false); newOption('popupRedlinkRemoval', false); newOption('popupWatchDisambiggedPages', null); newOption('popupWatchRedirredPages', null); newOption('popupDabWiktionary', 'last'); // navlinks newOption('popupNavLinks', true); newOption('popupNavLinkSeparator', ' &sdot; '); newOption('popupLastEditLink', true); newOption('popupEditCounterTool', 'soxred'); newOption('popupEditCounterUrl', ''); newOption('popupExtraUserMenu', ''); //</NOLITE> // previews etc newOption('popupPreviews', true); newOption('popupSummaryData', true); newOption('popupMaxPreviewSentences', 5); newOption('popupMaxPreviewCharacters', 600); newOption('popupLastModified', true); newOption('popupPreviewKillTemplates', true); newOption('popupPreviewRawTemplates', true); newOption('popupPreviewFirstParOnly', true); newOption('popupPreviewCutHeadings', true); newOption('popupPreviewButton', false); newOption('popupPreviewButtonEvent', 'click'); //<NOLITE> // diffs newOption('popupPreviewDiffs', true); newOption('popupDiffMaxLines', 100); newOption('popupDiffContextLines', 2); newOption('popupDiffContextCharacters', 40); newOption('popupDiffDates', true); newOption('popupDiffDatePrinter', 'toLocaleString'); // edit summaries. God, these are ugly. newOption('popupFixDabsSummary', popupString('defaultpopupFixDabsSummary') ); newOption('popupExtendedRevertSummary', popupString('defaultpopupExtendedRevertSummary') ); newOption('popupTimeOffset', null); newOption('popupRevertSummary', popupString('defaultpopupRevertSummary') ); newOption('popupRevertToPreviousSummary', popupString('defaultpopupRevertToPreviousSummary') ); newOption('popupQueriedRevertSummary', popupString('defaultpopupQueriedRevertSummary') ); newOption('popupQueriedRevertToPreviousSummary', popupString('defaultpopupQueriedRevertToPreviousSummary') ); newOption('popupFixRedirsSummary', popupString('defaultpopupFixRedirsSummary') ); newOption('popupRedlinkSummary', popupString('defaultpopupRedlinkSummary') ); newOption('popupRmDabLinkSummary', popupString('defaultpopupRmDabLinkSummary') ); //</NOLITE> // misc newOption('popupCookies', false); newOption('popupHistoryLimit', 50); //<NOLITE> newOption('popupFilters', [popupFilterStubDetect, popupFilterDisambigDetect, popupFilterPageSize, popupFilterCountLinks, popupFilterCountImages, popupFilterCountCategories, popupFilterLastModified]); newOption('extraPopupFilters', []); newOption('popupOnEditSelection', 'cursor'); newOption('popupPreviewHistory', true); newOption('popupImageLinks', true); newOption('popupCategoryMembers', true); newOption('popupUserInfo', true); newOption('popupHistoryPreviewLimit', 25); newOption('popupContribsPreviewLimit',25); //</NOLITE> // new windows newOption('popupNewWindows', false); newOption('popupLinksNewWindow', {'lastContrib': true, 'sinceMe': true}); // regexps newOption('popupDabRegexp', '([{][{]\\s*disambig|disambig\\s*[}][}]|disamb\\s*[}][}]|dab\\s*[}][}])|[{][{]\\s*(((geo|hn|road?|school|number)dis)|[234][lc][acw]|shipindex)(\\s*[|][^}]*)?\\s*[}][}]|is a .*disambiguation.*page'); newOption('popupStubRegexp', '(sect)?stub[}][}]|This .*-related article is a .*stub'); newOption('popupImageVarsRegexp', 'image|image_(?:file|skyline|name|flag|seal)|cover|badge|logo'); } // ENDFILE: options.js // STARTFILE: strings.js //<NOLITE> ////////////////////////////////////////////////// // Translatable strings ////////////////////////////////////////////////// // // See instructions at // http://en.wikipedia.org/wiki/Wikipedia:Tools/Navigation_popups/Translation pg.string = { ///////////////////////////////////// // summary data, searching etc. ///////////////////////////////////// 'article': 'article', 'category': 'category', 'categories': 'categories', 'image': 'image', 'images': 'images', 'stub': 'stub', 'section stub': 'section stub', 'Empty page': 'Empty page', 'kB': 'kB', 'bytes': 'bytes', 'day': 'day', 'days': 'days', 'hour': 'hour', 'hours': 'hours', 'minute': 'minute', 'minutes': 'minutes', 'second': 'second', 'seconds': 'seconds', 'week': 'week', 'weeks': 'weeks', 'search': 'search', 'SearchHint': 'Find English Wikipedia articles containing %s', 'web': 'web', 'global': 'global', 'globalSearchHint': 'Search across Wikipedias in different languages for %s', 'googleSearchHint': 'Google for %s', ///////////////////////////////////// // article-related actions and info // (some actions also apply to user pages) ///////////////////////////////////// 'actions': 'actions', ///// view articles and view talk 'popupsMenu': 'popups', 'togglePreviewsHint': 'Toggle preview generation in popups on this page', 'enable previews': 'enable previews', 'disable previews': 'disable previews', 'toggle previews': 'toggle previews', 'show preview': 'show preview', 'reset': 'reset', 'more...': 'more...', 'disable': 'disable popups', 'disablePopupsHint': 'Disable popups on this page. Reload page to re-enable.', 'historyfeedHint': 'RSS feed of recent changes to this page', 'purgePopupsHint': 'Reset popups, clearing all cached popup data.', 'PopupsHint': 'Reset popups, clearing all cached popup data.', 'spacebar': 'space', 'view': 'view', 'view article': 'view article', 'viewHint': 'Go to %s', 'talk': 'talk', 'talk page': 'talk page', 'this&nbsp;revision': 'this&nbsp;revision', 'revision %s of %s': 'revision %s of %s', 'Revision %s of %s': 'Revision %s of %s', 'the revision prior to revision %s of %s': 'the revision prior to revision %s of %s', 'Toggle image size': 'Click to toggle image size', 'del': 'del', ///// delete, protect, move 'delete': 'delete', 'deleteHint': 'Delete %s', 'undeleteShort': 'un', 'UndeleteHint': 'Show the deletion history for %s', 'protect': 'protect', 'protectHint': 'Restrict editing rights to %s', 'unprotectShort': 'un', 'unprotectHint': 'Allow %s to be edited by anyone again', 'move': 'move', 'move page': 'move page', 'MovepageHint': 'Change the title of %s', 'edit': 'edit', ///// edit articles and talk 'edit article': 'edit article', 'editHint': 'Change the content of %s', 'edit talk': 'edit talk', 'new': 'new', 'new topic': 'new topic', 'newSectionHint': 'Start a new section on %s', 'null edit': 'null edit', 'nullEditHint': 'Submit an edit to %s, making no changes ', 'hist': 'hist', ///// history, diffs, editors, related 'history': 'history', 'historyHint': 'List the changes made to %s', 'last': 'last', 'lastEdit': 'lastEdit', 'mark patrolled': 'mark patrolled', 'markpatrolledHint': 'Mark this edit as patrolled', 'show last edit': 'most recent edit', 'Show the last edit': 'Show the effects of the most recent change', 'lastContrib': 'lastContrib', 'last set of edits': 'latest edits', 'lastContribHint': 'Show the net effect of changes made by the last editor', 'cur': 'cur', 'diffCur': 'diffCur', 'Show changes since revision %s': 'Show changes since revision %s', '%s old': '%s old', // as in 4 weeks old 'oldEdit': 'oldEdit', 'purge': 'purge', 'purgeHint': 'Demand a fresh copy of %s', 'raw': 'source', 'rawHint': 'Download the source of %s', 'render': 'simple', 'renderHint': 'Show a plain HTML version of %s', 'Show the edit made to get revision': 'Show the edit made to get revision', 'sinceMe': 'sinceMe', 'changes since mine': 'diff my edit', 'sinceMeHint': 'Show changes since my last edit', 'Couldn\'t find an edit by %s\nin the last %s edits to\n%s': 'Couldn\'t find an edit by %s\nin the last %s edits to\n%s', 'eds': 'eds', 'editors': 'editors', 'editorListHint': 'List the users who have edited %s', 'related': 'related', 'relatedChanges': 'relatedChanges', 'related changes': 'related changes', 'RecentchangeslinkedHint': 'Show changes in articles related to %s', 'editOld': 'editOld', ///// edit old version, or revert 'rv': 'rv', 'revert': 'revert', 'revertHint': 'Revert to %s', 'defaultpopupRedlinkSummary': 'Removing link to empty page [[%s]] using [[:en:Wikipedia:Tools/Navigation_popups|popups]]', 'defaultpopupFixDabsSummary': 'Disambiguate [[%s]] to [[%s]] using [[:en:Wikipedia:Tools/Navigation_popups|popups]]', 'defaultpopupFixRedirsSummary': 'Redirect bypass from [[%s]] to [[%s]] using [[:en:Wikipedia:Tools/Navigation_popups|popups]]', 'defaultpopupExtendedRevertSummary': 'Revert to revision dated %s by %s, oldid %s using [[:en:Wikipedia:Tools/Navigation_popups|popups]]', 'defaultpopupRevertToPreviousSummary': 'Revert to the revision prior to revision %s using [[:en:Wikipedia:Tools/Navigation_popups|popups]]', 'defaultpopupRevertSummary': 'Revert to revision %s using [[:en:Wikipedia:Tools/Navigation_popups|popups]]', 'defaultpopupQueriedRevertToPreviousSummary': 'Revert to the revision prior to revision $1 dated $2 by $3 using [[:en:Wikipedia:Tools/Navigation_popups|popups]]', 'defaultpopupQueriedRevertSummary': 'Revert to revision $1 dated $2 by $3 using [[:en:Wikipedia:Tools/Navigation_popups|popups]]', 'defaultpopupRmDabLinkSummary': 'Remove link to dab page [[%s]] using [[:en:Wikipedia:Tools/Navigation_popups|popups]]', 'Redirects': 'Redirects', // as in Redirects to ... ' to ': ' to ', // as in Redirects to ... 'Bypass redirect': 'Bypass redirect', 'Fix this redirect': 'Fix this redirect', 'disambig': 'disambig', ///// add or remove dab etc. 'disambigHint': 'Disambiguate this link to [[%s]]', 'Click to disambiguate this link to:': 'Click to disambiguate this link to:', 'remove this link': 'remove this link', 'remove all links to this page from this article': 'remove all links to this page from this article', 'remove all links to this disambig page from this article': 'remove all links to this disambig page from this article', 'mainlink': 'mainlink', ///// links, watch, unwatch 'wikiLink': 'wikiLink', 'wikiLinks': 'wikiLinks', 'links here': 'links here', 'whatLinksHere': 'whatLinksHere', 'what links here': 'what links here', 'WhatlinkshereHint': 'List the pages that are hyperlinked to %s', 'unwatchShort': 'un', 'watchThingy': 'watch', // called watchThingy because {}.watch is a function 'watchHint': 'Add %s to my watchlist', 'unwatchHint': 'Remove %s from my watchlist', 'Only found one editor: %s made %s edits': 'Only found one editor: %s made %s edits', '%s seems to be the last editor to the page %s': '%s seems to be the last editor to the page %s', 'rss': 'rss', ///////////////////////////////////// // diff previews ///////////////////////////////////// 'Diff truncated for performance reasons': 'Diff truncated for performance reasons', 'Old revision': 'Old revision', 'New revision': 'New revision', 'Something went wrong :-(': 'Something went wrong :-(', 'Empty revision, maybe non-existent': 'Empty revision, maybe non-existent', 'Unknown date': 'Unknown date', ///////////////////////////////////// // other special previews ///////////////////////////////////// 'Empty category': 'Empty category', 'Category members (%s shown)': 'Category members (%s shown)', 'No image links found': 'No image links found', 'File links': 'File links', 'No image found': 'No image found', 'Image from Commons': 'Image from Commons', 'Description page': 'Description page', ///////////////////////////////////// // user-related actions and info ///////////////////////////////////// 'user': 'user', ///// user page, talk, email, space 'user&nbsp;page': 'user&nbsp;page', 'user talk': 'user talk', 'edit user talk': 'edit user talk', 'leave comment': 'leave comment', 'email': 'email', 'email user': 'email user', 'EmailuserHint': 'Send an email to %s', 'space': 'space', // short form for userSpace link 'PrefixIndexHint': 'Show pages in the userspace of %s', 'count': 'count', ///// contributions, log 'edit counter': 'edit counter', 'editCounterLinkHint': 'Count the contributions made by %s', 'contribs': 'contribs', 'contributions': 'contributions', 'deletedContribs': 'deleted contributions', 'DeletedcontributionsHint': 'List deleted edits made by %s', 'ContributionsHint': 'List the contributions made by %s', 'log': 'log', 'user log': 'user log', 'userLogHint': 'Show %s\'s user log', 'arin': 'ARIN lookup', ///// ARIN lookup, block user or IP 'Look up %s in ARIN whois database': 'Look up %s in the ARIN whois database', 'unblockShort': 'un', 'block': 'block', 'block user': 'block user', 'IpblocklistHint': 'Unblock %s', 'BlockipHint': 'Prevent %s from editing', 'block log': 'block log', 'blockLogHint': 'Show the block log for %s', 'protectLogHint': 'Show the protection log for %s', 'pageLogHint': 'Show the page log for %s', 'deleteLogHint': 'Show the deletion log for %s', 'Invalid %s %s': 'The option %s is invalid: %s', 'No backlinks found': 'No backlinks found', ' and more': ' and more', 'undo': 'undo', 'undoHint': 'undo this edit', 'Download preview data': 'Download preview data', 'Invalid or IP user': 'Invalid or IP user', 'Not a registered username': 'Not a registered username', 'BLOCKED': 'BLOCKED', ' edits since: ': ' edits since: ', ///////////////////////////////////// // Autoediting ///////////////////////////////////// 'Enter a non-empty edit summary or press cancel to abort': 'Enter a non-empty edit summary or press cancel to abort', 'Failed to get revision information, please edit manually.\n\n': 'Failed to get revision information, please edit manually.\n\n', 'The %s button has been automatically clicked. Please wait for the next page to load.': 'The %s button has been automatically clicked. Please wait for the next page to load.', 'Could not find button %s. Please check the settings in your javascript file.': 'Could not find button %s. Please check the settings in your javascript file.', ///////////////////////////////////// // Popups setup ///////////////////////////////////// 'Open full-size image': 'Open full-size image', 'zxy': 'zxy' }; function popupString(str) { if (typeof popupStrings != 'undefined' && popupStrings && popupStrings[str]) { return popupStrings[str]; } if (pg.string[str]) { return pg.string[str]; } return str; } function tprintf(str,subs) { if (typeof subs != typeof []) { subs = [subs]; } return simplePrintf(popupString(str), subs); } //</NOLITE> // ENDFILE: strings.js //////////////////////////////////////////////////////////////////// // Run things //////////////////////////////////////////////////////////////////// hookEvent('load', setupPopups); addOnloadHook(autoEdit); //support for MediaWiki's live preview addOnloadHook( function() { if(typeof doLivePreview != "function" || typeof $j != "function") return; $j("#wpPreview").click(function(){ var i = setInterval(function(){ var p = document.getElementById("wikiPreview"); if(p.previousSibling.className == "mw-ajax-loader") return; p.ranSetupTooltipsAlready = false; setupTooltips(p); clearInterval(i); }, 500); }); }); l9ko3do7x5pq35l3skhk74ipkacg8oz 14876 14875 2012-01-20T23:13:52Z Hoo man 668 Bot: Security fix: [[WMFblog:2011/10/03/native-https-support-enabled-for-all-wikimedia-foundation-wikis/|protocol-relative URLs]] per https://meta.wikimedia.org/?oldid=3197161 ([[m:Stewards' noticeboard|questions?]]). 14876 javascript text/javascript var popupVersion="en:MediaWiki:Gadget-popups.js " + /*/{{subst:Selfsubst/now string|js|/*/ "2010-08-30 16:11:49 (UTC)" /*/}}/*/; // STARTFILE: main.js // ********************************************************************** // ** ** // ** changes to this file affect many users. ** // ** please discuss on the talk page before editing ** // ** ** // ********************************************************************** // ** ** // ** if you do edit this file, be sure that your editor recognizes it ** // ** as utf8, or the weird and wonderful characters in the namespaces ** // ** below will be completely broken. You can check with the show ** // ** changes button before submitting the edit. ** // ** test: مدیا מיוחד Мэдыя ** // ** ** // ********************************************************************** ////////////////////////////////////////////////// // Globals // // Trying to shove as many of these as possible into the pg (popup globals) object function pg(){}; // dummy to stop errors window.pg = { re: {}, // regexps ns: {}, // namespaces string: {}, // translatable strings wiki: {}, // local site info misc: {}, // YUCK PHOOEY option: {}, // options, see newOption etc optionDefault: {}, // default option values flag: {}, // misc flags cache: {}, // page and image cache structures: {}, // navlink structures timer: {}, // all sorts of timers (too damn many) counter: {}, // .. and all sorts of counters current: {}, // state info endoflist: null }; window.pop = { // wrap various functions in here init: {}, util: {}, endoflist: null }; function popupsReady() { if (!window.pg) { return false; } if (!pg.flag) { return false; } if (!pg.flag.finishedLoading) { return false; } return true; } /// Local Variables: /// /// mode:c /// /// End: /// // ENDFILE: main.js // STARTFILE: actions.js function setupTooltips(container, remove, force, popData) { log('setupTooltips, container='+container+', remove='+remove); if (!container) { //<NOLITE> // the main initial call if (getValueOf('popupOnEditSelection') && window.doSelectionPopup && document && document.editform && document.editform.wpTextbox1) { document.editform.wpTextbox1.onmouseup=doSelectionPopup; } //</NOLITE> // article/content is a structure-dependent thing container = defaultPopupsContainer(); } if (!remove && !force && container.ranSetupTooltipsAlready) { return; } container.ranSetupTooltipsAlready = !remove; var anchors; anchors=container.getElementsByTagName('A'); setupTooltipsLoop(anchors, 0, 250, 100, remove, popData); } function defaultPopupsContainer() { if (getValueOf('popupOnlyArticleLinks')) { return document.getElementById('article') || document.getElementById('content') || document.getElementById('mw_content') || document; } return document; } function setupTooltipsLoop(anchors,begin,howmany,sleep, remove, popData) { log(simplePrintf('setupTooltipsLoop(%s,%s,%s,%s,%s)', arguments)); var finish=begin+howmany; var loopend = min(finish, anchors.length); var j=loopend - begin; log ('setupTooltips: anchors.length=' + anchors.length + ', begin=' + begin + ', howmany=' + howmany + ', loopend=' + loopend + ', remove=' + remove); var doTooltip= remove ? removeTooltip : addTooltip; // try a faster (?) loop construct if (j > 0) { do { var a=anchors[loopend - j]; if (!a || !a.href) { log('got null anchor at index ' + loopend - j); continue; } doTooltip(a, popData); } while (--j); } if (finish < anchors.length) { setTimeout(function() { setupTooltipsLoop(anchors,finish,howmany,sleep,remove,popData);}, sleep); } else { if ( !remove && ! getValueOf('popupTocLinks')) { rmTocTooltips(); } pg.flag.finishedLoading=true; } } // eliminate popups from the TOC // This also kills any onclick stuff that used to be going on in the toc function rmTocTooltips() { var toc=document.getElementById('toc'); if (toc) { var tocLinks=toc.getElementsByTagName('A'); var tocLen = tocLinks.length; for (j=0; j<tocLen; ++j) { removeTooltip(tocLinks[j], true); } } } function addTooltip(a, popData) { if ( !isPopupLink(a) ) { return; } a.onmouseover=mouseOverWikiLink; a.onmouseout= mouseOutWikiLink; a.onmousedown = killPopup; a.hasPopup = true; a.popData = popData; } function removeTooltip(a) { if ( !a.hasPopup ) { return; } a.onmouseover = null; a.onmouseout = null; if (a.originalTitle) { a.title = a.originalTitle; } a.hasPopup=false; } function removeTitle(a) { if (a.originalTitle) { return; } a.originalTitle=a.title; a.title=''; } function restoreTitle(a) { if ( a.title || !a.originalTitle ) { return; } a.title = a.originalTitle; a.originalTitle=''; } function registerHooks(np) { var popupMaxWidth=getValueOf('popupMaxWidth'); if (typeof popupMaxWidth == 'number') { var setMaxWidth = function () { np.mainDiv.style.maxWidth = popupMaxWidth + 'px'; np.maxWidth = popupMaxWidth; try { // hack for IE // see http://www.svendtofte.com/code/max_width_in_ie/ // use setExpression as documented here on msdn: http://tinyurl dot com/dqljn if (np.mainDiv.style.setExpression) { np.mainDiv.style.setExpression( 'width', 'document.body.clientWidth > ' + popupMaxWidth + ' ? "' +popupMaxWidth + 'px": "auto"'); } } catch (errors) { errlog( "Running on IE8 are we not?: " + errors ); } }; np.addHook(setMaxWidth, 'unhide', 'before'); } //<NOLITE> if (window.addPopupShortcuts && window.rmPopupShortcuts) { np.addHook(addPopupShortcuts, 'unhide', 'after'); np.addHook(rmPopupShortcuts, 'hide', 'before'); } //</NOLITE> } function mouseOverWikiLink(evt) { if (!window.popupsReady || !window.popupsReady()) { return; } if (!evt && window.event) {evt=window.event}; return mouseOverWikiLink2(this, evt); } function footnoteTarget(a) { var aTitle=Title.fromAnchor(a); // We want ".3A" rather than "%3A" or "?" here, so use the anchor property directly var anch = aTitle.anchor; if ( ! /^(cite_note-|_note-|endnote)/.test(anch) ) { return false; } var lTitle=Title.fromURL(location.href); if ( lTitle.toString(true) != aTitle.toString(true) ) { return false; } var el=document.getElementById(anch); while ( el && typeof el.nodeName == 'string') { var nt = el.nodeName.toLowerCase(); if ( nt == 'li' ) { return el; } else if ( nt == 'body' ) { return false; } else if ( el.parentNode ) { el=el.parentNode; } else { return false; } } return false; } function footnotePreview(x, navpop) { setPopupHTML('<hr>' + x.innerHTML, 'popupPreview', navpop.idNumber, getValueOf('popupSubpopups') ? function() { setupTooltips(document.getElementById('popupPreview' + navpop.idNumber)); } : null); } // var modid=0; // if(!window.opera) { window.opera={postError: console.log}; } function modifierKeyHandler(a) { return function(evt) { // opera.postError('modifierKeyHandler called' + (++modid)); // opera.postError(''+evt + modid); // for (var i in evt) { // opera.postError('' + modid + ' ' + i + ' ' + evt[i]); // } // opera.postError(''+evt.ctrlKey + modid); var mod=getValueOf('popupModifier'); if (!mod) { return true; } if (!evt && window.event) {evt=window.event}; // opera.postError('And now....'+modid); // opera.postError(''+evt+modid); // opera.postError(''+evt.ctrlKey+modid); var modPressed = modifierPressed(evt); var action = getValueOf('popupModifierAction'); // FIXME: probable bug - modifierPressed should be modPressed below? if ( action == 'disable' && modifierPressed ) { return true; } if ( action == 'enable' && !modifierPressed ) { return true; } mouseOverWikiLink2(a, evt); }; } function modifierPressed(evt) { var mod=getValueOf('popupModifier'); if (!mod) { return false; } if (!evt && window.event) {evt=window.event}; // opera.postError('And now....'+modid); // opera.postError(''+evt+modid); // opera.postError(''+evt.ctrlKey+modid); return ( evt && mod && evt[mod.toLowerCase() + 'Key'] ); } function dealWithModifier(a,evt) { if (!getValueOf('popupModifier')) { return false; } var action = getValueOf('popupModifierAction'); if ( action == 'enable' && !modifierPressed(evt) || action == 'disable' && modifierPressed(evt) ) { // if the modifier is needed and not pressed, listen for it until // we mouseout of this link. restoreTitle(a); var addHandler='addEventListener'; var rmHandler='removeEventListener'; var on=''; if (!document.addEventListener) { addHandler='attachEvent'; rmHandler='detachEvent'; on='on'; } if (!document[addHandler]) { // forget it return; } a.modifierKeyHandler=modifierKeyHandler(a); switch (action) { case 'enable': document[addHandler](on+'keydown', a.modifierKeyHandler, false); a[addHandler](on+'mouseout', function() { document[rmHandler](on+'keydown', a.modifierKeyHandler, false); }, true); break; case 'disable': document[addHandler](on+'keyup', a.modifierKeyHandler, false); } return true; } return false; } function mouseOverWikiLink2(a, evt) { if (dealWithModifier(a,evt)) { return; } if ( getValueOf('removeTitles') ) { removeTitle(a); } if ( a==pg.current.link && a.navpopup && a.navpopup.isVisible() ) { return; } pg.current.link=a; if (getValueOf('simplePopups') && pg.option.popupStructure===null) { // reset *default value* of popupStructure setDefault('popupStructure', 'original'); } var article=(new Title()).fromAnchor(a); // set global variable (ugh) to hold article (wikipage) pg.current.article = article; if (!a.navpopup) { // FIXME: this doesn't behave well if you mouse out of a popup // directly into a link with the same href if (pg.current.linksHash[a.href] && false) { a.navpopup = pg.current.linksHash[a.href]; } else { a.navpopup=newNavpopup(a, article); pg.current.linksHash[a.href] = a.navpopup; pg.current.links.push(a); } } if (a.navpopup.pending===null || a.navpopup.pending!==0) { // either fresh popups or those with unfinshed business are redone from scratch simplePopupContent(a, article); } a.navpopup.showSoonIfStable(a.navpopup.delay); getValueOf('popupInitialWidth'); clearInterval(pg.timer.checkPopupPosition); pg.timer.checkPopupPosition=setInterval(checkPopupPosition, 600); if(getValueOf('simplePopups')) { if (getValueOf('popupPreviewButton') && !a.simpleNoMore) { var d=document.createElement('div'); d.className='popupPreviewButtonDiv'; var s=document.createElement('span'); d.appendChild(s); s.className='popupPreviewButton'; s['on' + getValueOf('popupPreviewButtonEvent')] = function() { a.simpleNoMore=true; nonsimplePopupContent(a,article); } s.innerHTML=popupString('show preview'); setPopupHTML(d, 'popupPreview', a.navpopup.idNumber); } return; } if (a.navpopup.pending!==0 ) { nonsimplePopupContent(a, article); } } // simplePopupContent: the content that is shown even when simplePopups is true function simplePopupContent(a, article) { /* FIXME hack */ a.navpopup.hasPopupMenu=false; a.navpopup.setInnerHTML(popupHTML(a)); fillEmptySpans({navpopup:a.navpopup}); if (getValueOf('popupDraggable')) { var dragHandle = getValueOf('popupDragHandle') || null; if (dragHandle && dragHandle != 'all') { dragHandle += a.navpopup.idNumber; } setTimeout(function(){a.navpopup.makeDraggable(dragHandle);}, 150); } //<NOLITE> if (getValueOf('popupRedlinkRemoval') && a.className=='new') { setPopupHTML('<br>'+popupRedlinkHTML(article), 'popupRedlink', a.navpopup.idNumber); } //</NOLITE> } function debugData(navpopup) { if(getValueOf('popupDebugging') && navpopup.idNumber) { setPopupHTML('idNumber='+navpopup.idNumber + ', pending=' + navpopup.pending, 'popupError', navpopup.idNumber); } } function newNavpopup(a, article) { var navpopup = new Navpopup(); navpopup.fuzz=5; navpopup.delay=getValueOf('popupDelay')*1000; // increment global counter now navpopup.idNumber = ++pg.idNumber; navpopup.parentAnchor = a; navpopup.parentPopup = (a.popData && a.popData.owner); navpopup.article = article; registerHooks(navpopup); return navpopup; } function nonsimplePopupContent(a, article) { var diff=null, history=null; var params=parseParams(a.href); var oldid=(typeof params.oldid=='undefined' ? null : params.oldid); //<NOLITE> if(getValueOf('popupPreviewDiffs') && window.loadDiff) { diff=params.diff; } if(getValueOf('popupPreviewHistory')) { history=(params.action=='history'); } //</NOLITE> a.navpopup.pending=0; var x; if (x=footnoteTarget(a)) { footnotePreview(x, a.navpopup); //<NOLITE> } else if ( diff || diff === 0 ) { loadDiff(article, oldid, diff, a.navpopup); } else if ( history ) { loadAPIPreview('history', article, a.navpopup); } else if ( pg.re.contribs.test(a.href) ) { loadAPIPreview('contribs', article, a.navpopup); } else if ( pg.re.backlinks.test(a.href) ) { loadAPIPreview('backlinks', article, a.navpopup); } else if ( // FIXME should be able to get all preview combinations with options article.namespace()==pg.ns.image && ( getValueOf('imagePopupsForImages') || ! anchorContainsImage(a) ) ) { loadAPIPreview('imagepagepreview', article, a.navpopup); loadImage(article, a.navpopup); //</NOLITE> } else { if (article.namespace() == pg.ns.category && getValueOf('popupCategoryMembers')) { loadAPIPreview('category', article, a.navpopup); } else if ((article.namespace() == pg.ns.user || article.namespace() == pg.ns.usertalk) && getValueOf('popupUserInfo')) { loadAPIPreview('userinfo', article, a.navpopup); } startArticlePreview(article, oldid, a.navpopup); } } function pendingNavpopTask(navpop) { if (navpop && navpop.pending===null) { navpop.pending=0; } ++navpop.pending; debugData(navpop); } function completedNavpopTask(navpop) { if (navpop && navpop.pending) { --navpop.pending; } debugData(navpop); } function startArticlePreview(article, oldid, navpop) { navpop.redir=0; loadPreview(article, oldid, navpop); } function loadPreview(article, oldid, navpop) { pendingNavpopTask(navpop); if (!navpop.redir) { navpop.originalArticle=article; } if (!navpop.visible && getValueOf('popupLazyDownloads')) { var id=(navpop.redir) ? 'DOWNLOAD_PREVIEW_REDIR_HOOK' : 'DOWNLOAD_PREVIEW_HOOK'; navpop.addHook(function() { getWiki(article, insertPreview, oldid, navpop); return true; }, 'unhide', 'before', id); } else { getWiki(article, insertPreview, oldid, navpop); } } function loadPreviewFromRedir(redirMatch, navpop) { // redirMatch is a regex match var target = new Title().fromWikiText(redirMatch[2]); // overwrite (or add) anchor from original target // mediawiki does overwrite; eg [[User:Lupin/foo3#Done]] if ( navpop.article.anchor ) { target.anchor = navpop.article.anchor; } var trailingRubbish=redirMatch[4]; navpop.redir++; navpop.redirTarget=target; //<NOLITE> if (window.redirLink) { var warnRedir = redirLink(target, navpop.article); setPopupHTML(warnRedir, 'popupWarnRedir', navpop.idNumber); } //</NOLITE> navpop.article=target; fillEmptySpans({redir: true, redirTarget: target, navpopup:navpop}); return loadPreview(target, null, navpop); } function insertPreview(download) { if (!download.owner) { return; } var redirMatch = pg.re.redirect.exec(download.data); if (download.owner.redir===0 && redirMatch) { completedNavpopTask(download.owner); loadPreviewFromRedir(redirMatch, download.owner); return; } if (download.owner.visible || !getValueOf('popupLazyPreviews')) { insertPreviewNow(download); } else { var id=(download.owner.redir) ? 'PREVIEW_REDIR_HOOK' : 'PREVIEW_HOOK'; download.owner.addHook( function(){insertPreviewNow(download); return true;}, 'unhide', 'after', id ); } } function insertPreviewNow(download) { if (!download.owner) { return; } var wikiText=download.data; var navpop=download.owner; completedNavpopTask(navpop); var art=navpop.redirTarget || navpop.originalArticle; //<NOLITE> makeFixDabs(wikiText, navpop); if (getValueOf('popupSummaryData') && window.getPageInfo) { var info=getPageInfo(wikiText, download); setPopupTrailer(getPageInfo(wikiText, download), navpop.idNumber); } var imagePage=''; if (art.namespace()==pg.ns.image) { imagePage=art.toString(); } else { imagePage=getValidImageFromWikiText(wikiText); } if(imagePage) { loadImage(Title.fromWikiText(imagePage), navpop); } //</NOLITE> if (getValueOf('popupPreviews')) { insertArticlePreview(download, art, navpop); } } function insertArticlePreview(download, art, navpop) { if (download && typeof download.data == typeof ''){ if (art.namespace()==pg.ns.template && getValueOf('popupPreviewRawTemplates')) { // FIXME compare/consolidate with diff escaping code for wikitext var h='<hr><tt>' + download.data.entify().split('\\n').join('<br>\\n') + '</tt>'; setPopupHTML(h, 'popupPreview', navpop.idNumber); } else { var p=prepPreviewmaker(download.data, art, navpop); p.showPreview(); } } } function prepPreviewmaker(data, article, navpop) { // deal with tricksy anchors var d=anchorize(data, article.anchorString()); var urlBase=joinPath([pg.wiki.articlebase, article.urlString()]); var p=new Previewmaker(d, urlBase, navpop); return p; } // Try to imitate the way mediawiki generates HTML anchors from section titles function anchorize(d, anch) { if (!anch) { return d; } var anchRe=RegExp('=+\\s*' + literalizeRegex(anch).replace(/[_ ]/g, '[_ ]') + '\\s*=+'); var match=d.match(anchRe); if(match && match.length > 0 && match[0]) { return d.substring(d.indexOf(match[0])); } // now try to deal with == foo [[bar|baz]] boom == -> #foo_baz_boom var lines=d.split('\n'); for (var i=0; i<lines.length; ++i) { lines[i]=lines[i].replace(RegExp('[[]{2}([^|\\]]*?[|])?(.*?)[\\]]{2}', 'g'), '$2') .replace(/'''([^'])/g, '$1').replace(RegExp("''([^'])", 'g'), '$1'); if (lines[i].match(anchRe)) { return d.split('\n').slice(i).join('\n').replace(RegExp('^[^=]*'), ''); } } return d; } function killPopup() { if (getValueOf('popupShortcutKeys') && window.rmPopupShortcuts) { rmPopupShortcuts(); } if (!pg) { return; } pg.current.link && pg.current.link.navpopup && pg.current.link.navpopup.banish(); pg.current.link=null; abortAllDownloads(); if (pg.timer.checkPopupPosition !== null) { clearInterval(pg.timer.checkPopupPosition); pg.timer.checkPopupPosition=null; } return true; // preserve default action } // ENDFILE: actions.js // STARTFILE: domdrag.js /** @fileoverview The {@link Drag} object, which enables objects to be dragged around. <pre> ************************************************* dom-drag.js 09.25.2001 www.youngpup.net ************************************************** 10.28.2001 - fixed minor bug where events sometimes fired off the handle, not the root. ************************************************* Pared down, some hooks added by [[User:Lupin]] Copyright Aaron Boodman. Saying stupid things daily since March 2001. </pre> */ /** Creates a new Drag object. This is used to make various DOM elements draggable. @constructor */ function Drag () { /** Condition to determine whether or not to drag. This function should take one parameter, an Event. To disable this, set it to <code>null</code>. @type Function */ this.startCondition = null; /** Hook to be run when the drag finishes. This is passed the final coordinates of the dragged object (two integers, x and y). To disables this, set it to <code>null</code>. @type Function */ this.endHook = null; } /** Gets an event in a cross-browser manner. @param {Event} e @private */ Drag.prototype.fixE = function(e) { if (typeof e == 'undefined') { e = window.event; } if (typeof e.layerX == 'undefined') { e.layerX = e.offsetX; } if (typeof e.layerY == 'undefined') { e.layerY = e.offsetY; } return e; }; /** Initialises the Drag instance by telling it which object you want to be draggable, and what you want to drag it by. @param {DOMElement} o The "handle" by which <code>oRoot</code> is dragged. @param {DOMElement} oRoot The object which moves when <code>o</code> is dragged, or <code>o</code> if omitted. */ Drag.prototype.init = function(o, oRoot) { var dragObj = this; this.obj = o; o.onmousedown = function(e) { dragObj.start.apply( dragObj, [e]); }; o.dragging = false; o.popups_draggable = true; o.hmode = true; o.vmode = true; o.root = oRoot && oRoot !== null ? oRoot : o ; if (isNaN(parseInt(o.root.style.left, 10))) { o.root.style.left = "0px"; } if (isNaN(parseInt(o.root.style.top, 10))) { o.root.style.top = "0px"; } o.root.onthisStart = function(){}; o.root.onthisEnd = function(){}; o.root.onthis = function(){}; }; /** Starts the drag. @private @param {Event} e */ Drag.prototype.start = function(e) { var o = this.obj; // = this; e = this.fixE(e); if (this.startCondition && !this.startCondition(e)) { return; } var y = parseInt(o.vmode ? o.root.style.top : o.root.style.bottom, 10); var x = parseInt(o.hmode ? o.root.style.left : o.root.style.right, 10); o.root.onthisStart(x, y); o.lastMouseX = e.clientX; o.lastMouseY = e.clientY; var dragObj = this; o.onmousemoveDefault = document.onmousemove; o.dragging = true; document.onmousemove = function(e) { dragObj.drag.apply( dragObj, [e] ); }; document.onmouseup = function(e) { dragObj.end.apply( dragObj, [e] ); }; return false; }; /** Does the drag. @param {Event} e @private */ Drag.prototype.drag = function(e) { e = this.fixE(e); var o = this.obj; var ey = e.clientY; var ex = e.clientX; var y = parseInt(o.vmode ? o.root.style.top : o.root.style.bottom, 10); var x = parseInt(o.hmode ? o.root.style.left : o.root.style.right, 10 ); var nx, ny; nx = x + ((ex - o.lastMouseX) * (o.hmode ? 1 : -1)); ny = y + ((ey - o.lastMouseY) * (o.vmode ? 1 : -1)); this.obj.root.style[o.hmode ? "left" : "right"] = nx + "px"; this.obj.root.style[o.vmode ? "top" : "bottom"] = ny + "px"; this.obj.lastMouseX = ex; this.obj.lastMouseY = ey; this.obj.root.onthis(nx, ny); return false; }; /** Ends the drag. @private */ Drag.prototype.end = function() { document.onmousemove=this.obj.onmousemoveDefault; document.onmouseup = null; this.obj.dragging = false; if (this.endHook) { this.endHook( parseInt(this.obj.root.style[this.obj.hmode ? "left" : "right"], 10), parseInt(this.obj.root.style[this.obj.vmode ? "top" : "bottom"], 10)); } }; // ENDFILE: domdrag.js // STARTFILE: structures.js //<NOLITE> pg.structures.original={}; pg.structures.original.popupLayout=function () { return ['popupError', 'popupImage', 'popupTopLinks', 'popupTitle', 'popupData', 'popupOtherLinks', 'popupRedir', ['popupWarnRedir', 'popupRedirTopLinks', 'popupRedirTitle', 'popupRedirData', 'popupRedirOtherLinks'], 'popupMiscTools', ['popupRedlink'], 'popupPrePreviewSep', 'popupPreview', 'popupSecondPreview', 'popupPreviewMore', 'popupPostPreview', 'popupFixDab']; }; pg.structures.original.popupRedirSpans=function () { return ['popupRedir', 'popupWarnRedir', 'popupRedirTopLinks', 'popupRedirTitle', 'popupRedirData', 'popupRedirOtherLinks']; }; pg.structures.original.popupTitle=function (x) { log ('defaultstructure.popupTitle'); if (!getValueOf('popupNavLinks')) { return navlinkStringToHTML('<b><<mainlink>></b>',x.article,x.params); } return ''; }; pg.structures.original.popupTopLinks=function (x) { log ('defaultstructure.popupTopLinks'); if (getValueOf('popupNavLinks')) { return navLinksHTML(x.article, x.hint, x.params); } return ''; }; pg.structures.original.popupImage=function(x) { log ('original.popupImage, x.article='+x.article+', x.navpop.idNumber='+x.navpop.idNumber); return imageHTML(x.article, x.navpop.idNumber); }; pg.structures.original.popupRedirTitle=pg.structures.original.popupTitle; pg.structures.original.popupRedirTopLinks=pg.structures.original.popupTopLinks; function copyStructure(oldStructure, newStructure) { pg.structures[newStructure]={}; for (var prop in pg.structures[oldStructure]) { pg.structures[newStructure][prop]=pg.structures[oldStructure][prop]; } } copyStructure('original', 'nostalgia'); pg.structures.nostalgia.popupTopLinks=function(x) { var str=''; str += '<b><<mainlink|shortcut= >></b>'; // user links // contribs - log - count - email - block // count only if applicable; block only if popupAdminLinks str += 'if(user){<br><<contribs|shortcut=c>>'; str+='if(wikimedia){*<<count|shortcut=#>>}'; str+='if(ipuser){}else{*<<email|shortcut=E>>}if(admin){*<<block|shortcut=b>>}}'; // editing links // talkpage -> edit|new - history - un|watch - article|edit // other page -> edit - history - un|watch - talk|edit|new var editstr='<<edit|shortcut=e>>'; var editOldidStr='if(oldid){<<editOld|shortcut=e>>|<<revert|shortcut=v|rv>>|<<edit|cur>>}else{' + editstr + '}' var historystr='<<history|shortcut=h>>'; var watchstr='<<unwatch|unwatchShort>>|<<watch|shortcut=w|watchThingy>>'; str+='<br>if(talk){' + editOldidStr+'|<<new|shortcut=+>>' + '*' + historystr+'*'+watchstr + '*' + '<b><<article|shortcut=a>></b>|<<editArticle|edit>>' + '}else{' + // not a talk page editOldidStr + '*' + historystr + '*' + watchstr + '*' + '<b><<talk|shortcut=t>></b>|<<editTalk|edit>>|<<newTalk|shortcut=+|new>>' + '}'; // misc links str += '<br><<whatLinksHere|shortcut=l>>*<<relatedChanges|shortcut=r>>'; str += 'if(admin){<br>}else{*}<<move|shortcut=m>>'; // admin links str += 'if(admin){*<<unprotect|unprotectShort>>|<<protect|shortcut=p>>*' + '<<undelete|undeleteShort>>|<<delete|shortcut=d>>}'; return navlinkStringToHTML(str, x.article, x.params); }; pg.structures.nostalgia.popupRedirTopLinks=pg.structures.nostalgia.popupTopLinks; /** -- fancy -- **/ copyStructure('original', 'fancy'); pg.structures.fancy.popupTitle=function (x) { return navlinkStringToHTML('<font size=+0><<mainlink>></font>',x.article,x.params); }; pg.structures.fancy.popupTopLinks=function(x) { var hist='<<history|shortcut=h|hist>>|<<lastEdit|shortcut=/|last>>if(mainspace_en){|<<editors|shortcut=E|eds>>}'; var watch='<<unwatch|unwatchShort>>|<<watch|shortcut=w|watchThingy>>'; var move='<<move|shortcut=m|move>>'; return navlinkStringToHTML('if(talk){' + '<<edit|shortcut=e>>|<<new|shortcut=+|+>>*' + hist + '*' + '<<article|shortcut=a>>|<<editArticle|edit>>' + '*' + watch + '*' + move + '}else{<<edit|shortcut=e>>*' + hist + '*<<talk|shortcut=t|>>|<<editTalk|edit>>|<<newTalk|shortcut=+|new>>' + '*' + watch + '*' + move+'}<br>', x.article, x.params); }; pg.structures.fancy.popupOtherLinks=function(x) { var admin='<<unprotect|unprotectShort>>|<<protect|shortcut=p>>*<<undelete|undeleteShort>>|<<delete|shortcut=d|del>>'; var user='<<contribs|shortcut=c>>if(wikimedia){|<<count|shortcut=#|#>>}'; user+='if(ipuser){|<<arin>>}else{*<<email|shortcut=E|'+ popupString('email')+'>>}if(admin){*<<block|shortcut=b>>}'; var normal='<<whatLinksHere|shortcut=l|links here>>*<<relatedChanges|shortcut=r|related>>'; return navlinkStringToHTML('<br>if(user){' + user + '*}if(admin){'+admin+'if(user){<br>}else{*}}' + normal, x.article, x.params); }; pg.structures.fancy.popupRedirTitle=pg.structures.fancy.popupTitle; pg.structures.fancy.popupRedirTopLinks=pg.structures.fancy.popupTopLinks; pg.structures.fancy.popupRedirOtherLinks=pg.structures.fancy.popupOtherLinks; /** -- fancy2 -- **/ // hack for [[User:MacGyverMagic]] copyStructure('fancy', 'fancy2'); pg.structures.fancy2.popupTopLinks=function(x) { // hack out the <br> at the end and put one at the beginning return '<br>'+pg.structures.fancy.popupTopLinks(x).replace(RegExp('<br>$','i'),''); }; pg.structures.fancy2.popupLayout=function () { // move toplinks to after the title return ['popupError', 'popupImage', 'popupTitle', 'popupData', 'popupTopLinks', 'popupOtherLinks', 'popupRedir', ['popupWarnRedir', 'popupRedirTopLinks', 'popupRedirTitle', 'popupRedirData', 'popupRedirOtherLinks'], 'popupMiscTools', ['popupRedlink'], 'popupPrePreviewSep', 'popupPreview', 'popupSecondPreview', 'popupPreviewMore', 'popupPostPreview', 'popupFixDab']; }; /** -- menus -- **/ copyStructure('original', 'menus'); pg.structures.menus.popupLayout=function () { return ['popupError', 'popupImage', 'popupTopLinks', 'popupTitle', 'popupOtherLinks', 'popupRedir', ['popupWarnRedir', 'popupRedirTopLinks', 'popupRedirTitle', 'popupRedirData', 'popupRedirOtherLinks'], 'popupData', 'popupMiscTools', ['popupRedlink'], 'popupPrePreviewSep', 'popupPreview', 'popupSecondPreview', 'popupPreviewMore', 'popupPostPreview', 'popupFixDab']; }; function toggleSticky(uid) { var popDiv=document.getElementById('navpopup_maindiv'+uid); if (!popDiv) { return; } if (!popDiv.navpopup.sticky) { popDiv.navpopup.stick(); } else { popDiv.navpopup.unstick(); popDiv.navpopup.hide(); } } pg.structures.menus.popupTopLinks = function (x, shorter) { // FIXME maybe this stuff should be cached var s=[]; var dropdiv='<div class="popup_drop">'; var enddiv='</div>'; var endspan='</span>'; var hist='<<history|shortcut=h>>'; if (!shorter) { hist = '<menurow>' + hist + '|<<historyfeed|rss>>if(mainspace_en){|<<editors|shortcut=E>>}</menurow>'; } var lastedit='<<lastEdit|shortcut=/|show last edit>>'; var jsHistory='<<lastContrib|last set of edits>><<sinceMe|changes since mine>>'; var linkshere='<<whatLinksHere|shortcut=l|what links here>>'; var related='<<relatedChanges|shortcut=r|related changes>>'; var search='<menurow><<search|shortcut=s>>if(wikimedia){|<<globalsearch|shortcut=g|global>>}' + '|<<google|shortcut=G|web>></menurow>'; var watch='<menurow><<unwatch|unwatchShort>>|<<watch|shortcut=w|watchThingy>></menurow>'; var protect='<menurow><<unprotect|unprotectShort>>|' + '<<protect|shortcut=p>>|<<protectlog|log>></menurow>'; var del='<menurow><<undelete|undeleteShort>>|<<delete|shortcut=d>>|' + '<<deletelog|log>></menurow>'; var move='<<move|shortcut=m|move page>>'; var nullPurge='<menurow><<nullEdit|shortcut=n|null edit>>|<<purge|shortcut=P>></menurow>'; var viewOptions='<menurow><<view|shortcut=v>>|<<render|shortcut=S>>|<<raw>></menurow>'; var editRow='if(oldid){' + '<menurow><<edit|shortcut=e>>|<<editOld|shortcut=e|this&nbsp;revision>></menurow>' + '<menurow><<revert|shortcut=v>>|<<undo>></menurow>' + '}else{<<edit|shortcut=e>>}'; var markPatrolled='if(rcid){<<markpatrolled|mark patrolled>>}'; var newTopic='if(talk){<<new|shortcut=+|new topic>>}'; var protectDelete='if(admin){' + protect + del + '}'; if (getValueOf('popupActionsMenu')) { s.push( '<<mainlink>>*' + dropdiv + menuTitle('actions')); } else { s.push( dropdiv + '<<mainlink>>'); } s.push( '<menu>') s.push( editRow + markPatrolled + newTopic + hist + lastedit ) if (!shorter) { s.push(jsHistory); } s.push( move + linkshere + related) if (!shorter) { s.push(nullPurge + search); } if (!shorter) { s.push(viewOptions); } s.push('<hr>' + watch + protectDelete); s.push('<hr>' + 'if(talk){<<article|shortcut=a|view article>><<editArticle|edit article>>}' + 'else{<<talk|shortcut=t|talk page>><<editTalk|edit talk>>' + '<<newTalk|shortcut=+|new topic>>}</menu>' + enddiv); // user menu starts here var email='<<email|shortcut=E|email user>>'; var contribs= 'if(wikimedia){<menurow>}<<contribs|shortcut=c|contributions>>if(wikimedia){</menurow>}' + 'if(admin){<menurow><<deletedContribs>></menurow>}'; s.push('if(user){*' + dropdiv + menuTitle('user')); s.push('<menu>'); + s.push('<menurow><<userPage|shortcut=u|user&nbsp;page>>|<<userSpace|space>></menurow>'); s.push('<<userTalk|shortcut=t|user talk>><<editUserTalk|edit user talk>>' + '<<newUserTalk|shortcut=+|leave comment>>'); if(!shorter) { s.push( 'if(ipuser){<<arin>>}else{' + email + '}') } else { s.push( 'if(ipuser){}else{' + email + '}') } s.push('<hr>' + contribs + '<<userlog|shortcut=L|user log>>'); s.push('if(wikimedia){<<count|shortcut=#|edit counter>>}'); s.push('if(admin){<menurow><<unblock|unblockShort>>|<<block|shortcut=b|block user>></menurow>}'); s.push('<<blocklog|shortcut=B|block log>>' + getValueOf('popupExtraUserMenu')); s.push('</menu>' + enddiv + '}'); // popups menu starts here if (getValueOf('popupSetupMenu') && !x.navpop.hasPopupMenu /* FIXME: hack */) { x.navpop.hasPopupMenu=true; s.push('*' + dropdiv + menuTitle('popupsMenu') + '<menu>'); s.push('<<togglePreviews|toggle previews>>'); s.push('<<purgePopups|reset>>'); s.push('<<disablePopups|disable>>'); s.push('</menu>'+enddiv); } return navlinkStringToHTML(s.join(''), x.article, x.params); }; function menuTitle(s) { return '<a href="#" noPopup=1>' + popupString(s) + '</a>'; } pg.structures.menus.popupRedirTitle=pg.structures.menus.popupTitle; pg.structures.menus.popupRedirTopLinks=pg.structures.menus.popupTopLinks; copyStructure('menus', 'shortmenus'); pg.structures.shortmenus.popupTopLinks=function(x) { return pg.structures.menus.popupTopLinks(x,true); }; pg.structures.shortmenus.popupRedirTopLinks=pg.structures.shortmenus.popupTopLinks; copyStructure('shortmenus', 'dabshortmenus'); pg.structures.dabshortmenus.popupLayout=function () { return ['popupError', 'popupImage', 'popupTopLinks', 'popupTitle', 'popupOtherLinks', 'popupRedir', ['popupWarnRedir', 'popupRedirTopLinks', 'popupRedirTitle', 'popupRedirData', 'popupRedirOtherLinks'], 'popupData', 'popupMiscTools', ['popupRedlink'], 'popupFixDab', 'popupPrePreviewSep', 'popupPreview', 'popupSecondPreview', 'popupPreviewMore', 'popupPostPreview']; }; copyStructure('menus', 'dabmenus'); pg.structures.dabmenus.popupLayout=pg.structures.dabshortmenus.popupLayout; //</NOLITE> pg.structures.lite={}; pg.structures.lite.popupLayout=function () { return ['popupTitle', 'popupPreview' ]; }; pg.structures.lite.popupTitle=function (x) { log (x.article + ': structures.lite.popupTitle'); //return navlinkStringToHTML('<b><<mainlink>></b>',x.article,x.params); return '<div><span class="popup_mainlink"><b>' + x.article.toString() + '</b></span></div>'; }; // ENDFILE: structures.js // STARTFILE: autoedit.js //<NOLITE> function getParamValue(paramName, h) { if (typeof h == 'undefined' ) { h = document.location.href; } var cmdRe=RegExp('[&?]'+paramName+'=([^&]*)'); var m=cmdRe.exec(h); if (m) { try { return decodeURIComponent(m[1]); } catch (someError) {} } return null; } function substitute(data,cmdBody) { // alert('sub\nfrom: '+cmdBody.from+'\nto: '+cmdBody.to+'\nflags: '+cmdBody.flags); var fromRe=RegExp(cmdBody.from, cmdBody.flags); return data.replace(fromRe, cmdBody.to); } function execCmds(data, cmdList) { for (var i=0; i<cmdList.length; ++i) { data=cmdList[i].action(data, cmdList[i]); } return data; } function parseCmd(str) { // returns a list of commands if (!str.length) { return []; } var p=false; switch (str.charAt(0)) { case 's': p=parseSubstitute(str); break; default: return false; } if (p) { return [p].concat(parseCmd(p.remainder)); } return false; } function unEscape(str, sep) { return str.split('\\\\').join('\\').split('\\'+sep).join(sep).split('\\n').join('\n'); } function parseSubstitute(str) { // takes a string like s/a/b/flags;othercmds and parses it var from,to,flags,tmp; if (str.length<4) { return false; } var sep=str.charAt(1); str=str.substring(2); tmp=skipOver(str,sep); if (tmp) { from=tmp.segment; str=tmp.remainder; } else { return false; } tmp=skipOver(str,sep); if (tmp) { to=tmp.segment; str=tmp.remainder; } else { return false; } flags=''; if (str.length) { tmp=skipOver(str,';') || skipToEnd(str, ';'); if (tmp) {flags=tmp.segment; str=tmp.remainder; } } return {action: substitute, from: from, to: to, flags: flags, remainder: str}; } function skipOver(str,sep) { var endSegment=findNext(str,sep); if (endSegment<0) { return false; } var segment=unEscape(str.substring(0,endSegment), sep); return {segment: segment, remainder: str.substring(endSegment+1)}; } function skipToEnd(str,sep) { return {segment: str, remainder: ''}; } function findNext(str, ch) { for (var i=0; i<str.length; ++i) { if (str.charAt(i)=='\\') { i+=2; } if (str.charAt(i)==ch) { return i; } } return -1; } function setCheckbox(param, box) { var val=getParamValue(param); if (val!==null) { switch (val) { case '1': case 'yes': case 'true': box.checked=true; break; case '0': case 'no': case 'false': box.checked=false; } } } function autoEdit() { if (!setupPopups.completed) { setupPopups(); } if (!document.editform || !window.wgEnableAPI || !wgEnableAPI ) { return false; } if (window.autoEdit.alreadyRan) { return false; } window.autoEdit.alreadyRan=true; var cmdString=getParamValue('autoedit'); if (cmdString) { try { var editbox=document.editform.wpTextbox1; } catch (dang) { return; } var cmdList=parseCmd(cmdString); var input=editbox.value; var output=execCmds(input, cmdList); editbox.value=output; // wikEd user script compatibility if (typeof(wikEdUseWikEd) != 'undefined') { if (wikEdUseWikEd == true) { WikEdUpdateFrame(); } } } setCheckbox('autominor', document.editform.wpMinoredit); setCheckbox('autowatch', document.editform.wpWatchthis); var rvid = getParamValue('autorv'); if (rvid) { var url=pg.wiki.apiwikibase + '?action=query&format=json&prop=revisions&revids='+rvid; startDownload(url, null, autoEdit2); } else { autoEdit2(); } } function autoEdit2(d) { var summary=getParamValue('autosummary'); var summaryprompt=getParamValue('autosummaryprompt'); var summarynotice=''; if (d && d.data && getParamValue('autorv')) { var s = getRvSummary(summary, d.data); if (s===false) { summaryprompt=true; summarynotice=popupString('Failed to get revision information, please edit manually.\n\n'); summary = simplePrintf(summary, [getParamValue('autorv'), '(unknown)', '(unknown)']); } else { summary = s; } } if (summaryprompt) { var txt= summarynotice + popupString('Enter a non-empty edit summary or press cancel to abort'); var response=prompt(txt, summary); if (response) { summary=response; } else { return; } } if (summary) { document.editform.wpSummary.value=summary; } // Attempt to avoid possible premature clicking of the save button // (maybe delays in updates to the DOM are to blame?? or a red herring) setTimeout(autoEdit3, 100); } function autoClickToken() { return document.cookie.substr(document.cookie.indexOf("session=")+8,4); } function autoEdit3() { if( getParamValue('actoken') != autoClickToken()) return; var btn=getParamValue('autoclick'); if (btn) { if (document.editform && document.editform[btn]) { var button=document.editform[btn]; var msg=tprintf('The %s button has been automatically clicked. Please wait for the next page to load.', [ button.value ]); bannerMessage(msg); document.title='('+document.title+')'; button.click(); } else { alert(tprintf('Could not find button %s. Please check the settings in your javascript file.', [ btn ])); } } } function bannerMessage(s) { var headings=document.getElementsByTagName('h1'); if (headings) { var div=document.createElement('div'); div.innerHTML='<font size=+1><b>' + s + '</b></font>'; headings[0].parentNode.insertBefore(div, headings[0]); } } function getRvSummary(template, json) { try { var o=getJsObj(json); var edit = anyChild(o.query.pages).revisions[0]; } catch (badness) {return false;} var timestamp = edit.timestamp.split(/[A-Z]/g).join(' ').replace(/^ *| *$/g, ''); return simplePrintf(template, [edit.revid, timestamp, edit.user]); } //</NOLITE> // ENDFILE: autoedit.js // STARTFILE: downloader.js /** @fileoverview {@link Downloader}, a xmlhttprequest wrapper, and helper functions. */ /** Creates a new Downloader @constructor @class The Downloader class. Create a new instance of this class to download stuff. @param {String} url The url to download. This can be omitted and supplied later. */ function Downloader(url) { // Source: http://jibbering.com/2002/4/httprequest.html /** xmlhttprequest object which we're wrapping */ this.http = false; /*@cc_on @*/ /*@if (@_jscript_version >= 5) // JScript gives us Conditional compilation, // we can cope with old IE versions. // and security blocked creation of the objects. try { this.http = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { this.http = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { // this.http = false; } } @end @*/ if (! this.http && typeof XMLHttpRequest!='undefined') { this.http = new XMLHttpRequest(); } /** The url to download @type String */ this.url = url; /** A universally unique ID number @type integer */ this.id=null; /** Modification date, to be culled from the incoming headers @type Date @private */ this.lastModified = null; /** What to do when the download completes successfully @type Function @private */ this.callbackFunction = null; /** What to do on failure @type Function @private */ this.onFailure = null; /** Flag set on <code>abort</code> @type boolean */ this.aborted = false; /** HTTP method. See http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html for possibilities. @type String */ this.method='GET'; /** Async flag. @type boolean */ this.async=true; } new Downloader(); /** Submits the http request. */ Downloader.prototype.send = function (x) { if (!this.http) { return null; } return this.http.send(x); }; /** Aborts the download, setting the <code>aborted</code> field to true. */ Downloader.prototype.abort = function () { if (!this.http) { return null; } this.aborted=true; return this.http.abort(); }; /** Returns the downloaded data. */ Downloader.prototype.getData = function () {if (!this.http) { return null; } return this.http.responseText;}; /** Prepares the download. */ Downloader.prototype.setTarget = function () { if (!this.http) { return null; } this.http.open(this.method, this.url, this.async); }; /** Gets the state of the download. */ Downloader.prototype.getReadyState=function () {if (!this.http) { return null; } return this.http.readyState;}; pg.misc.downloadsInProgress = { }; /** Starts the download. Note that setTarget {@link Downloader#setTarget} must be run first */ Downloader.prototype.start=function () { if (!this.http) { return; } pg.misc.downloadsInProgress[this.id] = this; this.http.send(null); }; /** Gets the 'Last-Modified' date from the download headers. Should be run after the download completes. Returns <code>null</code> on failure. @return {Date} */ Downloader.prototype.getLastModifiedDate=function () { if(!this.http) { return null; } var lastmod=null; try { lastmod=this.http.getResponseHeader('Last-Modified'); } catch (err) {} if (lastmod) { return new Date(lastmod); } return null; }; /** Sets the callback function. @param {Function} f callback function, called as <code>f(this)</code> on success */ Downloader.prototype.setCallback = function (f) { if(!this.http) { return; } this.http.onreadystatechange = f; }; Downloader.prototype.getStatus = function() { if (!this.http) { return null; } return this.http.status; }; ////////////////////////////////////////////////// // helper functions /** Creates a new {@link Downloader} and prepares it for action. @param {String} url The url to download @param {integer} id The ID of the {@link Downloader} object @param {Function} callback The callback function invoked on success @return {String/Downloader} the {@link Downloader} object created, or 'ohdear' if an unsupported browser */ function newDownload(url, id, callback, onfailure) { var d=new Downloader(url); if (!d.http) { return 'ohdear'; } d.id=id; d.setTarget(); if (!onfailure) { onfailure=2; } var f = function () { if (d.getReadyState() == 4) { delete pg.misc.downloadsInProgress[this.id]; try { if ( d.getStatus() == 200 ) { d.data=d.getData(); d.lastModified=d.getLastModifiedDate(); callback(d); } else if (typeof onfailure == typeof 1) { if (onfailure > 0) { // retry newDownload(url, id, callback, onfailure - 1); } } else if (typeof onfailure == 'function') { onfailure(d,url,id,callback); } } catch (somerr) { /* ignore it */ } } }; d.setCallback(f); return d; } /** Simulates a download from cached data. The supplied data is put into a {@link Downloader} as if it had downloaded it. @param {String} url The url. @param {integer} id The ID. @param {Function} callback The callback, which is invoked immediately as <code>callback(d)</code>, where <code>d</code> is the new {@link Downloader}. @param {String} data The (cached) data. @param {Date} lastModified The (cached) last modified date. */ function fakeDownload(url, id, callback, data, lastModified, owner) { var d=newDownload(url,callback); d.owner=owner; d.id=id; d.data=data; d.lastModified=lastModified; return callback(d); } /** Starts a download. @param {String} url The url to download @param {integer} id The ID of the {@link Downloader} object @param {Function} callback The callback function invoked on success @return {String/Downloader} the {@link Downloader} object created, or 'ohdear' if an unsupported browser */ function startDownload(url, id, callback) { var d=newDownload(url, id, callback); if (typeof d == typeof '' ) { return d; } d.start(); return d; } /** Aborts all downloads which have been started. */ function abortAllDownloads() { for ( var x in pg.misc.downloadsInProgress ) { try { pg.misc.downloadsInProgress[x].aborted=true; pg.misc.downloadsInProgress[x].abort(); delete pg.misc.downloadsInProgress[x]; } catch (e) { } } } // ENDFILE: downloader.js // STARTFILE: livepreview.js // TODO: location is often not correct (eg relative links in previews) /** * InstaView - a Mediawiki to HTML converter in JavaScript * Version 0.6.1 * Copyright (C) Pedro Fayolle 2005-2006 * //en.wikipedia.org/wiki/User:Pilaf * Distributed under the BSD license * * Changelog: * * 0.6.1 * - Fixed problem caused by \r characters * - Improved inline formatting parser * * 0.6 * - Changed name to InstaView * - Some major code reorganizations and factored out some common functions * - Handled conversion of relative links (i.e. [[/foo]]) * - Fixed misrendering of adjacent definition list items * - Fixed bug in table headings handling * - Changed date format in signatures to reflect Mediawiki's * - Fixed handling of [[:Image:...]] * - Updated MD5 function (hopefully it will work with UTF-8) * - Fixed bug in handling of links inside images * * To do: * - Better support for <math> * - Full support for <nowiki> * - Parser-based (as opposed to RegExp-based) inline wikicode handling (make it one-pass and bullet-proof) * - Support for templates (through AJAX) * - Support for coloured links (AJAX) */ var Insta = {} function setupLivePreview() { // options Insta.conf = { baseUrl: '', user: {}, wiki: { lang: pg.wiki.lang, interwiki: pg.wiki.interwiki, default_thumb_width: 180 }, paths: { articles: pg.wiki.articlePath + '/', // Only used for Insta previews with images. (not in popups) math: '/math/', images: '//upload.wikimedia.org/wikipedia/en/', // FIXME ( window.getImageUrlStart ? getImageUrlStart(pg.wiki.hostname) : ''), images_fallback: '//upload.wikimedia.org/wikipedia/commons/', magnify_icon: 'skins/common/images/magnify-clip.png' }, locale: { user: pg.ns.user, image: pg.ns.image, category: pg.ns.category, // shouldn't be used in popup previews, i think months: ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'] } } // options with default values or backreferences with (Insta.conf) { user.name = user.name || 'Wikipedian' user.signature = '[['+locale.user+':'+user.name+'|'+user.name+']]' //paths.images = '//upload.wikimedia.org/wikipedia/' + wiki.lang + '/' } // define constants Insta.BLOCK_IMAGE = new RegExp('^\\[\\[(?:File|Image|'+Insta.conf.locale.image+ '):.*?\\|.*?(?:frame|thumbnail|thumb|none|right|left|center)', 'i'); } Insta.dump = function(from, to) { if (typeof from == 'string') from = document.getElementById(from) if (typeof to == 'string') to = document.getElementById(to) to.innerHTML = this.convert(from.value) } Insta.convert = function(wiki) { var ll = (typeof wiki == 'string')? wiki.replace(/\r/g,'').split(/\n/): wiki, // lines of wikicode o='', // output p=0, // para flag $r // result of passing a regexp to $() // some shorthands function remain() { return ll.length } function sh() { return ll.shift() } // shift function ps(s) { o+=s } // push function f() // similar to C's printf, uses ? as placeholders, ?? to escape question marks { var i=1,a=arguments,f=a[0],o='',c,p for (;i<a.length; i++) if ((p=f.indexOf('?'))+1) { // allow character escaping i -= c=f.charAt(p+1)=='?'?1:0 o += f.substring(0,p)+(c?'?':a[i]) f=f.substr(p+1+c) } else break; return o+f } function html_entities(s) { return s.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;") } function max(a,b) { return (a>b)?a:b } function min(a,b) { return (a<b)?a:b } // return the first non matching character position between two strings function str_imatch(a, b) { for (var i=0, l=min(a.length, b.length); i<l; i++) if (a.charAt(i)!=b.charAt(i)) break return i } // compare current line against a string or regexp // if passed a string it will compare only the first string.length characters // if passed a regexp the result is stored in $r function $(c) { return (typeof c == 'string') ? (ll[0].substr(0,c.length)==c) : ($r = ll[0].match(c)) } function $$(c) { return ll[0]==c } // compare current line against a string function _(p) { return ll[0].charAt(p) } // return char at pos p function endl(s) { ps(s); sh() } function parse_list() { var prev=''; while (remain() && $(/^([*#:;]+)(.*)$/)) { var l_match = $r sh() var ipos = str_imatch(prev, l_match[1]) // close uncontinued lists for (var i=prev.length-1; i >= ipos; i--) { var pi = prev.charAt(i) if (pi=='*') ps('</ul>') else if (pi=='#') ps('</ol>') // close a dl only if the new item is not a dl item (:, ; or empty) else switch (l_match[1].charAt(i)) { case'':case'*':case'#': ps('</dl>') } } // open new lists for (var i=ipos; i<l_match[1].length; i++) { var li = l_match[1].charAt(i) if (li=='*') ps('<ul>') else if (li=='#') ps('<ol>') // open a new dl only if the prev item is not a dl item (:, ; or empty) else switch(prev.charAt(i)) { case'':case'*':case'#': ps('<dl>') } } switch (l_match[1].charAt(l_match[1].length-1)) { case '*': case '#': ps('<li>' + parse_inline_nowiki(l_match[2])); break case ';': ps('<dt>') var dt_match // handle ;dt :dd format if (dt_match = l_match[2].match(/(.*?)(:.*?)$/)) { ps(parse_inline_nowiki(dt_match[1])) ll.unshift(dt_match[2]) } else ps(parse_inline_nowiki(l_match[2])) break case ':': ps('<dd>' + parse_inline_nowiki(l_match[2])) } prev=l_match[1] } // close remaining lists for (var i=prev.length-1; i>=0; i--) ps(f('</?>', (prev.charAt(i)=='*')? 'ul': ((prev.charAt(i)=='#')? 'ol': 'dl'))) } function parse_table() { endl(f('<table?>', $(/^\{\|( .*)$/)? $r[1]: '')) for (;remain();) if ($('|')) switch (_(1)) { case '}': endl('</table>'); return case '-': endl(f('<tr ?>', $(/\|-*(.*)/)[1])); break default: parse_table_data() } else if ($('!')) parse_table_data() else sh() } function parse_table_data() { var td_line, match_i // 1: "|+", '|' or '+' // 2: ?? // 3: attributes ?? // TODO: finish commenting this regexp var td_match = sh().match(/^(\|\+|\||!)((?:([^[|]*?)\|(?!\|))?(.*))$/) if (td_match[1] == '|+') ps('<caption'); else ps('<t' + ((td_match[1]=='|')?'d':'h')) if (typeof td_match[3] != 'undefined') { ps(' ' + td_match[3]) match_i = 4 } else match_i = 2 ps('>') if (td_match[1] != '|+') { // use || or !! as a cell separator depending on context // NOTE: when split() is passed a regexp make sure to use non-capturing brackets td_line = td_match[match_i].split((td_match[1] == '|')? '||': /(?:\|\||!!)/) ps(parse_inline_nowiki(td_line.shift())) while (td_line.length) ll.unshift(td_match[1] + td_line.pop()) } else ps(td_match[match_i]) var tc = 0, td = [] for (;remain(); td.push(sh())) if ($('|')) { if (!tc) break // we're at the outer-most level (no nested tables), skip to td parse else if (_(1)=='}') tc-- } else if (!tc && $('!')) break else if ($('{|')) tc++ if (td.length) ps(Insta.convert(td)) } function parse_pre() { ps('<pre>') do endl(parse_inline_nowiki(ll[0].substring(1)) + "\n"); while (remain() && $(' ')) ps('</pre>') } function parse_block_image() { ps(parse_image(sh())) } function parse_image(str) { //<NOLITE> // get what's in between "[[Image:" and "]]" var tag = str.substring(str.indexOf(':') + 1, str.length - 2); var width; var attr = [], filename, caption = ''; var thumb=0, frame=0, center=0; var align=''; if (tag.match(/\|/)) { // manage nested links var nesting = 0; var last_attr; for (var i = tag.length-1; i > 0; i--) { if (tag.charAt(i) == '|' && !nesting) { last_attr = tag.substr(i+1); tag = tag.substring(0, i); break; } else switch (tag.substr(i-1, 2)) { case ']]': nesting++; i--; break; case '[[': nesting--; i--; } } attr = tag.split(/\s*\|\s*/); attr.push(last_attr); filename = attr.shift(); var w_match; for (;attr.length; attr.shift()) if (w_match = attr[0].match(/^(\d*)(?:[px]*\d*)?px$/)) width = w_match[1] else switch(attr[0]) { case 'thumb': case 'thumbnail': thumb=true; case 'frame': frame=true; break; case 'none': case 'right': case 'left': center=false; align=attr[0]; break; case 'center': center=true; align='none'; break; default: if (attr.length == 1) caption = attr[0]; } } else filename = tag; var o=''; if (frame) { if (align=='') align = 'right'; o += f("<div class='thumb t?'>", align); if (thumb) { if (!width) width = Insta.conf.wiki.default_thumb_width; o += f("<div style='width:?px;'>?", 2+width*1, make_image(filename, caption, width)) + f("<div class='thumbcaption'><div class='magnify' style='float:right'><a href='?' class='internal' title='Enlarge'><img src='?'></a></div>?</div>", Insta.conf.paths.articles + Insta.conf.locale.image + ':' + filename, Insta.conf.paths.magnify_icon, parse_inline_nowiki(caption) ) } else { o += '<div>' + make_image(filename, caption) + f("<div class='thumbcaption'>?</div>", parse_inline_nowiki(caption)) } o += '</div></div>'; } else if (align != '') { o += f("<div class='float?'><span>?</span></div>", align, make_image(filename, caption, width)); } else { return make_image(filename, caption, width); } return center? f("<div class='center'>?</div>", o): o; //</NOLITE> } function parse_inline_nowiki(str) { var start, lastend=0 var substart=0, nestlev=0, open, close, subloop; var html=''; while (-1 != (start = str.indexOf('<nowiki>', substart))) { html += parse_inline_wiki(str.substring(lastend, start)); start += 8; substart = start; subloop = true; do { open = str.indexOf('<nowiki>', substart); close = str.indexOf('</nowiki>', substart); if (close<=open || open==-1) { if (close==-1) { return html + html_entities(str.substr(start)); } substart = close+9; if (nestlev) { nestlev--; } else { lastend = substart; html += html_entities(str.substring(start, lastend-9)); subloop = false; } } else { substart = open+8; nestlev++; } } while (subloop) } return html + parse_inline_wiki(str.substr(lastend)); } function make_image(filename, caption, width) { //<NOLITE> // uppercase first letter in file name filename = filename.charAt(0).toUpperCase() + filename.substr(1); // replace spaces with underscores filename = filename.replace(/ /g, '_'); caption = strip_inline_wiki(caption); var md5 = hex_md5(filename); var source = md5.charAt(0) + '/' + md5.substr(0,2) + '/' + filename; if (width) width = "width='" + width + "px'"; var img = f("<img onerror=\"this.onerror=null;this.src='?'\" src='?' ? ?>", Insta.conf.paths.images_fallback + source, Insta.conf.paths.images + source, (caption!='')? "alt='" + caption + "'" : '', width); return f("<a class='image' ? href='?'>?</a>", (caption!='')? "title='" + caption + "'" : '', Insta.conf.paths.articles + Insta.conf.locale.image + ':' + filename, img); //</NOLITE> } function parse_inline_images(str) { //<NOLITE> var start, substart=0, nestlev=0; var loop, close, open, wiki, html; while (-1 != (start=str.indexOf('[[', substart))) { if(str.substr(start+2).match(RegExp('^(Image|File|' + Insta.conf.locale.image + '):','i'))) { loop=true; substart=start; do { substart+=2; close=str.indexOf(']]',substart); open=str.indexOf('[[',substart); if (close<=open||open==-1) { if (close==-1) return str; substart=close; if (nestlev) { nestlev--; } else { wiki=str.substring(start,close+2); html=parse_image(wiki); str=str.replace(wiki,html); substart=start+html.length; loop=false; } } else { substart=open; nestlev++; } } while (loop) } else break; } //</NOLITE> return str; } // the output of this function doesn't respect the FILO structure of HTML // but since most browsers can handle it I'll save myself the hassle function parse_inline_formatting(str) { var em,st,i,li,o=''; while ((i=str.indexOf("''",li))+1) { o += str.substring(li,i); li=i+2; if (str.charAt(i+2)=="'") { li++; st=!st; o+=st?'<strong>':'</strong>'; } else { em=!em; o+=em?'<em>':'</em>'; } } return o+str.substr(li); } function parse_inline_wiki(str) { var aux_match; str = parse_inline_images(str); str = parse_inline_formatting(str); // math while (aux_match = str.match(/<(?:)math>(.*?)<\/math>/i)) { var math_md5 = hex_md5(aux_match[1]); str = str.replace(aux_match[0], f("<img src='?.png'>", Insta.conf.paths.math+math_md5)); } // Build a Mediawiki-formatted date string var date = new Date; var minutes = date.getUTCMinutes(); if (minutes < 10) minutes = '0' + minutes; var date = f("?:?, ? ? ? (UTC)", date.getUTCHours(), minutes, date.getUTCDate(), Insta.conf.locale.months[date.getUTCMonth()], date.getUTCFullYear()); // text formatting return str. // signatures replace(/~{5}(?!~)/g, date). replace(/~{4}(?!~)/g, Insta.conf.user.name+' '+date). replace(/~{3}(?!~)/g, Insta.conf.user.name). // [[:Category:...]], [[:Image:...]], etc... replace(RegExp('\\[\\[:((?:'+Insta.conf.locale.category+'|Image|File|'+Insta.conf.locale.image+'|'+Insta.conf.wiki.interwiki+'):[^|]*?)\\]\\](\w*)','gi'), "<a href='"+Insta.conf.paths.articles+"$1'>$1$2</a>"). // remove straight category and interwiki tags replace(RegExp('\\[\\[(?:'+Insta.conf.locale.category+'|'+Insta.conf.wiki.interwiki+'):.*?\\]\\]','gi'),''). // [[:Category:...|Links]], [[:Image:...|Links]], etc... replace(RegExp('\\[\\[:((?:'+Insta.conf.locale.category+'|Image|File|'+Insta.conf.locale.image+'|'+Insta.conf.wiki.interwiki+'):.*?)\\|([^\\]]+?)\\]\\](\\w*)','gi'), "<a href='"+Insta.conf.paths.articles+"$1'>$2$3</a>"). // [[/Relative links]] replace(/\[\[(\/[^|]*?)\]\]/g, f("<a href='?$1'>$1</a>", Insta.conf.baseUrl)). // [[/Replaced|Relative links]] replace(/\[\[(\/.*?)\|(.+?)\]\]/g, f("<a href='?$1'>$2</a>", Insta.conf.baseUrl)). // [[Common links]] replace(/\[\[([^|]*?)\]\](\w*)/g, f("<a href='?$1'>$1$2</a>", Insta.conf.paths.articles)). // [[Replaced|Links]] replace(/\[\[(.*?)\|([^\]]+?)\]\](\w*)/g, f("<a href='?$1'>$2$3</a>", Insta.conf.paths.articles)). // [[Stripped:Namespace|Namespace]] replace(/\[\[([^\]]*?:)?(.*?)( *\(.*?\))?\|\]\]/g, f("<a href='?$1$2$3'>$2</a>", Insta.conf.paths.articles)). // External links replace(/\[(https?|news|ftp|mailto|gopher|irc):(\/*)([^\]]*?) (.*?)\]/g, "<a class='external' href='$1:$2$3'>$4</a>"). replace(/\[http:\/\/(.*?)\]/g, "<a class='external' href='http://$1'>[#]</a>"). replace(/\[(news|ftp|mailto|gopher|irc):(\/*)(.*?)\]/g, "<a class='external' href='$1:$2$3'>$1:$2$3</a>"). replace(/(^| )(https?|news|ftp|mailto|gopher|irc):(\/*)([^ $]*[^.,!?;: $])/g, "$1<a class='external' href='$2:$3$4'>$2:$3$4</a>"). replace('__NOTOC__',''). replace('__NOEDITSECTION__',''); } /* */ function strip_inline_wiki(str) { return str .replace(/\[\[[^\]]*\|(.*?)\]\]/g,'$1') .replace(/\[\[(.*?)\]\]/g,'$1') .replace(/''(.*?)''/g,'$1'); } // begin parsing for (;remain();) if ($(/^(={1,6})(.*)\1(.*)$/)) { p=0 endl(f('<h?>?</h?>?', $r[1].length, parse_inline_nowiki($r[2]), $r[1].length, $r[3])) } else if ($(/^[*#:;]/)) { p=0 parse_list() } else if ($(' ')) { p=0 parse_pre() } else if ($('{|')) { p=0 parse_table() } else if ($(/^----+$/)) { p=0 endl('<hr>') } else if ($(Insta.BLOCK_IMAGE)) { p=0 parse_block_image() } else { // handle paragraphs if ($$('')) { if (p = (remain()>1 && ll[1]==(''))) endl('<p><br>') } else { if(!p) { ps('<p>') p=1 } ps(parse_inline_nowiki(ll[0]) + ' ') } sh(); } return o }; window.wiki2html=function(txt,baseurl) { Insta.conf.baseUrl=baseurl; return Insta.convert(txt); }; // ENDFILE: livepreview.js // STARTFILE: pageinfo.js //<NOLITE> function popupFilterPageSize(data) { return formatBytes(data.length); } function popupFilterCountLinks(data) { var num=countLinks(data); return String(num) + '&nbsp;' + ((num!=1)?popupString('wikiLinks'):popupString('wikiLink')); } function popupFilterCountImages(data) { var num=countImages(data); return String(num) + '&nbsp;' + ((num!=1)?popupString('images'):popupString('image')); } function popupFilterCountCategories(data) { var num=countCategories(data); return String(num) + '&nbsp;' + ((num!=1)?popupString('categories'):popupString('category')); } function popupFilterLastModified(data,download) { var lastmod=download.lastModified; var now=new Date(); var age=now-lastmod; if (lastmod && getValueOf('popupLastModified')) { return (tprintf('%s old', [formatAge(age)])).replace(RegExp(' ','g'), '&nbsp;'); } return ''; } function formatAge(age) { // coerce into a number var a=0+age, aa=a; var seclen = 1000; var minlen = 60*seclen; var hourlen = 60*minlen; var daylen = 24*hourlen; var weeklen = 7*daylen; var numweeks = (a-a%weeklen)/weeklen; a = a-numweeks*weeklen; var sweeks = addunit(numweeks, 'week'); var numdays = (a-a%daylen)/daylen; a = a-numdays*daylen; var sdays = addunit(numdays, 'day'); var numhours = (a-a%hourlen)/hourlen; a = a-numhours*hourlen; var shours = addunit(numhours,'hour'); var nummins = (a-a%minlen)/minlen; a = a-nummins*minlen; var smins = addunit(nummins, 'minute'); var numsecs = (a-a%seclen)/seclen; a = a-numsecs*seclen; var ssecs = addunit(numsecs, 'second'); if (aa > 4*weeklen) { return sweeks; } if (aa > weeklen) { return sweeks + ' ' + sdays; } if (aa > daylen) { return sdays + ' ' + shours; } if (aa > 6*hourlen) { return shours; } if (aa > hourlen) { return shours + ' ' + smins; } if (aa > 10*minlen) { return smins; } if (aa > minlen) { return smins + ' ' + ssecs; } return ssecs; } function addunit(num,str) { return '' + num + ' ' + ((num!=1) ? popupString(str+'s') : popupString(str)) ;} function runPopupFilters(list, data, download) { var ret=[]; for (var i=0; i<list.length; ++i) { if (list[i] && typeof list[i] == 'function') { var s=list[i](data, download, download.owner.article); if (s) { ret.push(s); } } } return ret; } function getPageInfo(data, download) { if (!data || data.length === 0) { return popupString('Empty page'); } var popupFilters=getValueOf('popupFilters') || []; var extraPopupFilters = getValueOf('extraPopupFilters') || []; var pageInfoArray = runPopupFilters(popupFilters.concat(extraPopupFilters), data, download); var pageInfo=pageInfoArray.join(', '); if (pageInfo !== '' ) { pageInfo = upcaseFirst(pageInfo); } return pageInfo; } // this could be improved! function countLinks(wikiText) { return wikiText.split('[[').length - 1; } // if N = # matches, n = # brackets, then // String.parenSplit(regex) intersperses the N+1 split elements // with Nn other elements. So total length is // L= N+1 + Nn = N(n+1)+1. So N=(L-1)/(n+1). function countImages(wikiText) { return (wikiText.parenSplit(pg.re.image).length - 1) / (pg.re.imageBracketCount + 1); } function countCategories(wikiText) { return (wikiText.parenSplit(pg.re.category).length - 1) / (pg.re.categoryBracketCount + 1); } function popupFilterStubDetect(data, download, article) { var counts=stubCount(data, article); if (counts.real) { return popupString('stub'); } if (counts.sect) { return popupString('section stub'); } return ''; } function popupFilterDisambigDetect(data, download, article) { if (getValueOf('popupOnlyArticleDabStub') && article.namespace()) { return ''; } return (isDisambig(data, article)) ? popupString('disambig') : ''; } function formatBytes(num) { return (num > 949) ? (Math.round(num/100)/10+popupString('kB')) : (num +'&nbsp;' + popupString('bytes')) ; } //</NOLITE> // ENDFILE: pageinfo.js // STARTFILE: titles.js /** @fileoverview Defines the {@link Title} class, and associated crufty functions. <code>Title</code> deals with article titles and their various forms. {@link Stringwrapper} is the parent class of <code>Title</code>, which exists simply to make things a little neater. */ /** Creates a new Stringwrapper. @constructor @class the Stringwrapper class. This base class is not really useful on its own; it just wraps various common string operations. */ function Stringwrapper() { /** Wrapper for this.toString().indexOf() @param {String} x @type integer */ this.indexOf=function(x){return this.toString().indexOf(x);}; /** Returns this.value. @type String */ this.toString=function(){return this.value;}; /** Wrapper for {@link String#parenSplit} applied to this.toString() @param {RegExp} x @type Array */ this.parenSplit=function(x){return this.toString().parenSplit(x);}; /** Wrapper for this.toString().substring() @param {String} x @param {String} y (optional) @type String */ this.substring=function(x,y){ if (typeof y=='undefined') { return this.toString().substring(x); } return this.toString().substring(x,y); }; /** Wrapper for this.toString().split() @param {String} x @type Array */ this.split=function(x){return this.toString().split(x);}; /** Wrapper for this.toString().replace() @param {String} x @param {String} y @type String */ this.replace=function(x,y){ return this.toString().replace(x,y); }; } /** Creates a new <code>Title</code>. @constructor @class The Title class. Holds article titles and converts them into various forms. Also deals with anchors, by which we mean the bits of the article URL after a # character, representing locations within an article. @param {String} value The initial value to assign to the article. This must be the canonical title (see {@link Title#value}. Omit this in the constructor and use another function to set the title if this is unavailable. */ function Title(val) { /** The canonical article title. This must be in UTF-8 with no entities, escaping or nasties. Also, underscores should be replaced with spaces. @type String @private */ this.value=null; /** The canonical form of the anchor. This should be exactly as it appears in the URL, i.e. with the .C3.0A bits in. @type String */ this.anchor=''; this.setUtf(val); } Title.prototype=new Stringwrapper(); /** Returns the canonical representation of the article title, optionally without anchor. @param {boolean} omitAnchor @fixme Decide specs for anchor @return String The article title and the anchor. */ Title.prototype.toString=function(omitAnchor) { return this.value + ( (!omitAnchor && this.anchor) ? '#' + this.anchorString() : '' ); }; Title.prototype.anchorString=function() { if (!this.anchor) { return ''; } var split=this.anchor.parenSplit(/((?:[.][0-9A-F]{2})+)/); var len=split.length; for (var j=1; j<len; j+=2) { // FIXME s/decodeURI/decodeURIComponent/g ? split[j]=decodeURIComponent(split[j].split('.').join('%')).split('_').join(' '); } return split.join(''); }; Title.prototype.urlAnchor=function() { var split=this.anchor.parenSplit('/((?:[%][0-9A-F]{2})+)/'); var len=split.length; for (var j=1; j<len; j+=2) { split[j]=split[j].split('%').join('.'); } return split.join(''); }; Title.prototype.anchorFromUtf=function(str) { this.anchor=encodeURIComponent(str.split(' ').join('_')) .split('%3A').join(':').split("'").join('%27').split('%').join('.'); }; Title.fromURL=function(h) { return new Title().fromURL(h); }; Title.prototype.fromURL=function(h) { if (typeof h != 'string') { this.value=null; return this; } // NOTE : playing with decodeURI, encodeURI, escape, unescape, // we seem to be able to replicate the IE borked encoding // IE doesn't do this new-fangled utf-8 thing. // and it's worse than that. // IE seems to treat the query string differently to the rest of the url // the query is treated as bona-fide utf8, but the first bit of the url is pissed around with // we fix up & for all browsers, just in case. var splitted=h.split('?'); splitted[0]=splitted[0].split('&').join('%26'); if (pg.flag.linksLikeIE6) { splitted[0]=encodeURI(decode_utf8(splitted[0])); } h=splitted.join('?'); var contribs=pg.re.contribs.exec(h); if (contribs !== null) { if (contribs[1]=='title=') { contribs[3]=contribs[3].split('+').join(' '); } var u=new Title(contribs[3]); this.setUtf(this.decodeNasties(pg.ns.user + ':' + u.stripNamespace())); return this; } var email=pg.re.email.exec(h); if (email !== null) { this.setUtf(this.decodeNasties(pg.ns.user + ':' + new Title(email[3]).stripNamespace())); return this; } var backlinks=pg.re.backlinks.exec(h); if (backlinks) { this.setUtf(this.decodeNasties(new Title(backlinks[3]))); return this; } // no more special cases to check -- // hopefully it's not a disguised user-related or specially treated special page var m=pg.re.main.exec(h); if(m===null) { this.value=null; } else { var fromBotInterface = /[?](.+[&])?title=/.test(h); if (fromBotInterface) { m[2]=m[2].split('+').join('_'); } var extracted = m[2] + (m[3] ? '#' + m[3] : ''); if (pg.flag.isSafari && /%25[0-9A-Fa-f]{2}/.test(extracted)) { // Fix Safari issue // Safari sometimes encodes % as %25 in UTF-8 encoded strings like %E5%A3 -> %25E5%25A3. this.setUtf(decodeURIComponent(unescape(extracted))); } else { this.setUtf(this.decodeNasties(extracted)); } } return this; }; Title.prototype.decodeNasties=function(txt) { var ret= this.decodeEscapes(decodeURI(txt)); ret = ret.replace(/[_ ]*$/, ''); return ret; }; Title.prototype.decodeEscapes=function(txt) { var split=txt.parenSplit(/((?:[%][0-9A-Fa-f]{2})+)/); var len=split.length; for (var i=1; i<len; i=i+2) { // FIXME is decodeURIComponent better? split[i]=unescape(split[i]); } return split.join(''); }; Title.fromAnchor=function(a) { return new Title().fromAnchor(a); }; Title.prototype.fromAnchor=function(a) { if (!a) { this.value=null; return this; } return this.fromURL(a.href); }; Title.fromWikiText=function(txt) { return new Title().fromWikiText(txt); }; Title.prototype.fromWikiText=function(txt) { // FIXME - testing needed if (!pg.flag.linksLikeIE6) { txt=myDecodeURI(txt); } this.setUtf(txt); return this; }; Title.prototype.hintValue=function(){ if(!this.value) { return ''; } return safeDecodeURI(this.value); }; //<NOLITE> Title.prototype.toUserName=function(withNs) { if (this.namespace() != pg.ns.user && this.namespace() != pg.ns.usertalk) { this.value=null; return; } this.value = (withNs ? pg.ns.user + ':' : '') + this.stripNamespace().split('/')[0]; }; Title.prototype.userName=function(withNs) { var t=(new Title(this.value)); t.toUserName(withNs); if (t.value) { return t; } return null; }; Title.prototype.toTalkPage=function() { // convert article to a talk page, or if we can't return null // or, in other words, return null if this ALREADY IS a talk page // and return the corresponding talk page otherwise if (this.value===null) { return null; } var talkRegex=namespaceListToRegex(pg.ns.talkList); if (talkRegex.exec(this.value)) { this.value=null; return null;} var nsReg=namespaceListToRegex(pg.ns.withTalkList); var splitted=this.value.parenSplit(nsReg); if (splitted.length<2) { this.value= (pg.ns.talkList[0]+':'+this.value).split(' ').join('_'); return this.value; } for (var i=0; i< pg.ns.withTalkList.length; ++i) { if (splitted[1]==pg.ns.withTalkList[i]) { splitted[1]=pg.ns.talkList[i]; this.value=splitted.join(':').substring(1).split(' ').join('_'); return this.value; } } this.value=null; return null; }; //</NOLITE> Title.prototype.namespace=function() { var n=this.value.indexOf(':'); if (n<0) { return ''; } var list=pg.ns.list; for (var i=0; i<list.length; ++i) { if (upcaseFirst(list[i]) == this.value.substring(0,n)) { return list[i]; } } return ''; }; //<NOLITE> Title.prototype.talkPage=function() { var t=new Title(this.value); t.toTalkPage(); if (t.value) { return t; } return null; }; Title.prototype.isTalkPage=function() { if (this.talkPage()===null) { return true; } return false; }; Title.prototype.toArticleFromTalkPage=function() { var talkRegex=namespaceListToRegex(pg.ns.talkList); var splitted=this.value.parenSplit(talkRegex); if (splitted.length < 2 || splitted[0].length > 0) { this.value=null; return null; } if (splitted[1]==pg.ns.talkList[0]) { splitted[1]=''; this.value=splitted.join(':').substring(2).split(' ').join('_'); return this.value; } for (var i=1; i< pg.ns.talkList.length; ++i) { if (splitted[1]==pg.ns.talkList[i] || splitted[1]==pg.ns.talkList[i].split(' ').join('_')) { splitted[1]=pg.ns.withTalkList[i]; this.value= splitted.join(':').substring(1).split(' ').join('_'); return this.value; } } this.value=null; return this.value; }; Title.prototype.articleFromTalkPage=function() { var t=new Title(this.value); t.toArticleFromTalkPage(); if (t.value) { return t; } return null; }; Title.prototype.articleFromTalkOrArticle=function() { var t=new Title(this.value); if ( t.toArticleFromTalkPage() ) { return t; } return this; }; Title.prototype.isIpUser=function() { return pg.re.ipUser.test(this.userName()); }; //</NOLITE> Title.prototype.stripNamespace=function(){ // returns a string, not a Title var n=this.value.indexOf(':'); if (n<0) { return this.value; } var list=pg.ns.list; for (var i=0; i<list.length; ++i) { if (upcaseFirst(list[i]) == this.value.substring(0,n)) { return this.value.substring(n+1); } } return this.value; }; Title.prototype.setUtf=function(value){ if (!value) { this.value=''; return; } var anch=value.indexOf('#'); if(anch < 0) { this.value=value.split('_').join(' '); this.anchor=''; return; } this.value=value.substring(0,anch).split('_').join(' '); this.anchor=value.substring(anch+1); this.ns=null; // wait until namespace() is called }; Title.prototype.setUrl=function(urlfrag) { var anch=urlfrag.indexOf('#'); this.value=safeDecodeURI(urlfrag.substring(0,anch)); this.anchor=value.substring(anch+1); }; Title.prototype.append=function(x){ this.setUtf(this.value + x); }; Title.prototype.urlString=function(x) { x || ( x={} ); var v=this.toString(true); if (!x.omitAnchor && this.anchor) { v+= '#' + this.urlAnchor(); } if (!x.keepSpaces) { v=v.split(' ').join('_'); } return encodeURI(v).split('&').join('%26').split('?').join('%3F').split('+').join('%2B'); }; Title.prototype.removeAnchor=function() { return new Title(this.toString(true)); }; Title.prototype.toUrl=function() { return pg.wiki.titlebase + this.urlString(); }; function paramValue(param, url) { var s=url.parenSplit(RegExp('[?&]' + literalizeRegex(param) + '=([^?&]*)')); if (!url) { return null; } return s[1] || null; } function parseParams(url) { var ret={}; if (url.indexOf('?')==-1) { return ret; } var s=url.split('?').slice(1).join(); var t=s.split('&'); for (var i=0; i<t.length; ++i) { var z=t[i].split('='); z.push(null); ret[z[0]]=z[1]; } return ret; } // all sorts of stuff here // FIXME almost everything needs to be rewritten function oldidFromAnchor(a) { return paramValue('oldid', a.href); } //function diffFromAnchor(a) { return paramValue('diff', a.href); } function wikiMarkupToAddressFragment (str) { // for images var ret = safeDecodeURI(str); ret = ret.split(' ').join('_'); ret = encodeURI(ret); return ret; } // (a) myDecodeURI (first standard decodeURI, then pg.re.urlNoPopup) // (b) change spaces to underscores // (c) encodeURI (just the straight one, no pg.re.urlNoPopup) function myDecodeURI (str) { var ret; // FIXME decodeURIComponent?? try { ret=decodeURI(str.toString()); } catch (summat) { return str; } for (var i=0; i<pg.misc.decodeExtras.length; ++i) { var from=pg.misc.decodeExtras[i].from; var to=pg.misc.decodeExtras[i].to; ret=ret.split(from).join(to); } return ret; } function safeDecodeURI(str) { var ret=myDecodeURI(str); return ret || str; } /////////// // TESTS // /////////// //<NOLITE> function isIpUser(user) {return pg.re.ipUser.test(user);} function isDisambig(data, article) { if (!getValueOf('popupAllDabsStubs') && article.namespace()) { return false; } return ! article.isTalkPage() && pg.re.disambig.test(data); } function stubCount(data, article) { if (!getValueOf('popupAllDabsStubs') && article.namespace()) { return false; } var sectStub=0; var realStub=0; if (pg.re.stub.test(data)) { var s=data.parenSplit(pg.re.stub); for (var i=1; i<s.length; i=i+2) { if (s[i]) { ++sectStub; } else { ++realStub; } } } return { real: realStub, sect: sectStub }; } function isValidImageName(str){ // extend as needed... return ( str.indexOf('{') == -1 ); } function isInStrippableNamespace(article) { return ( findInArray( pg.ns.nonArticleList, article.namespace() ) > -1 ); } function isInMainNamespace(article) { return !isInStrippableNamespace(article); } function anchorContainsImage(a) { // iterate over children of anchor a // see if any are images if (a===null) { return false; } kids=a.childNodes; for (var i=0; i<kids.length; ++i) { if (kids[i].nodeName=='IMG') { return true; } } return false; } //</NOLITE> function isPopupLink(a) { // NB for performance reasons, TOC links generally return true // they should be stripped out later if (!markNopopupSpanLinks.done) { markNopopupSpanLinks(); } if (a.inNopopupSpan || a.className=='sortheader') { return false; } // FIXME is this faster inline? if (a.onmousedown || a.getAttribute('nopopup')) { return false; } var h=a.href; if (!pg.re.basenames.test(h)) { return false; } if ( !pg.re.urlNoPopup.test(h) ) { return true; } return ( (pg.re.email.test(h) || pg.re.contribs.test(h) || pg.re.backlinks.test(h)) && h.indexOf('&limit=') == -1 ); } function markNopopupSpanLinks() { if( !getValueOf('popupOnlyArticleLinks')) fixVectorMenuPopups(); var s=getElementsByClassName(document, '*', "nopopups") for (var i=0; i<s.length; ++i) { var as=s[i].getElementsByTagName('a'); for (var j=0; j<as.length; ++j) { as[j].inNopopupSpan=true; } } markNopopupSpanLinks.done=true; } function fixVectorMenuPopups() { var vmenus = getElementsByClassName( document, 'div', 'vectorMenu'); for( i= 0; vmenus && i< vmenus.length; i++ ) { var h5 = vmenus[i].getElementsByTagName('h5')[0]; if( h5) var a = h5.getElementsByTagName('a')[0]; if( a ) a.inNopopupSpan=true; } } // ENDFILE: titles.js // STARTFILE: cookies.js //<NOLITE> ////////////////////////////////////////////////// // Cookie handling // from http://www.quirksmode.org/js/cookies.html var Cookie= { create: function(name,value,days) { var expires; if (days) { var date = new Date(); date.setTime(date.getTime()+(days*24*60*60*1000)); expires = "; expires="+date.toGMTString(); } else { expires = ""; } document.cookie = name+"="+value+expires+"; path=/"; }, read: function(name) { var nameEQ = name + "="; var ca = document.cookie.split(';'); for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==' ') { c = c.substring(1,c.length); } if (c.indexOf(nameEQ) === 0) { return c.substring(nameEQ.length,c.length); } } return null; }, erase: function(name) { Cookie.create(name,"",-1); } }; //</NOLITE> // ENDFILE: cookies.js // STARTFILE: getpage.js ////////////////////////////////////////////////// // Wiki-specific downloading // // Schematic for a getWiki call // // getWiki->-getPageWithCaching // | // false | true // getPage<-[findPictureInCache]->-onComplete(a fake download) // \. // (async)->addPageToCache(download)->-onComplete(download) /** @todo {document} @param {Title} article @param {Function} onComplete @param {integer} oldid @param {Navapopup} owner */ function getWiki(article, onComplete, oldid, owner) { // set ctype=text/css to get around opera gzip bug var url = pg.wiki.titlebase + article.removeAnchor().urlString() + '&action=raw&ctype=text/css'; if (oldid || oldid===0 || oldid==='0') { url += '&oldid='+oldid; } url += '&maxage=0&smaxage=0'; getPageWithCaching(url, onComplete, owner); } // check cache to see if page exists function getPageWithCaching(url, onComplete, owner) { log('getPageWithCaching, url='+url); var i=findInPageCache(url); if (i > -1) { var d=fakeDownload(url, owner.idNumber, onComplete, pg.cache.pages[i].data, pg.cache.pages[i].lastModified, owner); } else { var d=getPage(url, onComplete, owner); if (d && owner && owner.addDownload) { owner.addDownload(d); d.owner=owner; } } } function getPage(url, onComplete, owner) { log('getPage'); var callback= function (d) { if (!d.aborted) {addPageToCache(d); onComplete(d);} }; return startDownload(url, owner.idNumber, callback); } function findInPageCache(url) { for (var i=0; i<pg.cache.pages.length; ++i) { if (url==pg.cache.pages[i].url) { return i; } } return -1; } function addPageToCache(download) { log('addPageToCache '+download.url); var page = {url: download.url, data: download.data, lastModified: download.lastModified}; return pg.cache.pages.push(page); } // ENDFILE: getpage.js // STARTFILE: md5-2.2alpha.js //<NOLITE> /* * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message * Digest Algorithm, as defined in RFC 1321. * Version 2.2-alpha Copyright (C) Paul Johnston 1999 - 2005 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet * Distributed under the BSD License * See http://pajhome.org.uk/crypt/md5 for more info. */ /* * Configurable variables. You may need to tweak these to be compatible with * the server-side, but the defaults work in most cases. */ var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */ var b64pad = ""; /* base-64 pad character. "=" for strict RFC compliance */ /* * These are the functions you'll usually want to call * They take string arguments and return either hex or base-64 encoded strings */ function hex_md5(s) { return rstr2hex(rstr_md5(str2rstr_utf8(s))); } function b64_md5(s) { return rstr2b64(rstr_md5(str2rstr_utf8(s))); } function any_md5(s, e) { return rstr2any(rstr_md5(str2rstr_utf8(s)), e); } function hex_hmac_md5(k, d) { return rstr2hex(rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d))); } function b64_hmac_md5(k, d) { return rstr2b64(rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d))); } function any_hmac_md5(k, d, e) { return rstr2any(rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d)), e); } /* * Perform a simple self-test to see if the VM is working */ function md5_vm_test() { return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72"; } /* * Calculate the MD5 of a raw string */ function rstr_md5(s) { return binl2rstr(binl_md5(rstr2binl(s), s.length * 8)); } /* * Calculate the HMAC-MD5, of a key and some data (raw strings) */ function rstr_hmac_md5(key, data) { var bkey = rstr2binl(key); if(bkey.length > 16) bkey = binl_md5(bkey, key.length * 8); var ipad = Array(16), opad = Array(16); for(var i = 0; i < 16; i++) { ipad[i] = bkey[i] ^ 0x36363636; opad[i] = bkey[i] ^ 0x5C5C5C5C; } var hash = binl_md5(ipad.concat(rstr2binl(data)), 512 + data.length * 8); return binl2rstr(binl_md5(opad.concat(hash), 512 + 128)); } /* * Convert a raw string to a hex string */ function rstr2hex(input) { var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef"; var output = ""; var x; for(var i = 0; i < input.length; i++) { x = input.charCodeAt(i); output += hex_tab.charAt((x >>> 4) & 0x0F) + hex_tab.charAt( x & 0x0F); } return output; } /* * Convert a raw string to a base-64 string */ function rstr2b64(input) { var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; var output = ""; var len = input.length; for(var i = 0; i < len; i += 3) { var triplet = (input.charCodeAt(i) << 16) | (i + 1 < len ? input.charCodeAt(i+1) << 8 : 0) | (i + 2 < len ? input.charCodeAt(i+2) : 0); for(var j = 0; j < 4; j++) { if(i * 8 + j * 6 > input.length * 8) output += b64pad; else output += tab.charAt((triplet >>> 6*(3-j)) & 0x3F); } } return output; } /* * Convert a raw string to an arbitrary string encoding */ function rstr2any(input, encoding) { var divisor = encoding.length; var remainders = Array(); var i, q, x, quotient; /* Convert to an array of 16-bit big-endian values, forming the dividend */ var dividend = Array(input.length / 2); for(i = 0; i < dividend.length; i++) { dividend[i] = (input.charCodeAt(i * 2) << 8) | input.charCodeAt(i * 2 + 1); } /* * Repeatedly perform a long division. The binary array forms the dividend, * the length of the encoding is the divisor. Once computed, the quotient * forms the dividend for the next step. We stop when the dividend is zero. * All remainders are stored for later use. */ while(dividend.length > 0) { quotient = Array(); x = 0; for(i = 0; i < dividend.length; i++) { x = (x << 16) + dividend[i]; q = Math.floor(x / divisor); x -= q * divisor; if(quotient.length > 0 || q > 0) quotient[quotient.length] = q; } remainders[remainders.length] = x; dividend = quotient; } /* Convert the remainders to the output string */ var output = ""; for(i = remainders.length - 1; i >= 0; i--) output += encoding.charAt(remainders[i]); return output; } /* * Encode a string as utf-8. * For efficiency, this assumes the input is valid utf-16. */ function str2rstr_utf8(input) { var output = ""; var i = -1; var x, y; while(++i < input.length) { /* Decode utf-16 surrogate pairs */ x = input.charCodeAt(i); y = i + 1 < input.length ? input.charCodeAt(i + 1) : 0; if(0xD800 <= x && x <= 0xDBFF && 0xDC00 <= y && y <= 0xDFFF) { x = 0x10000 + ((x & 0x03FF) << 10) + (y & 0x03FF); i++; } /* Encode output as utf-8 */ if(x <= 0x7F) output += String.fromCharCode(x); else if(x <= 0x7FF) output += String.fromCharCode(0xC0 | ((x >>> 6 ) & 0x1F), 0x80 | ( x & 0x3F)); else if(x <= 0xFFFF) output += String.fromCharCode(0xE0 | ((x >>> 12) & 0x0F), 0x80 | ((x >>> 6 ) & 0x3F), 0x80 | ( x & 0x3F)); else if(x <= 0x1FFFFF) output += String.fromCharCode(0xF0 | ((x >>> 18) & 0x07), 0x80 | ((x >>> 12) & 0x3F), 0x80 | ((x >>> 6 ) & 0x3F), 0x80 | ( x & 0x3F)); } return output; } /* * Encode a string as utf-16 */ function str2rstr_utf16le(input) { var output = ""; for(var i = 0; i < input.length; i++) output += String.fromCharCode( input.charCodeAt(i) & 0xFF, (input.charCodeAt(i) >>> 8) & 0xFF); return output; } function str2rstr_utf16be(input) { var output = ""; for(var i = 0; i < input.length; i++) output += String.fromCharCode((input.charCodeAt(i) >>> 8) & 0xFF, input.charCodeAt(i) & 0xFF); return output; } /* * Convert a raw string to an array of little-endian words * Characters >255 have their high-byte silently ignored. */ function rstr2binl(input) { var output = Array(input.length >> 2); for(var i = 0; i < output.length; i++) output[i] = 0; for(var i = 0; i < input.length * 8; i += 8) output[i>>5] |= (input.charCodeAt(i / 8) & 0xFF) << (i%32); return output; } /* * Convert an array of little-endian words to a string */ function binl2rstr(input) { var output = ""; for(var i = 0; i < input.length * 32; i += 8) output += String.fromCharCode((input[i>>5] >>> (i % 32)) & 0xFF); return output; } /* * Calculate the MD5 of an array of little-endian words, and a bit length. */ function binl_md5(x, len) { /* append padding */ x[len >> 5] |= 0x80 << ((len) % 32); x[(((len + 64) >>> 9) << 4) + 14] = len; var a = 1732584193; var b = -271733879; var c = -1732584194; var d = 271733878; for(var i = 0; i < x.length; i += 16) { var olda = a; var oldb = b; var oldc = c; var oldd = d; a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936); d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586); c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819); b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330); a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897); d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426); c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341); b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983); a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416); d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417); c = md5_ff(c, d, a, b, x[i+10], 17, -42063); b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162); a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682); d = md5_ff(d, a, b, c, x[i+13], 12, -40341101); c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290); b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329); a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510); d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632); c = md5_gg(c, d, a, b, x[i+11], 14, 643717713); b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302); a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691); d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083); c = md5_gg(c, d, a, b, x[i+15], 14, -660478335); b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848); a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438); d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690); c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961); b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501); a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467); d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784); c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473); b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734); a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558); d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463); c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562); b = md5_hh(b, c, d, a, x[i+14], 23, -35309556); a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060); d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353); c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632); b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640); a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174); d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222); c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979); b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189); a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487); d = md5_hh(d, a, b, c, x[i+12], 11, -421815835); c = md5_hh(c, d, a, b, x[i+15], 16, 530742520); b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651); a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844); d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415); c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905); b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055); a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571); d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606); c = md5_ii(c, d, a, b, x[i+10], 15, -1051523); b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799); a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359); d = md5_ii(d, a, b, c, x[i+15], 10, -30611744); c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380); b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649); a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070); d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379); c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259); b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551); a = safe_add(a, olda); b = safe_add(b, oldb); c = safe_add(c, oldc); d = safe_add(d, oldd); } return Array(a, b, c, d); } /* * These functions implement the four basic operations the algorithm uses. */ function md5_cmn(q, a, b, x, s, t) { return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b); } function md5_ff(a, b, c, d, x, s, t) { return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t); } function md5_gg(a, b, c, d, x, s, t) { return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t); } function md5_hh(a, b, c, d, x, s, t) { return md5_cmn(b ^ c ^ d, a, b, x, s, t); } function md5_ii(a, b, c, d, x, s, t) { return md5_cmn(c ^ (b | (~d)), a, b, x, s, t); } /* * Add integers, wrapping at 2^32. This uses 16-bit operations internally * to work around bugs in some JS interpreters. */ function safe_add(x, y) { var lsw = (x & 0xFFFF) + (y & 0xFFFF); var msw = (x >> 16) + (y >> 16) + (lsw >> 16); return (msw << 16) | (lsw & 0xFFFF); } /* * Bitwise rotate a 32-bit number to the left. */ function bit_rol(num, cnt) { return (num << cnt) | (num >>> (32 - cnt)); } //</NOLITE> // ENDFILE: md5-2.2alpha.js // STARTFILE: parensplit.js ////////////////////////////////////////////////// // parenSplit // String.prototype.parenSplit should do what ECMAscript says // String.prototype.split does, interspersing paren matches between // the split elements if (String('abc'.split(/(b)/))!='a,b,c') { // broken String.split, e.g. konq, IE String.prototype.parenSplit=function (re) { re=nonGlobalRegex(re); var s=this; var m=re.exec(s); var ret=[]; while (m && s) { // without the following loop, we have // 'ab'.parenSplit(/a|(b)/) != 'ab'.split(/a|(b)/) for(var i=0; i<m.length; ++i) { if (typeof m[i]=='undefined') m[i]=''; } ret.push(s.substring(0,m.index)); ret = ret.concat(m.slice(1)); s=s.substring(m.index + m[0].length); m=re.exec(s); } ret.push(s); return ret; }; } else { String.prototype.parenSplit=function (re) { return this.split(re); }; String.prototype.parenSplit.isNative=true; } function nonGlobalRegex(re) { var s=re.toString(); flags=''; for (var j=s.length; s.charAt(j) != '/'; --j) { if (s.charAt(j) != 'g') { flags += s.charAt(j); } } var t=s.substring(1,j); return RegExp(t,flags); } // ENDFILE: parensplit.js // STARTFILE: tools.js // IE madness with encoding // ======================== // // suppose throughout that the page is in utf8, like wikipedia // // if a is an anchor DOM element and a.href should consist of // // http://host.name.here/wiki/foo?bar=baz // // then IE gives foo as "latin1-encoded" utf8; we have foo = decode_utf8(decodeURI(foo_ie)) // but IE gives bar=baz correctly as plain utf8 // // --------------------------------- // // IE's xmlhttp doesn't understand utf8 urls. Have to use encodeURI here. // // --------------------------------- // // summat else // Source: http://aktuell.de.selfhtml.org/artikel/javascript/utf8b64/utf8.htm //<NOLITE> function encode_utf8(rohtext) { // dient der Normalisierung des Zeilenumbruchs rohtext = rohtext.replace(/\r\n/g,"\n"); var utftext = ""; for(var n=0; n<rohtext.length; n++) { // ermitteln des Unicodes des aktuellen Zeichens var c=rohtext.charCodeAt(n); // alle Zeichen von 0-127 => 1byte if (c<128) utftext += String.fromCharCode(c); // alle Zeichen von 127 bis 2047 => 2byte else if((c>127) && (c<2048)) { utftext += String.fromCharCode((c>>6)|192); utftext += String.fromCharCode((c&63)|128);} // alle Zeichen von 2048 bis 66536 => 3byte else { utftext += String.fromCharCode((c>>12)|224); utftext += String.fromCharCode(((c>>6)&63)|128); utftext += String.fromCharCode((c&63)|128);} } return utftext; } function getJsObj(json) { try { var json_ret = eval('(' + json + ')'); } catch (someError) { errlog('Something went wrong with getJsobj, json='+json); return 1; } if( json_ret['warnings'] ) { for( var w=0; w < json_ret['warnings'].length; w++ ) { log( json_ret['warnings'][w]['*'] ); } } else if ( json_ret['error'] ) { errlog( json_ret['error'].code + ': ' + json_ret['error'].info ); } return json_ret; } function anyChild(obj) { for (var p in obj) { return obj[p]; } return null; } //</NOLITE> function decode_utf8(utftext) { var plaintext = ""; var i=0, c=0, c1=0, c2=0; // while-Schleife, weil einige Zeichen uebersprungen werden while(i<utftext.length) { c = utftext.charCodeAt(i); if (c<128) { plaintext += String.fromCharCode(c); i++;} else if((c>191) && (c<224)) { c2 = utftext.charCodeAt(i+1); plaintext += String.fromCharCode(((c&31)<<6) | (c2&63)); i+=2;} else { c2 = utftext.charCodeAt(i+1); c3 = utftext.charCodeAt(i+2); plaintext += String.fromCharCode(((c&15)<<12) | ((c2&63)<<6) | (c3&63)); i+=3;} } return plaintext; } function upcaseFirst(str) { if (typeof str != typeof '' || str=='') return ''; return str.charAt(0).toUpperCase() + str.substring(1); } function findInArray(arr, foo) { if (!arr || !arr.length) { return -1; } var len=arr.length; for (var i=0; i<len; ++i) { if (arr[i]==foo) { return i; } } return -1; } function nextOne (array, value) { // NB if the array has two consecutive entries equal // then this will loop on successive calls var i=findInArray(array, value); if (i<0) { return null; } return array[i+1]; } function literalizeRegex(str){ return str.replace(RegExp('([-.|()\\+?*^${}\\[\\]])', 'g'), '\\$1'); } String.prototype.entify=function() { //var shy='&shy;'; return this.split('&').join('&amp;').split('<').join('&lt;').split('>').join('&gt;'/*+shy*/).split('"').join('&quot;'); }; function findThis(array, value) { if (typeof array.length == 'undefined') { return null; } for (var i=0; i<array.length; ++i) { if (array[i]==value) { return i; } } return null; } function removeNulls(list) { var ret=[]; for (var i=0; i<list.length; ++i) { if (list[i]) { ret.push(list[i]); } } return ret; } function joinPath(list) { return removeNulls(list).join('/'); } function simplePrintf(str, subs) { if (!str || !subs) { return str; } var ret=[]; var s=str.parenSplit(/(%s|\$[0-9]+)/); var i=0; do { ret.push(s.shift()); if ( !s.length ) { break; } var cmd=s.shift(); if (cmd == '%s') { if ( i < subs.length ) { ret.push(subs[i]); } else { ret.push(cmd); } ++i; } else { var j=parseInt( cmd.replace('$', ''), 10 ) - 1; if ( j > -1 && j < subs.length ) { ret.push(subs[j]); } else { ret.push(cmd); } } } while (s.length > 0); return ret.join(''); } function max(a,b){return a<b ? b : a;} function min(a,b){return a>b ? b : a;} function isString(x) { return (typeof x === 'string' || x instanceof String); } //function isNumber(x) { return (typeof x === 'number' || x instanceof Number); } function isRegExp(x) { return x instanceof RegExp; } function isArray (x) { return x instanceof Array; } function isObject(x) { return x instanceof Object; } function isFunction(x) { return !isRegExp(x) && (typeof x === 'function' || x instanceof Function); } function repeatString(s,mult) { var ret=''; for (var i=0; i<mult; ++i) { ret += s; } return ret; } function zeroFill(s, min) { min = min || 2; var t=s.toString(); return repeatString('0', min - t.length) + t; } function map(f, o) { if (isArray(o)) { return map_array(f,o); } return map_object(f,o); } function map_array(f,o) { var ret=[]; for (var i=0; i<o.length; ++i) { ret.push(f(o[i])); } return ret; } function map_object(f,o) { var ret={}; for (var i in o) { ret[o]=f(o[i]); } return ret; } // ENDFILE: tools.js // STARTFILE: dab.js //<NOLITE> ////////////////////////////////////////////////// // Dab-fixing code // function retargetDab(newTarget, oldTarget, friendlyCurrentArticleName, titleToEdit) { log('retargetDab: newTarget='+newTarget + ' oldTarget=' + oldTarget); return changeLinkTargetLink( {newTarget: newTarget, text: newTarget.split(' ').join('&nbsp;'), hint: tprintf('disambigHint', [newTarget]), summary: simplePrintf( getValueOf('popupFixDabsSummary'), [friendlyCurrentArticleName, newTarget ]), clickButton: 'wpDiff', minor: true, oldTarget: oldTarget, watch: getValueOf('popupWatchDisambiggedPages'), title: titleToEdit}); } function listLinks(wikitext, oldTarget, titleToEdit) { // mediawiki strips trailing spaces, so we do the same // testcase: //en.wikipedia.org/w/index.php?title=Radial&oldid=97365633 var reg=RegExp('\\[\\[([^|]*?) *(\\||\\]\\])', 'gi'); var ret=[]; var splitted=wikitext.parenSplit(reg); // ^[a-z]+ should match interwiki links, hopefully (case-insensitive) // and ^[a-z]* should match those and [[:Category...]] style links too var omitRegex=RegExp('^[a-z]*:|^[Ss]pecial:|^[Ii]mage|^[Cc]ategory'); var friendlyCurrentArticleName= oldTarget.toString(); var wikPos = getValueOf('popupDabWiktionary'); for (var i=1; i<splitted.length; i=i+3) { if (typeof splitted[i] == typeof 'string' && splitted[i].length>0 && !omitRegex.test(splitted[i])) { ret.push( retargetDab(splitted[i], oldTarget, friendlyCurrentArticleName, titleToEdit) ); } /* if */ } /* for loop */ ret = rmDupesFromSortedList(ret.sort()); if (wikPos) { var wikTarget='wiktionary:' + friendlyCurrentArticleName.replace( RegExp('^(.+)\\s+[(][^)]+[)]\\s*$'), '$1' ); var meth; if (wikPos.toLowerCase() == 'first') { meth = 'unshift'; } else { meth = 'push'; } ret[meth]( retargetDab(wikTarget, oldTarget, friendlyCurrentArticleName, titleToEdit) ); } ret.push(changeLinkTargetLink( { newTarget: null, text: popupString('remove this link').split(' ').join('&nbsp;'), hint: popupString("remove all links to this disambig page from this article"), clickButton: "wpDiff", oldTarget: oldTarget, summary: simplePrintf(getValueOf('popupRmDabLinkSummary'), [friendlyCurrentArticleName]), watch: getValueOf('popupWatchDisambiggedPages'), title: titleToEdit })); return ret; } function rmDupesFromSortedList(list) { var ret=[]; for (var i=0; i<list.length; ++i) { if (ret.length===0 || list[i]!=ret[ret.length-1]) { ret.push(list[i]); } } return ret; } function makeFixDab(data, navpop) { // grab title from parent popup if there is one; default exists in changeLinkTargetLink var titleToEdit=(navpop.parentPopup && navpop.parentPopup.article.toString()); var list=listLinks(data, navpop.originalArticle, titleToEdit); if (list.length===0) { log('listLinks returned empty list'); return null; } var html='<hr>' + popupString('Click to disambiguate this link to:') + '<br>'; html+=list.join(', '); return html; } function makeFixDabs(wikiText, navpop) { if (getValueOf('popupFixDabs') && isDisambig(wikiText, navpop.article) && Title.fromURL(location.href).namespace() != pg.ns.special && navpop.article.talkPage() ) { setPopupHTML(makeFixDab(wikiText, navpop), 'popupFixDab', navpop.idNumber); } } function popupRedlinkHTML(article) { return changeLinkTargetLink( { newTarget: null, text: popupString('remove this link').split(' ').join('&nbsp;'), hint: popupString("remove all links to this page from this article"), clickButton: "wpDiff", oldTarget: article.toString(), summary: simplePrintf(getValueOf('popupRedlinkSummary'), [article.toString()])}); } //</NOLITE> // ENDFILE: dab.js // STARTFILE: htmloutput.js function appendPopupContent(obj, elementId, popupId, onSuccess) { return setPopupHTML(obj, elementId, popupId, onSuccess, true); } // this has to use a timer loop as we don't know if the DOM element exists when we want to set the text function setPopupHTML (str, elementId, popupId, onSuccess, append) { if (elementId=='popupPreview') { } if (typeof popupId === 'undefined') { //console.error('popupId is not defined in setPopupHTML, html='+str.substring(0,100)); popupId = pg.idNumber; } var popupElement=document.getElementById(elementId+popupId); if (popupElement) { if (!append) { popupElement.innerHTML=''; } if (isString(str)) { popupElement.innerHTML+=str; } else { popupElement.appendChild(str); } if (onSuccess) { onSuccess(); } setTimeout(checkPopupPosition, 100); return true; } else { // call this function again in a little while... setTimeout(function(){ setPopupHTML(str,elementId,popupId,onSuccess); }, 600); } return null; } //<NOLITE> function setPopupTrailer(str,id) {return setPopupHTML(str, 'popupData', id);} //</NOLITE> function fillEmptySpans(args) { return fillEmptySpans2(args); } // args.navpopup is mandatory // optional: args.redir, args.redirTarget // FIXME: ye gods, this is ugly stuff function fillEmptySpans2(args) { // if redir is present and true then redirTarget is mandatory var redir=true; if (typeof args != 'object' || typeof args.redir == 'undefined' || !args.redir) { redir=false; } var a=args.navpopup.parentAnchor; var article, hint=null, oldid=null, params={}; if (redir && typeof args.redirTarget == typeof {}) { article=args.redirTarget; //hint=article.hintValue(); } else { article=(new Title()).fromAnchor(a); hint=a.originalTitle || article.hintValue(); params=parseParams(a.href); oldid=(getValueOf('popupHistoricalLinks')) ? params.oldid : null; rcid=params.rcid; } var x={ article:article, hint: hint, oldid: oldid, rcid: rcid, navpop:args.navpopup, params:params }; var structure=pg.structures[getValueOf('popupStructure')]; if (typeof structure != 'object') { setPopupHTML('popupError', 'Unknown structure (this should never happen): '+ pg.option.popupStructure, args.navpopup.idNumber); return; } var spans=flatten(pg.misc.layout); var numspans = spans.length; var redirs=pg.misc.redirSpans; for (var i=0; i<numspans; ++i) { var f=findThis(redirs, spans[i]); //log('redir='+redir+', f='+f+', spans[i]='+spans[i]); if ( (f!==null && !redir) || (f===null && redir) ) { //log('skipping this set of the loop'); continue; } var structurefn=structure[spans[i]]; var setfn = setPopupHTML; if (getValueOf('popupActiveNavlinks') && (spans[i].indexOf('popupTopLinks')==0 || spans[i].indexOf('popupRedirTopLinks')==0) ) { setfn = setPopupTipsAndHTML; } switch (typeof structurefn) { case 'function': //log('running '+spans[i]+'({article:'+x.article+', hint:'+x.hint+', oldid: '+x.oldid+'})'); setfn(structurefn(x), spans[i], args.navpopup.idNumber); break; case 'string': setfn(structurefn, spans[i], args.navpopup.idNumber); break; default: errlog('unknown thing with label '+spans[i]); break; } } } // flatten an array function flatten(list, start) { var ret=[]; if (typeof start == 'undefined') { start=0; } for (var i=start; i<list.length; ++i) { if (typeof list[i] == typeof []) { return ret.concat(flatten(list[i])).concat(flatten(list, i+1)); } else { ret.push(list[i]); } } return ret; } // Generate html for whole popup function popupHTML (a) { getValueOf('popupStructure'); var structure=pg.structures[pg.option.popupStructure]; if (typeof structure != 'object') { //return 'Unknown structure: '+pg.option.popupStructure; // override user choice pg.option.popupStructure=pg.optionDefault.popupStructure; return popupHTML(a); } if (typeof structure.popupLayout != 'function') { return 'Bad layout'; } pg.misc.layout=structure.popupLayout(); if (typeof structure.popupRedirSpans == 'function') { pg.misc.redirSpans=structure.popupRedirSpans(); } else { pg.misc.redirSpans=[]; } return makeEmptySpans(pg.misc.layout, a.navpopup); } function makeEmptySpans (list, navpop) { var ret=''; for (var i=0; i<list.length; ++i) { if (typeof list[i] == typeof '') { ret += emptySpanHTML(list[i], navpop.idNumber, 'div'); } else if (typeof list[i] == typeof [] && list[i].length > 0 ) { ret = ret.parenSplit(RegExp('(</[^>]*?>$)')).join(makeEmptySpans(list[i], navpop)); } else if (typeof list[i] == typeof {} && list[i].nodeType ) { ret += emptySpanHTML(list[i].name, navpop.idNumber, list[i].nodeType); } } return ret; } function emptySpanHTML(name, id, tag, classname) { tag = tag || 'span'; if (!classname) { classname = emptySpanHTML.classAliases[name]; } classname = classname || name; if (name == getValueOf('popupDragHandle')) { classname += ' popupDragHandle'; } return simplePrintf('<%s id="%s" class="%s"></%s>', [tag, name + id, classname, tag]); } emptySpanHTML.classAliases={ 'popupSecondPreview': 'popupPreview' }; // generate html for popup image // <a id="popupImageLinkn"><img id="popupImagen"> // where n=idNumber function imageHTML(article, idNumber) { return simplePrintf('<a id="popupImageLink$1">' + '<img align="right" valign="top" id="popupImg$1" style="display: none;"></img>' + '</a>', [ idNumber ]); } function popTipsSoonFn(id, when, popData) { when || ( when=250 ); var popTips=function(){ setupTooltips(document.getElementById(id), false, true, popData); }; return function() { setTimeout( popTips, when, popData ); }; } function setPopupTipsAndHTML(html, divname, idnumber, popData) { setPopupHTML(html, divname, idnumber, getValueOf('popupSubpopups') ? popTipsSoonFn(divname + idnumber, null, popData) : null); } // ENDFILE: htmloutput.js // STARTFILE: mouseout.js ////////////////////////////////////////////////// // fuzzy checks function fuzzyCursorOffMenus(x,y, fuzz, parent) { if (!parent) { return null; } var uls=parent.getElementsByTagName('ul'); for (var i=0; i<uls.length; ++i) { if (uls[i].className=='popup_menu') { if (uls[i].offsetWidth > 0) return false; } // else {document.title+='.';} } return true; } function checkPopupPosition () { // stop the popup running off the right of the screen // FIXME avoid pg.current.link pg.current.link && pg.current.link.navpopup && pg.current.link.navpopup.limitHorizontalPosition(); } function mouseOutWikiLink () { if (!window.popupsReady || !window.popupsReady()) { return; } //console ('mouseOutWikiLink'); var a=this; if (a.navpopup==null) return; if ( ! a.navpopup.isVisible() ) { a.navpopup.banish(); return; } Navpopup.tracker.addHook(posCheckerHook(a.navpopup)); } function posCheckerHook(navpop) { return function() { if (!navpop.isVisible()) { return true; /* remove this hook */ } if (Navpopup.tracker.dirty) { return false; } var x=Navpopup.tracker.x, y=Navpopup.tracker.y; var mouseOverNavpop = navpop.isWithin(x,y,navpop.fuzz, navpop.mainDiv) || !fuzzyCursorOffMenus(x,y,navpop.fuzz, navpop.mainDiv); // FIXME it'd be prettier to do this internal to the Navpopup objects var t=getValueOf('popupHideDelay'); if (t) { t = t * 1000; } if (!t) { if(!mouseOverNavpop) { navpop.banish(); return true; /* remove this hook */ } return false; } // we have a hide delay set var d=+(new Date()); if ( !navpop.mouseLeavingTime ) { navpop.mouseLeavingTime = d; return false; } if ( mouseOverNavpop ) { navpop.mouseLeavingTime=null; return false; } if (d - navpop.mouseLeavingTime > t) { navpop.mouseLeavingTime=null; navpop.banish(); return true; /* remove this hook */ } return false; }; } function runStopPopupTimer(navpop) { // at this point, we should have left the link but remain within the popup // so we call this function again until we leave the popup. if (!navpop.stopPopupTimer) { navpop.stopPopupTimer=setInterval(posCheckerHook(navpop), 500); navpop.addHook(function(){clearInterval(navpop.stopPopupTimer);}, 'hide', 'before'); } } // ENDFILE: mouseout.js // STARTFILE: previewmaker.js /** @fileoverview Defines the {@link Previewmaker} object, which generates short previews from wiki markup. */ /** Creates a new Previewmaker @constructor @class The Previewmaker class. Use an instance of this to generate short previews from Wikitext. @param {String} wikiText The Wikitext source of the page we wish to preview. @param {String} baseUrl The url we should prepend when creating relative urls. @param {Navpopup} owner The navpop associated to this preview generator */ function Previewmaker(wikiText, baseUrl, owner) { /** The wikitext which is manipulated to generate the preview. */ this.originalData=wikiText; this.setData(); this.baseUrl=baseUrl; this.owner=owner; this.maxCharacters=getValueOf('popupMaxPreviewCharacters'); this.maxSentences=getValueOf('popupMaxPreviewSentences'); } Previewmaker.prototype.setData=function() { var maxSize=max(10000, 2*this.maxCharacters); this.data=this.originalData.substring(0,maxSize); }; /** Remove HTML comments @private */ Previewmaker.prototype.killComments = function () { // this also kills trailing spaces and one trailing newline, eg [[diamyo]] this.data=this.data.replace(RegExp('<!--[\\s\\S]*?--> *\\n?', 'g'), ''); }; /** @private */ Previewmaker.prototype.killDivs = function () { // say goodbye, divs (can be nested, so use * not *?) this.data=this.data.replace(RegExp('< *div[^>]* *>[\\s\\S]*?< */ *div *>', 'gi'), ''); }; /** @private */ Previewmaker.prototype.killGalleries = function () { this.data=this.data.replace(RegExp('< *gallery[^>]* *>[\\s\\S]*?< */ *gallery *>', 'gi'), ''); }; /** @private */ Previewmaker.prototype.kill = function(opening, closing, subopening, subclosing, repl) { var oldk=this.data; var k=this.killStuff(this.data, opening, closing, subopening, subclosing, repl); while (k.length < oldk.length) { oldk=k; k=this.killStuff(k, opening, closing, subopening, subclosing, repl); } this.data=k; }; /** @private */ Previewmaker.prototype.killStuff = function (txt, opening, closing, subopening, subclosing, repl) { var op=this.makeRegexp(opening); var cl=this.makeRegexp(closing, '^'); var sb=subopening ? this.makeRegexp(subopening, '^') : null; var sc=subclosing ? this.makeRegexp(subclosing, '^') : cl; if (!op || !cl) { alert('Navigation Popups error: op or cl is null! something is wrong.'); return; } if (!op.test(txt)) { return txt; } var ret=''; var opResult = op.exec(txt); ret = txt.substring(0,opResult.index); txt=txt.substring(opResult.index+opResult[0].length); var depth = 1; while (txt.length > 0) { var removal=0; if (depth==1 && cl.test(txt)) { depth--; removal=cl.exec(txt)[0].length; } else if (depth > 1 && sc.test(txt)) { depth--; removal=sc.exec(txt)[0].length; }else if (sb && sb.test(txt)) { depth++; removal=sb.exec(txt)[0].length; } if ( !removal ) { removal = 1; } txt=txt.substring(removal); if (depth==0) { break; } } return ret + (repl || '') + txt; }; /** @private */ Previewmaker.prototype.makeRegexp = function (x, prefix, suffix) { prefix = prefix || ''; suffix = suffix || ''; var reStr=''; var flags=''; if (isString(x)) { reStr=prefix + literalizeRegex(x) + suffix; } else if (isRegExp(x)) { var s=x.toString().substring(1); var sp=s.split('/'); flags=sp[sp.length-1]; sp[sp.length-1]=''; s=sp.join('/'); s=s.substring(0,s.length-1); reStr= prefix + s + suffix; } else { log ('makeRegexp failed'); } log ('makeRegexp: got reStr=' + reStr + ', flags=' + flags); return RegExp(reStr, flags); }; /** @private */ Previewmaker.prototype.killBoxTemplates = function () { // taxobox removal... in fact, there's a saudiprincebox_begin, so let's be more general // also, have float_begin, ... float_end this.kill(RegExp('[{][{][^{}\\s|]*?(float|box)[_ ](begin|start)', 'i'), /[}][}]\s*/, '{{'); // infoboxes etc // from [[User:Zyxw/popups.js]]: kill frames too this.kill(RegExp('[{][{][^{}\\s|]*?(infobox|elementbox|frame)[_ ]', 'i'), /[}][}]\s*/, '{{'); }; /** @private */ Previewmaker.prototype.killTemplates = function () { this.kill('{{', '}}', '{', '}', ' '); }; /** @private */ Previewmaker.prototype.killTables = function () { // tables are bad, too // this can be slow, but it's an inprovement over a browser hang // torture test: [[Comparison_of_Intel_Central_Processing_Units]] this.kill('{|', /[|]}\s*/, '{|'); this.kill(/<table.*?>/i, /<\/table.*?>/i, /<table.*?>/i); // remove lines starting with a pipe for the hell of it (?) this.data=this.data.replace(RegExp('^[|].*$', 'mg'), ''); }; /** @private */ Previewmaker.prototype.killImages = function () { // images and categories are a nono this.kill(RegExp('[[][[]\\s*(Image|File|' + pg.ns.image + '|' + pg.ns.category + ')\\s*:', 'i'), /\]\]\s*/, '[', ']'); }; /** @private */ Previewmaker.prototype.killHTML = function () { // kill <ref ...>...</ref> this.kill(/<ref\b[^/>]*?>/i, /<\/ref>/i); // let's also delete entire lines starting with <. it's worth a try. this.data=this.data.replace(RegExp('(^|\\n) *<.*', 'g'), '\n'); // and those pesky html tags, but not <nowiki> or <blockquote> var splitted=this.data.parenSplit(/(<.*?>)/); var len=splitted.length; for (var i=1; i<len; i=i+2) { switch (splitted[i]) { case '<nowiki>': case '</nowiki>': break; default: if (! /^< *\/? *blockquote\b/i.test(splitted[i])) { splitted[i]=''; } } } this.data=splitted.join(''); }; /** @private */ Previewmaker.prototype.killChunks = function() { // heuristics alert // chunks of italic text? you crazy, man? var italicChunkRegex=new RegExp ("((^|\\n)\\s*:*\\s*''[^']([^']|'''|'[^']){20}(.|\\n[^\\n])*''[.!?\\s]*\\n)+", 'g'); // keep stuff separated, though, so stick in \n (fixes [[Union Jack]]? this.data=this.data.replace(italicChunkRegex, '\n'); }; /** @private */ Previewmaker.prototype.mopup = function () { // we simply *can't* be doing with horizontal rules right now this.data=this.data.replace(RegExp('^-{4,}','mg'),''); // no indented lines this.data=this.data.replace(RegExp('(^|\\n) *:[^\\n]*','g'), ''); // replace __TOC__, __NOTOC__ and whatever else there is // this'll probably do this.data=this.data.replace(RegExp('^__[A-Z_]*__ *$', 'gmi'),''); }; /** @private */ Previewmaker.prototype.firstBit = function () { // dont't be givin' me no subsequent paragraphs, you hear me? /// first we "normalize" section headings, removing whitespace after, adding before var d=this.data; if (getValueOf('popupPreviewCutHeadings')) { this.data=this.data.replace(RegExp('\\s*(==+[^=]*==+)\\s*', 'g'), '\n\n$1 '); /// then we want to get rid of paragraph breaks whose text ends badly this.data=this.data.replace(RegExp('([:;]) *\\n{2,}', 'g'), '$1\n'); this.data=this.data.replace(RegExp('^[\\s\\n]*'), ''); stuff=(RegExp('^([^\\n]|\\n[^\\n\\s])*')).exec(this.data); if (stuff) { d = stuff[0]; } if (!getValueOf('popupPreviewFirstParOnly')) { d = this.data; } /// now put \n\n after sections so that bullets and numbered lists work d=d.replace(RegExp('(==+[^=]*==+)\\s*', 'g'), '$1\n\n'); } // superfluous sentences are RIGHT OUT. // note: exactly 1 set of parens here needed to make the slice work d = d.parenSplit(RegExp('([!?.]+["'+"'"+']*\\s)','g')); // leading space is bad, mmkay? d[0]=d[0].replace(RegExp('^\\s*'), ''); var notSentenceEnds=RegExp('([^.][a-z][.] *[a-z]|etc|sic|Dr|Mr|Mrs|Ms|St|no|op|cit|\\[[^\\]]*|\\s[A-Zvclm])$', 'i'); d = this.fixSentenceEnds(d, notSentenceEnds); this.fullLength=d.join('').length; var maxChars=getValueOf('popupMaxPreviewCharacters') + this.extraCharacters; var n=this.maxSentences; var dd=this.firstSentences(d,n); do { dd=this.firstSentences(d,n); --n; } while ( dd.length > this.maxCharacters && n != 0 ); this.data = dd; }; /** @private */ Previewmaker.prototype.fixSentenceEnds = function(strs, reg) { // take an array of strings, strs // join strs[i] to strs[i+1] & strs[i+2] if strs[i] matches regex reg var abbrevRe=/\b[a-z][^a-z]*$/i; for (var i=0; i<strs.length-2; ++i) { if (reg.test(strs[i])) { a=[]; for (var j=0; j<strs.length; ++j) { if (j<i) a[j]=strs[j]; if (j==i) a[i]=strs[i]+strs[i+1]+strs[i+2]; if (j>i+2) a[j-2]=strs[j]; } return this.fixSentenceEnds(a,reg); } // BUGGY STUFF - trying to fix up [[S. C. Johnson & Son]] preview if (false && abbrevRe.test(strs[i])) { var j=i, buf=''; do { buf=buf+strs[i]+strs[i+1]; i=i+2; } while (i<strs.length-2 && abbrevRe.test(strs[i])); strs[i]=buf+strs[i]; var a=(j?strs.slice(0,j-1):[]).concat(strs.slice(i)); return this.fixSentenceEnds(a,reg); } } return strs; }; /** @private */ Previewmaker.prototype.firstSentences = function(strs, howmany) { var t=strs.slice(0, 2*howmany); return t.join(''); }; /** @private */ Previewmaker.prototype.killBadWhitespace = function() { // also cleans up isolated '''', eg [[Suntory Sungoliath]] this.data=this.data.replace(RegExp('^ *\'+ *$', 'gm'), ''); }; /** Runs the various methods to generate the preview. The preview is stored in the <code>html</html> field. @private */ Previewmaker.prototype.makePreview = function() { if (this.owner.article.namespace()!=pg.ns.template && this.owner.article.namespace()!=pg.ns.image ) { this.killComments(); this.killDivs(); this.killGalleries(); this.killBoxTemplates(); if (getValueOf('popupPreviewKillTemplates')) { this.killTemplates(); } else { this.killMultilineTemplates(); } this.killTables(); this.killImages(); this.killHTML(); this.killChunks(); this.mopup(); this.firstBit(); this.killBadWhitespace(); } else { this.killHTML(); } this.html=wiki2html(this.data, this.baseUrl); // needs livepreview this.fixHTML(); this.stripLongTemplates(); }; /** @private */ Previewmaker.prototype.esWiki2HtmlPart = function(data) { var reLinks = /(?:\[\[([^|\]]*)(?:\|([^|\]]*))*]]([a-z]*))/gi; //match a wikilink reLinks.lastIndex = 0; //reset regex var match; var result = ""; var postfixIndex = 0; while ((match = reLinks.exec(data)) != null) //match all wikilinks { //FIXME: the way that link is built here isn't perfect. It is clickable, but popups preview won't recognize it in some cases. result += escapeQuotesHTML(data.substring(postfixIndex, match.index)) + '<a href="'+Insta.conf.paths.articles+escapeQuotesHTML(match[1])+'">'+escapeQuotesHTML((match[2]?match[2]:match[1])+match[3])+"</a>"; postfixIndex = reLinks.lastIndex; } //append the rest result += escapeQuotesHTML(data.substring(postfixIndex)); return result; }; Previewmaker.prototype.editSummaryPreview=function() { var reAes = /\/\* *(.*?) *\*\//g; //match the first section marker reAes.lastIndex = 0; //reset regex var match; match = reAes.exec(this.data); if (match) { //we have a section link. Split it, process it, combine it. var prefix = this.data.substring(0,match.index-1); var section = match[1]; var postfix = this.data.substring(reAes.lastIndex); var start = "<span class='autocomment'>"; var end = "</span>"; if (prefix.length>0) start = this.esWiki2HtmlPart(prefix) + " " + start + "- "; if (postfix.length>0) end = ": " + end + this.esWiki2HtmlPart(postfix); var t=new Title().fromURL(this.baseUrl); t.anchorFromUtf(section); var sectionLink = Insta.conf.paths.articles + escapeQuotesHTML(t.toString(true)) + '#' + escapeQuotesHTML(t.anchor); return start + '<a href="'+sectionLink+'">&rarr;</a> '+escapeQuotesHTML(section) + end; } //else there's no section link, htmlify the whole thing. return this.esWiki2HtmlPart(this.data); }; //<NOLITE> /** Test function for debugging preview problems one step at a time. */ function previewSteps(txt) { try { txt=txt || document.editform.wpTextbox1.value; } catch (err) { if (pg.cache.pages.length > 0) { txt=pg.cache.pages[pg.cache.pages.length-1].data; } else { alert('provide text or use an edit page'); } } txt=txt.substring(0,10000); var base=pg.wiki.articlebase + Title.fromURL(document.location.href).urlString(); var p=new Previewmaker(txt, base, pg.current.link.navpopup); if (this.owner.article.namespace() != pg.ns.template) { p.killComments(); if (!confirm('done killComments(). Continue?\n---\n' + p.data)) { return; } p.killDivs(); if (!confirm('done killDivs(). Continue?\n---\n' + p.data)) { return; } p.killGalleries(); if (!confirm('done killGalleries(). Continue?\n---\n' + p.data)) { return; } p.killBoxTemplates(); if (!confirm('done killBoxTemplates(). Continue?\n---\n' + p.data)) { return; } if (getValueOf('popupPreviewKillTemplates')) { p.killTemplates(); if (!confirm('done killTemplates(). Continue?\n---\n' + p.data)) { return; } } else { p.killMultilineTemplates(); if (!confirm('done killMultilineTemplates(). Continue?\n---\n' + p.data)) { return; } } p.killTables(); if (!confirm('done killTables(). Continue?\n---\n' + p.data)) { return; } p.killImages(); if (!confirm('done killImages(). Continue?\n---\n' + p.data)) { return; } p.killHTML(); if (!confirm('done killHTML(). Continue?\n---\n' + p.data)) { return; } p.killChunks(); if (!confirm('done killChunks(). Continue?\n---\n' + p.data)) { return; } p.mopup(); if (!confirm('done mopup(). Continue?\n---\n' + p.data)) { return; } p.firstBit(); if (!confirm('done firstBit(). Continue?\n---\n' + p.data)) { return; } p.killBadWhitespace(); if (!confirm('done killBadWhitespace(). Continue?\n---\n' + p.data)) { return; } } p.html=wiki2html(p.data, base); // needs livepreview p.fixHTML(); if (!confirm('done fixHTML(). Continue?\n---\n' + p.html)) { return; } p.stripLongTemplates(); if (!confirm('done stripLongTemplates(). Continue?\n---\n' + p.html)) { return; } alert('finished preview - end result follows.\n---\n' + p.html); } //</NOLITE> /** Works around a quoting bug in livepreview. <code>wiki2html('[[Foo\'s "bar"]]')</code> gives @literal{<a href='Foo's "bar"'>} which doesn't do very well. We change this into @literal{<a href="Foo's %22bar%22">} @private */ Previewmaker.prototype.fixHTML = function() { if(!this.html) return; // all links seem to have potential issues with quotation marks var splitted=this.html.parenSplit(/href='([^>]*)'/g); var ret=''; for (var i=0; i<splitted.length; ++i) { if(i%2==0) { ret += splitted[i]; continue; } if(i%2==1) { ret += 'href="' + splitted[i].split('"').join('%22') + '"'; } } // fix question marks in wiki links // maybe this'll break some stuff :-( ret=ret.replace(RegExp('\(<a href="' + pg.wiki.articlePath + '/[^"]*\)[?]\(.*?"\)', 'g'), '$1%3F$2'); // FIXME fix up % too this.html=ret; }; /** Generates the preview and displays it in the current popup. Does nothing if the generated preview is invalid or consists of whitespace only. Also activates wikilinks in the preview for subpopups if the popupSubpopups option is true. */ Previewmaker.prototype.showPreview = function () { this.makePreview(); if (typeof this.html != typeof '') return; if (RegExp('^\\s*$').test(this.html)) return; setPopupHTML('<hr>', 'popupPrePreviewSep', this.owner.idNumber); setPopupTipsAndHTML(this.html, 'popupPreview', this.owner.idNumber, { owner: this.owner }); var more = (this.fullLength > this.data.length) ? this.moreLink() : ''; setPopupHTML(more, 'popupPreviewMore', this.owner.idNumber); }; /** @private */ Previewmaker.prototype.moreLink=function() { var a=document.createElement('a'); a.className='popupMoreLink'; a.innerHTML=popupString('more...'); var savedThis=this; a.onclick=function() { savedThis.maxCharacters+=2000; savedThis.maxSentences+=20; savedThis.setData(); savedThis.showPreview(); } return a; } /** @private */ Previewmaker.prototype.stripLongTemplates = function() { // operates on the HTML! this.html=this.html.replace(RegExp('^.{0,1000}[{][{][^}]*?(<(p|br)( /)?>\\s*){2,}([^{}]*?[}][}])?', 'gi'), ''); this.html=this.html.split('\n').join(' '); // workaround for <pre> templates this.html=this.html.replace(RegExp('[{][{][^}]*<pre>[^}]*[}][}]','gi'), ''); }; /** @private */ Previewmaker.prototype.killMultilineTemplates = function() { this.kill('{{{', '}}}'); this.kill(RegExp('\\s*[{][{][^{}]*\\n'), '}}', '{{'); }; // ENDFILE: previewmaker.js // STARTFILE: querypreview.js function loadAPIPreview(queryType, article, navpop) { var art=new Title(article).urlString(); var url=pg.wiki.apiwikibase + '?format=json&action=query&'; var htmlGenerator=function(a,d){alert('invalid html generator');}; switch (queryType) { case 'history': url += 'meta=userinfo&uiprop=options&titles=' + art + '&prop=revisions&rvlimit=' + getValueOf('popupHistoryPreviewLimit'); htmlGenerator=APIhistoryPreviewHTML; break; case 'category': url += 'list=categorymembers&cmtitle=' + art; htmlGenerator=APIcategoryPreviewHTML; break; case 'userinfo': var usernameart = encodeURIComponent( new Title( article ).userName() ); url += 'list=users&usprop=blockinfo|groups|editcount|registration&ususers=' + usernameart; htmlGenerator=APIuserInfoPreviewHTML; break; case 'contribs': var usernameart = encodeURIComponent( new Title( article ).userName() ); url += 'list=usercontribs&meta=userinfo&uiprop=options&ucuser=' + usernameart + '&uclimit=' + getValueOf('popupContribsPreviewLimit'); htmlGenerator=APIcontribsPreviewHTML; break; case 'imagepagepreview': var trail=''; if (getValueOf('popupImageLinks')) { trail = '&list=imageusage&iutitle=' + art; } url += 'titles=' + art + '&prop=revisions|imageinfo&rvprop=content' + trail; htmlGenerator=APIimagepagePreviewHTML; break; case 'backlinks': url += 'list=backlinks&bltitle=' + art; htmlGenerator=APIbacklinksPreviewHTML; break; } pendingNavpopTask(navpop); if( !window.wgEnableAPI || !wgEnableAPI ) { /* The API is not available */ htmlGenerator=function(a,d){ return 'This function of navigation popups now requires a MediaWiki ' + 'installation with the <a href="//www.mediawiki.org/wiki/API">API</a> enabled.'; }; } var callback=function(d){ log( "callback of API functions was hit" ); showAPIPreview(queryType, htmlGenerator(article,d,navpop), navpop.idNumber, navpop, d); }; var go = function(){ getPageWithCaching(url, callback, navpop); return true; } if (navpop.visible || !getValueOf('popupLazyDownloads')) { go(); } else { navpop.addHook(go, 'unhide', 'before', 'DOWNLOAD_'+queryType+'_QUERY_DATA'); } } function linkList(list) { list.sort(function(x,y) { return (x==y ? 0 : (x<y ? -1 : 1)); }); var buf=[]; for (var i=0; i<list.length; ++i) { buf.push(wikiLink({article: new Title(list[i]), text: list[i].split(' ').join('&nbsp;'), action: 'view'})); } return buf.join(', '); } function getTimeOffset(tz) { if( tz ) { if( tz.indexOf('|') > -1 ) { // New format return parseInt(tz.split('|')[1],10); } else if ( tz.indexOf(':') > -1 ) { // Old format return( parseInt(tz,10)*60 + parseInt(tz.split(':')[1],10) ); } } return 0; } function editPreviewTable(article, h, reallyContribs, timeOffset) { var html=['<table>']; var day=null; var curart=article; for (var i=0; i<h.length; ++i) { if (reallyContribs) { var page=h[i]['title']; curart = new Title(page); } var minor=typeof h[i]['minor']=='undefined' ? '' : '<b>m </b>'; var editDate=adjustDate(getDateFromTimestamp(h[i].timestamp), timeOffset); var thisDay = dayFormat(editDate); var thisTime = timeFormat(editDate); if (thisDay==day) { thisDay=''; } else { day=thisDay; } if (thisDay) { html.push( '<tr><td colspan=3><span class="popup_history_date">' + thisDay+'</span></td></tr>' ); } html.push('<tr class="popup_history_row_' + ( (i%2) ? 'odd' : 'even') + '">'); html.push('<td>(<a href="' + pg.wiki.titlebase + new Title(curart).urlString() + '&diff=prev&oldid=' + h[i]['revid'] + '">' + popupString('last') + '</a>)</td>'); html.push('<td>' + '<a href="' + pg.wiki.titlebase + new Title(curart).urlString() + '&oldid=' + h[i]['revid'] + '">' + thisTime + '</a></td>'); var col3url='', col3txt=''; if (!reallyContribs) { var user=h[i]['user']; col3url=pg.wiki.titlebase + pg.ns.user + ':' + new Title(user).urlString(); col3txt=escapeQuotesHTML(user); } else { col3url=pg.wiki.titlebase + curart.urlString(); col3txt=escapeQuotesHTML(page); } html.push('<td>' + (reallyContribs ? minor : '') + '<a href="' + col3url + '">' + col3txt + '</a></td>'); var comment=''; var c=h[i].comment || h[i]['*']; if (c) { comment=new Previewmaker(c, new Title(curart).toUrl()).editSummaryPreview(); } html.push('<td>' + (!reallyContribs ? minor : '') + comment + '</td>'); html.push('</tr>'); html=[html.join('')]; } html.push('</table>'); return html.join(''); } function getDateFromTimestamp(t) { var s=t.split(/[^0-9]/); switch(s.length) { case 0: return null; case 1: return new Date(s[0]); case 2: return new Date(s[0], s[1]-1); case 3: return new Date(s[0], s[1]-1, s[2]); case 4: return new Date(s[0], s[1]-1, s[2], s[3]); case 5: return new Date(s[0], s[1]-1, s[2], s[3], s[4]); case 6: return new Date(s[0], s[1]-1, s[2], s[3], s[4], s[5]); default: return new Date(s[0], s[1]-1, s[2], s[3], s[4], s[5], s[6]); } } function adjustDate(d, offset) { // offset is in minutes var o=offset * 60 * 1000; return new Date( +d + o); } function dayFormat(editDate, utc) { if (utc) { return map(zeroFill, [editDate.getUTCFullYear(), editDate.getUTCMonth()+1, editDate.getUTCDate()]).join('-'); } return map(zeroFill, [editDate.getFullYear(), editDate.getMonth()+1, editDate.getDate()]).join('-'); } function timeFormat(editDate, utc) { if (utc) { return map(zeroFill, [editDate.getUTCHours(), editDate.getUTCMinutes(), editDate.getUTCSeconds()]).join(':'); } return map(zeroFill, [editDate.getHours(), editDate.getMinutes(), editDate.getSeconds()]).join(':'); } function showAPIPreview(queryType, html, id, navpop, download) { // DJ: done var target='popupPreview'; switch (queryType) { case 'imagelinks': case 'category': case 'userinfo': target='popupPostPreview'; break; } setPopupTipsAndHTML(html, target, id); completedNavpopTask(navpop); } function APIbacklinksPreviewHTML(article, download, navpop) { try { var jsObj=getJsObj(download.data); var list=jsObj.query.backlinks; } catch (someError) { return 'backlinksPreviewHTML went wonky'; } var html=[]; if (!list) { return popupString('No backlinks found'); } for ( i in list ) { var t=new Title(list[i]['title']); html.push('<a href="' + pg.wiki.titlebase + t.urlString() + '">' + t + '</a>'); } html=html.join(', '); if (jsObj['query-continue'] && jsObj['query-continue'].backlinks && jsObj['query-continue'].backlinks.blcontinue) { html += popupString(' and more'); } return html; } function APIsharedImagePagePreviewHTML(obj) { log( "APIsharedImagePagePreviewHTML" ); var popupid = obj['requestid']; if( obj['query'] && obj['query']['pages'] ) { var page=anyChild(obj['query']['pages']); var content=(page && page.revisions ) ? page.revisions[0]['*'] : null; if( content ) { /* Not entirely safe, but the best we can do */ var p=new Previewmaker(content, pg.current.link.navpopup.article, pg.current.link.navpopup); p.makePreview(); setPopupHTML( p.html, "popupSecondPreview", popupid ); } } } function APIimagepagePreviewHTML(article, download, navpop) { try { var jsObj=getJsObj(download.data); var page=anyChild(jsObj.query.pages); var content=(page && page.revisions ) ? page.revisions[0]['*'] : null; } catch (someError) { return 'API imagepage preview failed :('; } var ret=''; if (content) { var p=prepPreviewmaker(content, article, navpop); p.makePreview(); if (p.html) { ret += '<hr>' + p.html; } } if (content!==null && getValueOf('popupSummaryData')) { var info=getPageInfo(content, download); log(info); setPopupTrailer(info, navpop.idNumber); } if (page && page.imagerepository == "shared" ) { var art=new Title(article).urlString(); var encart = encodeURIComponent( "File:" + art.stripNamespace() ); var shared_url = pg.wiki.apicommonsbase + '?format=json&callback=APIsharedImagePagePreviewHTML' + '&requestid=' + navpop.idNumber + '&action=query&prop=revisions&rvprop=content&titles=' + encart; ret = ret +'<hr>' + popupString( 'Image from Commons') + ': <a href="' + pg.wiki.commonsbase + '?title=' + encart + '">' + popupString( 'Description page') + '</a>'; importScriptURI( shared_url ); } showAPIPreview('imagelinks', APIimagelinksPreviewHTML(article,download), navpop.idNumber, download); return ret; } function APIimagelinksPreviewHTML(article, download) { try { var jsobj=getJsObj(download.data); var list=jsobj.query.imageusage; if (!list) { return popupString('No image links found'); } } catch(someError) { return 'Image links preview generation failed :('; } var ret=[]; for (var i=0; i < list.length; i++) { ret.push(list[i]['title']); } if (ret.length === 0) { return popupString('No image links found'); } return '<h2>' + popupString('File links') + '</h2>' + linkList(ret); } function APIcategoryPreviewHTML(article, download) { try{ var jsobj=getJsObj(download.data); var list=jsobj.query.categorymembers; } catch(someError) { return 'Category preview failed :('; } var ret=[]; for (var p=0; p < list.length; p++) { ret.push(list[p]['title']); } if (ret.length === 0) { return popupString('Empty category'); } ret = '<h2>' + tprintf('Category members (%s shown)', [ret.length]) + '</h2>' +linkList(ret); if (jsobj['query-continue'] && jsobj['query-continue'].categorymembers && jsobj['query-continue'].categorymembers.cmcontinue) { ret += popupString(' and more'); } return ret; } function APIuserInfoPreviewHTML(article, download) { try{ var jsobj=getJsObj(download.data); var user=anyChild(jsobj.query.users); } catch(someError) { return 'Userinfo preview failed :('; } if (!user || user.invalid == '') { return '<hr>' + popupString( 'Invalid or IP user'); } else if (user.missing == '') { return '<hr>' + popupString( 'Not a registered username'); } var ret=[]; if( user.blockedby ) ret.push('<b>' + popupString('BLOCKED') + '</b>'); for( var i=0; (user.groups && i < user.groups.length); i++) { ret.push( user.groups[i] ); } if( user.editcount || user.registration ) ret.push( (user.editcount?user.editcount:'') + popupString(' edits since: ') + (user.registration?dayFormat(getDateFromTimestamp(user.registration)):'') ); ret = '<hr>' + ret.join( ', ' ); return ret; } function APIcontribsPreviewHTML(article, download, navpop) { return APIhistoryPreviewHTML(article, download, navpop, true); } function APIhistoryPreviewHTML(article, download, navpop, reallyContribs) { try { var jsobj=getJsObj(download.data); var tz=jsobj.query.userinfo.options.timecorrection; if( reallyContribs ) var edits=jsobj.query.usercontribs; else var edits=anyChild(jsobj.query.pages)['revisions']; } catch (someError) { return 'History preview failed :-('; } var timeOffset = getTimeOffset(tz); Cookie.create('popTz', timeOffset, 1); var ret=editPreviewTable(article, edits, reallyContribs, timeOffset); return ret; } //</NOLITE> // ENDFILE: querypreview.js // STARTFILE: debug.js //////////////////////////////////////////////////////////////////// // Debugging functions //////////////////////////////////////////////////////////////////// function log(){}; // dummy to stop errors function setupDebugging() { //<NOLITE> if (window.popupDebug) { // popupDebug is set from .version window.log=function(x) { //if(gMsg!='')gMsg += '\n'; gMsg+=time() + ' ' + x; }; window.console.log(x); } window.errlog=function(x) { window.console.error(x); } log('Initializing logger'); } else { //</NOLITE> window.log = function(x) {}; window.errlog = function(x) {}; //<NOLITE> } //</NOLITE> } // ENDFILE: debug.js // STARTFILE: images.js // load image of type Title. function loadImage(image, navpop) { if (typeof image.stripNamespace != 'function') { alert('loadImages bad'); } // API call to retrieve image info. if (!getValueOf('popupImages') || !window.wgEnableAPI || !wgEnableAPI) return; if (!isValidImageName(image)) return false; var art=image.urlString(); var url=pg.wiki.apiwikibase + '?format=json&action=query'; url += '&prop=imageinfo&iiprop=url|mime&iiurlwidth=' + getValueOf('popupImageSizeLarge');; url += '&titles=' + art; pendingNavpopTask(navpop); var callback=function(d){ popupsInsertImage(navpop.idNumber, navpop, d); }; var go = function(){ getPageWithCaching(url, callback, navpop); return true; } if (navpop.visible || !getValueOf('popupLazyDownloads')) { go(); } else { navpop.addHook(go, 'unhide', 'after', 'DOWNLOAD_IMAGE_QUERY_DATA'); } } function popupsInsertImage(id, navpop, download) { log( "popupsInsertImage"); try { var jsObj=getJsObj(download.data); var imagepage=anyChild(jsObj.query.pages); var imageinfo = imagepage.imageinfo[0]; } catch (someError) { log( "popupsInsertImage failed :(" ); return; } var popupImage = document.getElementById("popupImg"+id); if (!popupImage) { log( "could not find insertion point for image"); return; } popupImage.width=getValueOf('popupImageSize'); popupImage.style.display='inline'; // Set the source for the image. if( imageinfo.thumburl ) popupImage.src=imageinfo.thumburl; else if( imageinfo.mime.indexOf("image") == 0 ){ popupImage.src=imageinfo.url; log( "a thumb could not be found, using original image" ); } else log( "fullsize imagethumb, but not sure if it's an image"); var a=document.getElementById("popupImageLink"+id); if (a === null) { return null; } // Determine the action of the surrouding imagelink. switch (getValueOf('popupThumbAction')) { case 'imagepage': if (pg.current.article.namespace()!=pg.ns.image) { a.href=imageinfo.descriptionurl; // FIXME: unreliable pg.idNumber popTipsSoonFn('popupImage' + id)(); break; } // else fall through case 'sizetoggle': a.onclick=toggleSize; a.title=popupString('Toggle image size'); return; case 'linkfull': a.href = imageinfo.url; a.title=popupString('Open full-size image'); return; } } // Toggles the image between inline small and navpop fullwidth. // It's the same image, no actual sizechange occurs, only display width. function toggleSize() { var imgContainer=this; if (!imgContainer) { alert('imgContainer is null :/'); return;} img=imgContainer.firstChild; if (!img) { alert('img is null :/'); return;} if (!img.style.width || img.style.width=='') { img.style.width='100%'; } else { img.style.width=''; } } // Returns one title of an image from wikiText. function getValidImageFromWikiText(wikiText) { // nb in pg.re.image we're interested in the second bracketed expression // this may change if the regex changes :-( //var match=pg.re.image.exec(wikiText); var matched=null; var match; // strip html comments, used by evil bots :-( var t = removeMatchesUnless(wikiText, RegExp('(<!--[\\s\\S]*?-->)'), 1, RegExp('^<!--[^[]*popup', 'i')); while ( match = pg.re.image.exec(t) ) { // now find a sane image name - exclude templates by seeking { var m = match[2] || match[6]; if ( isValidImageName(m) ) { matched=m; break; } } pg.re.image.lastIndex=0; if (!matched) { return null; } return pg.ns.image+':'+upcaseFirst(matched); } function removeMatchesUnless(str, re1, parencount, re2) { var split=str.parenSplit(re1); var c=parencount + 1; for (var i=0; i<split.length; ++i) { if ( i%c === 0 || re2.test(split[i]) ) { continue; } split[i]=''; } return split.join(''); } //</NOLITE> // ENDFILE: images.js // STARTFILE: namespaces.js // Set up namespaces and other non-strings.js localization // (currently that means redirs too) // Put the right namespace list into pg.ns.list, based on pg.wiki.lang // Default to english if nothing seems to fit function setNamespaceList() { var m="Media"; var list = [m, "Special", "Talk", "User", "User talk", "Wikipedia", "Wikipedia talk", "File", "File talk", "MediaWiki", "MediaWiki talk", "Template", "Template talk", "Help", "Help talk", "Category", "Category talk", "Portal", "Portal talk"]; var nsIndex = { '': 0, 'Special': 1, 'Talk': 2, 'User': 3, 'User talk': 4, 'Wikipedia': 5, 'Wikipedia talk': 6, 'Image': 7, 'File': 7, 'Image talk': 8, 'File talk' : 8, 'MediaWiki': 9, 'MediaWiki talk': 10, 'Template': 11, 'Template talk': 12, 'Help': 13, 'Help talk': 14, 'Category': 15, 'Category talk':16, 'Portal': 17, 'Portal talk': 18}; var nsLists = { //<NOLITE> "af": [m, "Spesiaal", "Bespreking", "Gebruiker", "Gebruikerbespreking", "Wikipedia", "Wikipediabespreking", "Beeld", "Beeldbespreking", "MediaWiki", "MediaWikibespreking", "Sjabloon", "Sjabloonbespreking", "Hulp", "Hulpbespreking", "Kategorie", "Kategoriebespreking"], "als": [m, "Spezial", "Diskussion", "Benutzer", "Benutzer Diskussion", "Wikipedia", "Wikipedia Diskussion", "Bild", "Bild Diskussion", "MediaWiki", "MediaWiki Diskussion", "Vorlage", "Vorlage Diskussion", "Hilfe", "Hilfe Diskussion", "Kategorie", "Kategorie Diskussion"], "ar": ["ملف", "خاص", "نقاش", "مستخدم", "نقاش المستخدم", "ويكيبيديا", "نقاش ويكيبيديا", "صورة", "نقاش الصورة", "ميدياويكي", "نقاش ميدياويكي", "Template", "نقاش Template", "مساعدة", "نقاش المساعدة", "تصنيف", "نقاش التصنيف"], "ast": [m, "Especial", "Discusión", "Usuariu", "Usuariu discusión", "Uiquipedia", "Uiquipedia discusión", "Imaxen", "Imaxen discusión", "MediaWiki", "MediaWiki discusión", "Plantilla", "Plantilla discusión", "Ayuda", "Ayuda discusión", "Categoría", "Categoría discusión"], "be": ["Мэдыя", "Спэцыяльныя", "Абмеркаваньне", "Удзельнік", "Гутаркі ўдзельніка", "Вікіпэдыя", "Абмеркаваньне Вікіпэдыя", "Выява", "Абмеркаваньне выявы", "MediaWiki", "Абмеркаваньне MediaWiki", "Шаблён", "Абмеркаваньне шаблёну", "Дапамога", "Абмеркаваньне дапамогі", "Катэгорыя", "Абмеркаваньне катэгорыі"], "bg": ["Медия", "Специални", "Беседа", "Потребител", "Потребител беседа", "Уикипедия", "Уикипедия беседа", "Картинка", "Картинка беседа", "МедияУики", "МедияУики беседа", "Шаблон", "Шаблон беседа", "Помощ", "Помощ беседа", "Категория", "Категория беседа"], "bm": [m, "Special", "Discuter", "Utilisateur", "Discussion Utilisateur", "Wikipedia", "Discussion Wikipedia", "Image", "Discussion Image", "MediaWiki", "Discussion MediaWiki", "Modèle", "Discussion Modèle", "Aide", "Discussion Aide", "Catégorie", "Discussion Catégorie"], "bn": ["বিশেষ", "আলাপ", "ব্যবহারকারী", "ব্যবহারকারী আলাপ", "উইকিপেডিয়া", "উইকিপেডিয়া আলাপ", "চিত্র", "চিত্র আলাপ", "MediaWik i আলাপ", m, "MediaWiki", "Template", "Template talk", "Help", "Help talk", "Category", "Category talk"], "br": [m, "Dibar", "Kaozeal", "Implijer", "Kaozeadenn Implijer", "Wikipedia", "Kaozeadenn Wikipedia", "Skeudenn", "Kaozeadenn Skeudenn", "MediaWiki", "Kaozeadenn MediaWiki", "Patrom", "Kaozeadenn Patrom", "Skoazell", "Kaozeadenn Skoazell", "Rummad", "Kaozeadenn Rummad"], "ca": [m, "Especial", "Discussió", "Usuari", "Usuari Discussió", "Viquipèdia", "Viquipèdia Discussió", "Imatge", "Imatge Discussió", "MediaWiki", "MediaWiki Discussió", "Template", "Template Discussió", "Ajuda", "Ajuda Discussió", "Categoria", "Categoria Discussió"], "cs": ["Média", "Speciální", "Diskuse", "Wikipedista", "Wikipedista diskuse", "Wikipedie", "Wikipedie diskuse", "Soubor", "Soubor diskuse", "MediaWiki", "MediaWiki diskuse", "Šablona", "Šablona diskuse", "Nápověda", "Nápověda diskuse", "Kategorie", "Kategorie diskuse"], "csb": [m, "Specjalnô", "Diskùsëjô", "Brëkòwnik", "Diskùsëjô brëkòwnika", "Wiki", "Diskùsëjô Wiki", "Òbrôzk", "Diskùsëjô òbrôzków", "MediaWiki", "Diskùsëjô MediaWiki", "Szablóna", "Diskùsëjô Szablónë", "Pòmòc", "Diskùsëjô Pòmòcë", "Kategòrëjô", "Diskùsëjô Kategòrëji"], "cv": ["Медиа", "Ятарлă", "Сӳтсе явасси", "Хутшăнакан", "Хутшăнаканăн канашлу страници", "Wikipedia", "0", "Ӳкерчĕк", "Ӳкерчĕке сӳтсе явмалли", "MediaWiki", "MediaWiki сӳтсе явмалли", "Шаблон", "Шаблона сӳтсе явмалли", "Пулăшу", "Пулăшăва сӳтсе явмалли", "Категори", "Категорине сӳтсе явмалли"], "cy": [m, "Arbennig", "Sgwrs", "Defnyddiwr", "Sgwrs Defnyddiwr", "Wicipedia", "Sgwrs Wicipedia", "Delwedd", "Sgwrs Delwedd", "MediaWiki", "Sgwrs MediaWiki", "Nodyn", "Sgwrs Nodyn", "Help", "Help talk", "Category", "Category talk"], "da": [m, "Speciel", "Diskussion", "Bruger", "Brugerdiskussion", "Wikipedia", "Wikipedia-diskussion", "Billede", "Billeddiskussion", "MediaWiki", "MediaWiki-diskussion", "Skabelon", "Skabelondiskussion", "Hjælp", "Hjælpdiskussion", "Kategori", "Kategoridiskussion", "Portal", "Portaldiskussion"], "de": [m, "Spezial", "Diskussion", "Benutzer", "Benutzer Diskussion", "Wikipedia", "Wikipedia Diskussion", "Bild", "Bild Diskussion", "MediaWiki", "MediaWiki Diskussion", "Vorlage", "Vorlage Diskussion", "Hilfe", "Hilfe Diskussion", "Kategorie", "Kategorie Diskussion", "Portal", "Portal Diskussion"], "el": ["Μέσον", "Ειδικό", "Συζήτηση", "Χρήστης", "Συζήτηση χρήστη", "Βικιπαίδεια", "Βικιπαίδεια συζήτηση", "Εικόνα", "Συζήτηση εικόνας", "MediaWiki", "MediaWiki talk", "Πρότυπο", "Συζήτηση προτύπου", "Βοήθεια", "Συζήτηση βοήθειας", "Κατηγορία", "Συζήτηση κατηγορίας"], "eo": [m, "Speciala", "Diskuto", "Uzanto", "Uzanta diskuto", "Vikipedio", "Vikipedio diskuto", "Dosiero", "Dosiera diskuto", "MediaWiki", "MediaWiki diskuto", "Ŝablono", "Ŝablona diskuto", "Helpo", "Helpa diskuto", "Kategorio", "Kategoria diskuto"], "es": [m, "Especial", "Discusión", "Usuario", "Usuario Discusión", "Wikipedia", "Wikipedia Discusión", "Imagen", "Imagen Discusión", "MediaWiki", "MediaWiki Discusión", "Plantilla", "Plantilla Discusión", "Ayuda", "Ayuda Discusión", "Categoría", "Categoría Discusión"], "et": ["Meedia", "Eri", "Arutelu", "Kasutaja", "Kasutaja arutelu", "Vikipeedia", "Vikipeedia arutelu", "Pilt", "Pildi arutelu", "MediaWiki", "MediaWiki arutelu", "Mall", "Malli arutelu", "Juhend", "Juhendi arutelu", "Kategooria", "Kategooria arutelu"], "eu": [m, "Aparteko", "Eztabaida", "Lankide", "Lankide eztabaida", "Wikipedia", "Wikipedia eztabaida", "Irudi", "Irudi eztabaida", "MediaWiki", "MediaWiki eztabaida", "Template", "Template talk", "Help", "Help talk", "Category", "Category talk"], "fa": ["مدیا", "ویژه", "بحث", "کاربر", "بحث کاربر", "ویکی‌پدیا", "بحث ویکی‌پدیا", "تصویر", "بحث تصویر", "مدیاویکی", "بحث مدیاویکی", "الگو", "بحث الگو", "راهنما", "بحث راهنما", "رده", "بحث رده"], "fi": [m, "Toiminnot", "Keskustelu", "Käyttäjä", "Keskustelu käyttäjästä", "Wikipedia", "Keskustelu Wikipediasta", "Kuva", "Keskustelu kuvasta", "MediaWiki", "MediaWiki talk", "Malline", "Keskustelu mallineesta", "Ohje", "Keskustelu ohjeesta", "Luokka", "Keskustelu luokasta"], "fo": ["Miðil", "Serstakur", "Kjak", "Brúkari", "Brúkari kjak", "Wikipedia", "Wikipedia kjak", "Mynd", "Mynd kjak", "MidiaWiki", "MidiaWiki kjak", "Fyrimynd", "Fyrimynd kjak", "Hjálp", "Hjálp kjak", "Bólkur", "Bólkur kjak"], "fr": [m, "Spécial", "Discuter", "Utilisateur", "Discussion Utilisateur", "Wikipédia", "Discussion Wikipédia", "Image", "Discussion Image", "MediaWiki", "Discussion MediaWiki", "Modèle", "Discussion Modèle", "Aide", "Discussion Aide", "Catégorie", "Discussion Catégorie", "Portail", "Discussion Portail"], "fur": [m, "Speciâl", "Discussion", "Utent", "Discussion utent", "Vichipedie", "Discussion Vichipedie", "Figure", "Discussion figure", "MediaWiki", "Discussion MediaWiki", "Model", "Discussion model", "Jutori", "Discussion jutori", "Categorie", "Discussion categorie"], "fy": [m, "Wiki", "Oerlis", "Meidogger", "Meidogger oerlis", "Wikipedy", "Wikipedy oerlis", "Ofbyld", "Ofbyld oerlis", "MediaWiki", "MediaWiki oerlis", "Berjocht", "Berjocht oerlis", "Hulp", "Hulp oerlis", "Kategory", "Kategory oerlis"], "ga": ["Meán", "Speisialta", "Plé", "Úsáideoir", "Plé úsáideora", "Vicipéid", "Plé Vicipéide", "Íomhá", "Plé íomhá", "MediaWiki", "Plé MediaWiki", "Teimpléad", "Plé teimpléid", "Cabhair", "Plé cabhrach", "Catagóir", "Plé catagóire"], "gl": [m, "Especial", "Conversa", "Usuario", "Conversa usuario", "Wikipedia", "Conversa Wikipedia", "Ficheiro", "Conversa ficheiro", "MediaWiki", "Conversa MediaWiki", "Modelo", "Conversa modelo", "Axuda", "Conversa axuda", "Categoría", "Conversa categoría", "Portal", "Portal talk"], "gu": [m, "Special", "Talk", "User", "User talk", "વિકિપીડિયા", "વિકિપીડિયા talk", "Image", "Image talk", "MediaWiki", "MediaWiki talk", "Template", "Template talk", "Help", "Help talk", "Category", "Category talk"], "he": [m, "מיוחד", "שיחה", "משתמש", "שיחת משתמש", "ויקיפדיה", "שיחת ויקיפדיה", "תמונה", "שיחת תמונה", "MediaWiki", "שיחת MediaWiki", "תבנית", "שיחת תבנית", "עזרה", "שיחת עזרה", "קטגוריה", "שיחת קטגוריה"], "hi": [m, "विशेष", "वार्ता", "सदस्य", "सदस्य वार्ता", "विकिपीडिया", "विकिपीडिया वार्ता", "चित्र", "चित्र वार्ता", "MediaWiki", "MediaWiki talk", "Template", "Template talk", "श्रेणी", "श्रेणी वार्ता", "Help", "Help talk"], "hr": ["Mediji", "Posebno", "Razgovor", "Suradnik", "Razgovor sa suradnikom", "Wikipedia", "Razgovor Wikipedia", "Slika", "Razgovor o slici", "MediaWiki", "MediaWiki razgovor", "Predložak", "Razgovor o predlošku", "Pomoć", "Razgovor o pomoći", "Kategorija", "Razgovor o kategoriji"], "hu": [ "Média", "Speciális", "Vita", "Szerkesztő", "Szerkesztővita", "Wikipédia", "Wikipédia-vita", "Kép", "Képvita", "MediaWiki", "MediaWiki-vita", "Sablon", "Sablonvita", "Segítség", "Segítségvita", "Kategória", "Kategóriavita", "Portál", "Portálvita"], "ia": [m, "Special", "Discussion", "Usator", "Discussion Usator", "Wikipedia", "Discussion Wikipedia", "Imagine", "Discussion Imagine", "MediaWiki", "Discussion MediaWiki", "Template", "Template talk", "Help", "Help talk", "Category", "Category talk"], "id": [m, "Istimewa", "Bicara", "Pengguna", "Bicara Pengguna", "Wikipedia", "Pembicaraan Wikipedia", "Gambar", "Pembicaraan Gambar", "MediaWiki", "Pembicaraan MediaWiki", "Templat", "Pembicaraan Templat", "Bantuan", "Pembicaraan Bantuan", "Kategori", "Pembicaraan Kategori"], "is": ["Miðill", "Kerfissíða", "Spjall", "Notandi", "Notandaspjall", "Wikipedia", "Wikipediaspjall", "Mynd", "Myndaspjall", "Melding", "Meldingarspjall", "Snið", "Sniðaspjall", "Hjálp", "Hjálparspjall", "Flokkur", "Flokkaspjall"], "it": [m, "Speciale", "Discussione", "Utente", "Discussioni utente", "Wikipedia", "Discussioni Wikipedia", "File", "Discussioni file", "MediaWiki", "Discussioni MediaWiki", "Template", "Discussioni template", "Aiuto", "Discussioni aiuto", "Categoria", "Discussioni categoria", "Portale", "Discussioni portale", "Progetto", "Discussioni progetto"], "ja": [m, "特別", "ノート", "利用者", "利用者‐会話", "Wikipedia", "Wikipedia‐ノート", "画像", "画像‐ノート", "MediaWiki", "MediaWiki‐ノート", "Template", "Template‐ノート", "Help", "Help‐ノート", "Category", "Category‐ノート"], "ka": ["მედია", "სპეციალური", "განხილვა", "მომხმარებელი", "მომხმარებელი განხილვა", "ვიკიპედია", "ვიკიპედია განხილვა", "სურათი", "სურათი განხილვა", "მედიავიკი", "მედიავიკი განხილვა", "თარგი", "თარგი განხილვა", "დახმარება", "დახმარება განხილვა", "კატეგორია", "კატეგორია განხილვა"], "ko": [m, "특수기능", "토론", "사용자", "사용자토론", "위키백과", "위키백과토론", "그림", "그림토론", "분류", "분류토론", "MediaWiki", "MediaWiki talk", "Template", "Template talk", "Help", "Help talk"], "ku": ["Medya", "Taybet", "Nîqaş", "Bikarhêner", "Bikarhêner nîqaş", "Wîkîpediya", "Wîkîpediya nîqaş", "Wêne", "Wêne nîqaş", "MediaWiki", "MediaWiki nîqaş", "Şablon", "Şablon nîqaş", "Alîkarî", "Alîkarî nîqaş", "Kategorî", "Kategorî nîqaş"], "la": ["Specialis", "Disputatio", "Usor", "Disputatio Usoris", "Vicipaedia", "Disputatio Vicipaediae", "Imago", "Disputatio Imaginis", "MediaWiki", "Disputatio MediaWiki", "Formula", "Disputatio Formulae", "Auxilium", "Disputatio Auxilii", "Categoria", "Disputatio Categoriae", m], "li": [m, "Speciaal", "Euverlik", "Gebroeker", "Euverlik gebroeker", "Wikipedia", "Euverlik Wikipedia", "Aafbeilding", "Euverlik afbeelding", "MediaWiki", "Euverlik MediaWiki", "Sjabloon", "Euverlik sjabloon", "Help", "Euverlik help", "Kategorie", "Euverlik kategorie"], "lt": ["Medija", "Specialus", "Aptarimas", "Naudotojas", "Naudotojo aptarimas", "Wikipedia", "Wikipedia aptarimas", "Vaizdas", "Vaizdo aptarimas", "MediaWiki", "MediaWiki aptarimas", "Šablonas", "Šablono aptarimas", "Pagalba", "Pagalbos aptarimas", "Kategorija", "Kategorijos aptarimas"], "mk": ["Медија", "Специјални", "Разговор", "Корисник", "Корисник разговор", "Wikipedia", "Wikipedia разговор", "Слика", "Слика разговор", "МедијаВики", "МедијаВики разговор", "Шаблон", "Шаблон разговор", "Помош", "Помош разговор", "Категорија", "Категорија разговор"], "ms": [m, "Istimewa", "Perbualan", "Pengguna", "Perbualan Pengguna", "Wikipedia", "Perbualan Wikipedia", "Imej", "Imej Perbualan", "MediaWiki", "MediaWiki Perbualan", "Template", "Template talk", "Help", "Help talk", "Category", "Category talk"], "mt": [m, "Special", "Talk", "User", "User talk", "Wikipedija", "Wikipedija talk", "Image", "Image talk", "MediaWiki", "MediaWiki talk", "Template", "Template talk", "Help", "Help talk", "Category", "Category talk"], "nap": [m, "Speciale", "Discussione", "Utente", "Discussioni utente", "Wikipedia", "Discussioni Wikipedia", "Immagine", "Discussioni immagine", "MediaWiki", "Discussioni MediaWiki", "Template", "Discussioni template", "Aiuto", "Discussioni aiuto", "Categoria", "Discussioni categoria"], "nds": [m, "Spezial", "Diskuschoon", "Bruker", "Bruker Diskuschoon", "Wikipedia", "Wikipedia Diskuschoon", "Bild", "Bild Diskuschoon", "MediaWiki", "MediaWiki Diskuschoon", "Vörlaag", "Vörlaag Diskuschoon", "Hülp", "Hülp Diskuschoon", "Kategorie", "Kategorie Diskuschoon"], "nl": [m, "Speciaal", "Overleg", "Gebruiker", "Overleg gebruiker", "Wikipedia", "Overleg Wikipedia", "Bestand", "Overleg bestand", "MediaWiki", "Overleg MediaWiki", "Sjabloon", "Overleg sjabloon", "Help", "Overleg help", "Categorie", "Overleg categorie"], "nn": ["Filpeikar", "Spesial", "Diskusjon", "Brukar", "Brukardiskusjon", "Wikipedia", "Wikipedia-diskusjon", "Fil", "Fildiskusjon", "MediaWiki", "MediaWiki-diskusjon", "Mal", "Maldiskusjon", "Hjelp", "Hjelpdiskusjon", "Kategori", "Kategoridiskusjon"], "no": ["Medium", "Spesial", "Diskusjon", "Bruker", "Brukerdiskusjon", "Wikipedia", "Wikipedia-diskusjon", "Bilde", "Bildediskusjon", "MediaWiki", "MediaWiki-diskusjon", "Mal", "Maldiskusjon", "Hjelp", "Hjelpdiskusjon", "Kategori", "Kategoridiskusjon"], "nv": [m, "Special", "Naaltsoos baa yinísht'į́", "Choinish'įįhí", "Choinish'įįhí baa yinísht'į́", "Wikiibíídiiya", "Wikiibíídiiya baa yinísht'į́", "E'elyaaígíí", "E'elyaaígíí baa yinísht'į́", "MediaWiki", "MediaWiki baa yinísht'į́", "Template", "Template talk", "Aná'álwo'", "Aná'álwo' baa yinísht'į́", "T'ááłáhági át'éego", "T'ááłáhági át'éego baa yinísht'į́"], "oc": ["Especial", "Discutir", "Utilisator", "Discutida Utilisator", "Oiquipedià", "Discutida Oiquipedià", "Image", "Discutida Image", "MediaWiki", "MediaWiki talk", "Template", "Template talk", m, "Help", "Help talk", "Category", "Category talk"], "os": [m, "Сæрмагонд", "Дискусси", "Архайæг", "Архайæджы дискусси", "Wikipedia", "0", "Ныв", "Нывы тыххæй дискусси", "MediaWiki", "Дискусси MediaWiki", "Шаблон", "Шаблоны тыххæй дискусси", "Æххуыс", "Æххуысы тыххæй дискусси", "Категори", "Категорийы тыххæй дискусси"], "pa": ["ਮੀਡੀਆ", "ਖਾਸ", "ਚਰਚਾ", "ਮੈਂਬਰ", "ਮੈਂਬਰ ਚਰਚਾ", "Wikipedia", "Wikipedia ਚਰਚਾ", "ਤਸਵੀਰ", "ਤਸਵੀਰ ਚਰਚਾ", "ਮੀਡੀਆਵਿਕਿ", "ਮੀਡੀਆਵਿਕਿ ਚਰਚਾ", "ਨਮੂਨਾ", "ਨਮੂਨਾ ਚਰਚਾ", "ਮਦਦ", "ਮਦਦ ਚਰਚਾ", "ਸ਼੍ਰੇਣੀ", "ਸ਼੍ਰੇਣੀ ਚਰਚਾ"], "pl": [m, "Specjalna", "Dyskusja", "Wikipedysta", "Dyskusja wikipedysty", "Wikipedia", "Dyskusja Wikipedii", "Plik", "Dyskusja pliku", "MediaWiki", "Dyskusja MediaWiki", "Szablon", "Dyskusja szablonu", "Pomoc", "Dyskusja pomocy", "Kategoria", "Dyskusja kategorii", "Portal", "Dyskusja portalu","Wikiprojekt","Dyskusja Wikiprojektu"], "pt": [m, "Especial", "Discussão", "Usuário", "Usuário Discussão", "Wikipedia", "Wikipedia Discussão", "Imagem", "Imagem Discussão", "MediaWiki", "MediaWiki Discussão", "Predefinição", "Predefinição Discussão", "Ajuda", "Ajuda Discussão", "Categoria", "Categoria Discussão"], "ro": [m, "Special", "Discuţie", "Utilizator", "Discuţie Utilizator", "Wikipedia", "Discuţie Wikipedia", "Imagine", "Discuţie Imagine", "MediaWiki", "Discuţie MediaWiki", "Format", "Discuţie Format", "Ajutor", "Discuţie Ajutor", "Categorie", "Discuţie Categorie"], "ru": ["Медиа", "Служебная", "Обсуждение", "Участник", "Обсуждение участника", "Википедия", "Обсуждение Википедии", "Изображение", "Обсуждение изображения", "MediaWiki", "Обсуждение MediaWiki", "Шаблон", "Обсуждение шаблона", "Справка", "Обсуждение справки", "Категория", "Обсуждение категории"], "sc": ["Speciale", "Contièndha", "Utente", "Utente discussioni", "Wikipedia", "Wikipedia discussioni", "Immàgini", "Immàgini contièndha", m, "MediaWiki", "MediaWiki talk", "Template", "Template talk", "Help", "Help talk", "Category", "Category talk"], "sk": ["Médiá", "Špeciálne", "Diskusia", "Redaktor", "Diskusia s redaktorom", "Wikipédia", "Diskusia k Wikipédii", "Obrázok", "Diskusia k obrázku", "MediaWiki", "Diskusia k MediaWiki", "Šablóna", "Diskusia k šablóne", "Pomoc", "Diskusia k pomoci", "Kategória", "Diskusia ku kategórii"], "sl": [m, "Posebno", "Pogovor", "Uporabnik", "Uporabniški pogovor", "Wikipedija", "Pogovor k Wikipediji", "Slika", "Pogovor k sliki", "MediaWiki", "MediaWiki talk", "Template", "Template talk", "Help", "Help talk", "Category", "Category talk"], "sq": [m, "Speciale", "Diskutim", "Përdoruesi", "Përdoruesi diskutim", "Wikipedia", "Wikipedia diskutim", "Figura", "Figura diskutim", "MediaWiki", "MediaWiki diskutim", "Stampa", "Stampa diskutim", "Ndihmë", "Ndihmë diskutim", "Category", "Category talk"], "sr": [m, "Посебно", "Разговор", "Корисник", "Разговор са корисником", "Википедија", "Разговор о Википедији", "Слика", "Разговор о слици", "МедијаВики", "Разговор о МедијаВикију", "Шаблон", "Разговор о шаблону", "Помоћ", "Разговор о помоћи", "Категорија", "Разговор о категорији", "Портал", "Разговор о порталу"], "sv": [m, "Special", "Diskussion", "Användare", "Användardiskussion", "Wikipedia", "Wikipediadiskussion", "Bild", "Bilddiskussion", "MediaWiki", "MediaWiki diskussion", "Mall", "Malldiskussion", "Hjälp", "Hjälp diskussion", "Kategori", "Kategoridiskussion"], "ta": ["ஊடகம்", "சிறப்பு", "பேச்சு", "பயனர்", "பயனர் பேச்சு", "Wikipedia", "Wikipedia பேச்சு", "படிமம்", "படிமப் பேச்சு", "மீடியாவிக்கி", "மீடியாவிக்கி பேச்சு", "வார்ப்புரு", "வார்ப்புரு பேச்சு", "உதவி", "உதவி பேச்சு", "பகுப்பு", "பகுப்பு பேச்சு"], "th": [m, "พิเศษ", "พูดคุย", "ผู้ใช้", "คุยเกี่ยวกับผู้ใช้", "Wikipedia", "Wikipedia talk", "ภาพ", "คุยเกี่ยวกับภาพ", "MediaWiki", "คุยเกี่ยวกับ MediaWiki", "Template", "Template talk", "Help", "Help talk", "Category", "Category talk"], "tlh": ["Doch", "le'", "ja'chuq", "lo'wI'", "lo'wI' ja'chuq", "wIqIpe'DIya", "wIqIpe'DIya ja'chuq", "nagh beQ", "nagh beQ ja'chuq", "MediaWiki", "MediaWiki ja'chuq", "chen'ay'", "chen'ay' ja'chuq", "QaH", "QaH ja'chuq", "Segh", "Segh ja'chuq"], "tr": [m, "Özel", "Tartışma", "Kullanıcı", "Kullanıcı mesaj", "Vikipedi", "Vikipedi tartışma", "Resim", "Resim tartışma", "MedyaViki", "MedyaViki tartışma", "Şablon", "Şablon tartışma", "Yardım", "Yardım tartışma", "Kategori", "Kategori tartışma"], "tt": [m, "Maxsus", "Bäxäs", "Äğzä", "Äğzä bäxäse", "Wikipedia", "Wikipedia bäxäse", "Räsem", "Räsem bäxäse", "MediaWiki", "MediaWiki bäxäse", "Ürnäk", "Ürnäk bäxäse", "Yärdäm", "Yärdäm bäxäse", "Törkem", "Törkem bäxäse"], "uk": ["Медіа", "Спеціальні", "Обговорення", "Користувач", "Обговорення користувача", "Wikipedia", "Обговорення Wikipedia", "Зображення", "Обговорення зображення", "MediaWiki", "Обговорення MediaWiki", "Шаблон", "Обговорення шаблону", "Довідка", "Обговорення довідки", "Категорія", "Обговорення категорії"], "vi": ["Phương tiện", "Đặc biệt", "Thảo luận", "Thành viên", "Thảo luận Thành viên", "Wikipedia", "Thảo luận Wikipedia", "Hình", "Thảo luận Hình", "MediaWiki", "Thảo luận MediaWiki", "Tiêu bản", "Thảo luận Tiêu bản", "Trợ giúp", "Thảo luận Trợ giúp", "Thể loại", "Thảo luận Thể loại"], "wa": [m, "Sipeciås", "Copene", "Uzeu", "Uzeu copene", "Wikipedia", "Wikipedia copene", "Imådje", "Imådje copene", "MediaWiki", "MediaWiki copene", "Modele", "Modele copene", "Aidance", "Aidance copene", "Categoreye", "Categoreye copene"] //</NOLITE> }; pg.ns.list = nsLists[pg.wiki.lang] || list; pg.ns.index = nsIndex; } function namespaceListToRegex(list) {return RegExp('^('+list.join('|').split(' ').join('[ _]')+'):');}; // function setNamespaceList is ugly as sin, moved to later in the code function setNamespaces() { setNamespaceList(); pg.ns.withTalkList=[null]; // NB root (article) corresponds with this entry, null pg.ns.talkList=[pg.ns.list[2]]; // if the number of namespaces changes then this will have to be changed // maybe the easiest way is to specify the arrays by hand as in the comments following the loop for (var i=3; i+1<pg.ns.list.length; i=i+2) { pg.ns.withTalkList.push(pg.ns.list[i]); pg.ns.talkList.push(pg.ns.list[i+1]); } // ALERT! SILLY HARDCODED VALUES FOLLOW! pg.ns.special = pg.ns.list[pg.ns.index.Special]; pg.ns.image = pg.ns.list[pg.ns.index.File]; pg.ns.user = pg.ns.list[pg.ns.index.User]; pg.ns.usertalk = pg.ns.list[pg.ns.index['User talk']]; pg.ns.category = pg.ns.list[pg.ns.index.Category]; pg.ns.template = pg.ns.list[pg.ns.index.Template]; pg.ns.nonArticleList=pg.ns.list.slice(0,2).concat(pg.ns.list.slice(2)); } function setRedirs() { var r='redirect'; var R='REDIRECT'; var redirLists={ //<NOLITE> 'ar': [ R, 'تحويل' ], 'be': [ r, 'перанакіраваньне' ], 'bg': [ r, 'пренасочване', 'виж' ], 'bs': [ r, 'Preusmjeri', 'preusmjeri', 'PREUSMJERI' ], 'cs': [ R, 'PŘESMĚRUJ' ], 'cy': [ r, 'ail-cyfeirio' ], 'de': [ R, 'WEITERLEITUNG' ], 'eo': [ R, 'ALIDIREKTU', 'ALIDIREKTI' ], 'et': [ r, 'suuna' ], 'ga': [ r, 'athsheoladh' ], 'gl': [ r, 'REDIRECCIÓN', 'REDIRECIONAMENTO'], 'he': [ R, 'הפניה' ], 'hu': [ R, 'ÁTIRÁNYÍTÁS' ], 'is': [ r, 'tilvísun', 'TILVÍSUN' ], 'it': [ R, 'RINVIA', 'Rinvia'], 'mk': [ r, 'пренасочување', 'види' ], 'nds': [ r, 'wiederleiden' ], 'nl': [ R, 'DOORVERWIJZING' ], 'nn': [ r, 'omdiriger' ], 'pl': [ R, 'PATRZ', 'PRZEKIERUJ', 'TAM' ], 'pt': [ R, 'redir' ], 'ru': [ R, 'ПЕРЕНАПРАВЛЕНИЕ', 'ПЕРЕНАПР' ], 'sk': [ r, 'presmeruj' ], 'sr': [ r, 'Преусмери', 'преусмери', 'ПРЕУСМЕРИ', 'Preusmeri', 'preusmeri', 'PREUSMERI' ], 'tt': [ R, 'yünältü', 'перенаправление', 'перенапр' ], 'vi': [ r, 'đổi' ] // no comma //</NOLITE> }; var redirList=redirLists[ pg.wiki.lang ] || [r, R]; // Mediawiki is very tolerant about what comes after the #redirect at the start pg.re.redirect=RegExp('^\\s*[#](' + redirList.join('|') + ').*?\\[{2}([^\\|\\]]*)(|[^\\]]*)?\\]{2}\\s*(.*)', 'i'); } function setInterwiki() { if (pg.wiki.wikimedia) { pg.wiki.interwiki='aa|ab|af|ak|als|am|an|ang|ar|arc|arz|as|ast|av|ay|az|ba|be|ber|bg|bh|bi|bm|bn|bdf|bo|br|bs|ca|ce|ceb|ch|cho|chr|chy|co|commons|cr|cs|csb|cu|cv|cy|da|de|dsb|dv|dz|el|en|eo|es|et|eu|fa|ff|fi|fiu-vro|fj|fo|fr|fur|fy|ga|gd|gil|gl|gn|got|gu|gv|ha|haw|he|hi|ho|hr|hsb|ht|hu|hy|hz|ia|id|ie|ig|ii|ik|ilo|io|is|it|iu|ja|jbo|jv|ka|kg|ki|kj|kk|kl|km|kn|ko|kr|ks|ksh|ku|kv|kw|ky|la|lad|lan|lb|lg|li|ln|lmo|lo|lt|lu|lv|map-bms|mg|mh|mi|mk|ml|mn|mo|mr|ms|mt|stq|mus|my|na|nah|nap|nb|nd|nds|nds-nl|ne|new|ng|nl|nn|no|nr|nv|ny|oc|oj|om|or|os|pa|pam|pi|pl|pms|ps|pt|qu|rm|rn|ro|roa-rup|ru|rw|sa|sc|scn|sco|sd|se|sg|sh|si|simple|sk|sl|sm|smg|sn|so|sq|sr|ss|st|stq|su|sv|sw|szl|ta|te|tg|th|ti|tk|tl|tlh|tn|to|tpi|tr|ts|tt|tum|tw|ty|ug|uk|ur|uz|ve|vi|vk|vo|wa|war|wen|wo|xh|yi|yo|za|zh|zh-min-nan|zh-yue|zu'; pg.re.interwiki=RegExp('^'+pg.wiki.interwiki+':'); } else { pg.wiki.interwiki=null; pg.re.interwiki=RegExp('^$'); } } function nsRe(label) { var l=upcaseFirst(label); return nsRegexString(pg.ns.list[pg.ns.index[l]], l); } function nsReImage() { var str = pg.ns.list[pg.ns.index["File"]]; return '(?:' + str + '|' + encodeURI(str) + '|' + upcaseFirst(str) + '|Image|' + upcaseFirst('Image') + ')'; } function nsRegexString(str, extra) { return '(?:' + str + '|' + encodeURI(str) + (extra ? '|' + extra : '') + ')'; } function nsRegex(str, extra) { return RegExp(nsRegexString(str, extra)); } // ENDFILE: namespaces.js // STARTFILE: selpop.js //<NOLITE> function getEditboxSelection() { // see http://www.webgurusforum.com/8/12/0 try { var editbox=document.editform.wpTextbox1; } catch (dang) { return; } // IE, Opera if (document.selection) { return document.selection.createRange().text; } // Mozilla var selStart = editbox.selectionStart; var selEnd = editbox.selectionEnd; return (editbox.value).substring(selStart, selEnd); } function doSelectionPopup() { // popup if the selection looks like [[foo|anything afterwards at all // or [[foo|bar]]text without ']]' // or [[foo|bar]] var sel=getEditboxSelection(); var open=sel.indexOf('[['); var pipe=sel.indexOf('|'); var close=sel.indexOf(']]'); if (open == -1 || ( pipe == -1 && close == -1) ) { return; } if (pipe != -1 && open > pipe || close != -1 && open > close) { return; } if (getValueOf('popupOnEditSelection')=='boxpreview') { return doSeparateSelectionPopup(sel); } var article=new Title(sel.substring(open+2, (pipe < 0) ? close : pipe)).urlString(); if (close > 0 && sel.substring(close+2).indexOf('[[') >= 0) { return; } var a=document.createElement('a'); a.href=pg.wiki.titlebase + article; mouseOverWikiLink2(a); if (a.navpopup) { a.navpopup.addHook(function(){runStopPopupTimer(a.navpopup);}, 'unhide', 'after'); } } function doSeparateSelectionPopup(str) { var div=document.getElementById('selectionPreview'); if (!div) { div = document.createElement('div'); div.id='selectionPreview'; try { var box=document.editform.wpTextbox1; } catch (oopsie) { return; } box.parentNode.insertBefore(div, box); } div.innerHTML=wiki2html(str); div.ranSetupTooltipsAlready = false; popTipsSoonFn('selectionPreview')(); } //</NOLITE> // ENDFILE: selpop.js // STARTFILE: navpopup.js /** @fileoverview Defines two classes: {@link Navpopup} and {@link Mousetracker}. <code>Navpopup</code> describes popups: when they appear, where, what they look like and so on. <code>Mousetracker</code> "captures" the mouse using <code>document.onmousemove</code>. */ /** Creates a new Mousetracker. @constructor @class The Mousetracker class. This monitors mouse movements and manages associated hooks. */ function Mousetracker() { /** Interval to regularly run the hooks anyway, in milliseconds. @type Integer */ this.loopDelay=400; /** Timer for the loop. @type Timer */ this.timer=null; /** Flag - are we switched on? @type Boolean */ this.active=false; /** Flag - are we probably inaccurate, i.e. not reflecting the actual mouse position? */ this.dirty=true; /** Array of hook functions. @private @type Array */ this.hooks=[]; } /** Adds a hook, to be called when we get events. @param {Function} f A function which is called as <code>f(x,y)</code>. It should return <code>true</code> when it wants to be removed, and <code>false</code> otherwise. */ Mousetracker.prototype.addHook = function (f) { this.hooks.push(f); }; /** Runs hooks, passing them the x and y coords of the mouse. Hook functions that return true are passed to {@link Mousetracker#removeHooks} for removal. @private */ Mousetracker.prototype.runHooks = function () { if (!this.hooks || !this.hooks.length) { return; } //log('Mousetracker.runHooks; we got some hooks to run'); var remove=false; var removeObj={}; // this method gets called a LOT - // pre-cache some variables var x=this.x, y=this.y, len = this.hooks.length; for (var i=0; i<len; ++i) { //~ run the hook function, and remove it if it returns true if (this.hooks[i](x, y)===true) { remove=true; removeObj[i]=true; } } if (remove) { this.removeHooks(removeObj); } }; /** Removes hooks. @private @param {Object} removeObj An object whose keys are the index numbers of functions for removal, with values that evaluate to true */ Mousetracker.prototype.removeHooks = function(removeObj) { var newHooks=[]; var len = this.hooks.length; for (var i=0; i<len; ++i) { if (! removeObj[i]) { newHooks.push(this.hooks[i]); } } this.hooks=newHooks; }; /** Event handler for mouse wiggles. We simply grab the event, set x and y and run the hooks. This makes the cpu all hot and bothered :-( @private @param {Event} e Mousemove event */ Mousetracker.prototype.track=function (e) { //~ Apparently this is needed in IE. e = e || window.event; var x, y; if (e) { if (e.pageX) { x=e.pageX; y=e.pageY; } else if (typeof e.clientX!='undefined') { var left, top, docElt = window.document.documentElement; if (docElt) { left=docElt.scrollLeft; } left = left || window.document.body.scrollLeft || window.document.scrollLeft || 0; if (docElt) { top=docElt.scrollTop; } top = top || window.document.body.scrollTop || window.document.scrollTop || 0; x=e.clientX + left; y=e.clientY + top; } else { return; } this.setPosition(x,y); } }; /** Sets the x and y coordinates stored and takes appropriate action, running hooks as appropriate. @param {Integer} x, y Screen coordinates to set */ Mousetracker.prototype.setPosition=function(x,y) { this.x = x; this.y = y; if (this.dirty || this.hooks.length === 0) { this.dirty=false; return; } if (typeof this.lastHook_x != 'number') { this.lastHook_x = -100; this.lastHook_y=-100; } var diff = (this.lastHook_x - x)*(this.lastHook_y - y); diff = (diff >= 0) ? diff : -diff; if ( diff > 1 ) { this.lastHook_x=x; this.lastHook_y=y; if (this.dirty) { this.dirty = false; } else { this.runHooks(); } } } /** Sets things in motion, unless they are already that is, registering an event handler on <code>document.onmousemove</code>. A half-hearted attempt is made to preserve the old event handler if there is one. */ Mousetracker.prototype.enable = function () { if (this.active) { return; } this.active=true; //~ Save the current handler for mousemove events. This isn't too //~ robust, of course. this.savedHandler=document.onmousemove; //~ Gotta save @tt{this} again for the closure, and use apply for //~ the member function. var savedThis=this; document.onmousemove=function (e) {savedThis.track.apply(savedThis, [e]);}; if (this.loopDelay) { this.timer = setInterval(function() { //log('loop delay in mousetracker is working'); savedThis.runHooks();}, this.loopDelay); } }; /** Disables the tracker, removing the event handler. */ Mousetracker.prototype.disable = function () { if (!this.active) { return; } if (typeof this.savedHandler=='function') { document.onmousemove=this.savedHandler; } else { delete document.onmousemove; } if (this.timer) { clearInterval(this.timer); } this.active=false; }; /** Creates a new Navpopup. Gets a UID for the popup and @param init Contructor object. If <code>init.draggable</code> is true or absent, the popup becomes draggable. @constructor @class The Navpopup class. This generates popup hints, and does some management of them. */ function Navpopup(init) { //alert('new Navpopup(init)'); /** UID for each Navpopup instance. Read-only. @type integer */ this.uid=Navpopup.uid++; /** Read-only flag for current visibility of the popup. @type boolean @private */ this.visible=false; /** Flag to be set when we want to cancel a previous request to show the popup in a little while. @private @type boolean */ this.noshow=false; /** Categorised list of hooks. @see #runHooks @see #addHook @private @type Object */ this.hooks={ 'create': [], 'unhide': [], 'hide': [] }; /** list of unique IDs of hook functions, to avoid duplicates @private */ this.hookIds={}; /** List of downloads associated with the popup. @private @type Array */ this.downloads=[]; /** Number of uncompleted downloads. @type integer */ this.pending=null; /** Tolerance in pixels when detecting whether the mouse has left the popup. @type integer */ this.fuzz=5; /** Flag to toggle running {@link #limitHorizontalPosition} to regulate the popup's position. @type boolean */ this.constrained=true; /** The popup width in pixels. @private @type integer */ this.width=0; /** The popup width in pixels. @private @type integer */ this.height=0; /** The main content DIV element. @type HTMLDivElement */ this.mainDiv=null; this.createMainDiv(); // if (!init || typeof init.popups_draggable=='undefined' || init.popups_draggable) { // this.makeDraggable(true); // } } /** A UID for each Navpopup. This constructor property is just a counter. @type integer @private */ Navpopup.uid=0; /** Retrieves the {@link #visible} attribute, indicating whether the popup is currently visible. @type boolean */ Navpopup.prototype.isVisible=function() { return this.visible; }; /** Repositions popup using CSS style. @private @param {integer} x x-coordinate (px) @param {integer} y y-coordinate (px) @param {boolean} noLimitHor Don't call {@link #limitHorizontalPosition} */ Navpopup.prototype.reposition= function (x,y, noLimitHor) { log ('reposition('+x+','+y+','+noLimitHor+')'); if (typeof x != 'undefined' && x!==null) { this.left=x; } if (typeof y != 'undefined' && y!==null) { this.top=y; } if (typeof this.left != 'undefined' && typeof this.top != 'undefined') { this.mainDiv.style.left=this.left + 'px'; this.mainDiv.style.top=this.top + 'px'; } if (!noLimitHor) { this.limitHorizontalPosition(); } //console.log('navpop'+this.uid+' - (left,top)=(' + this.left + ',' + this.top + '), css=(' //+ this.mainDiv.style.left + ',' + this.mainDiv.style.top + ')'); }; /** Prevents popups from being in silly locations. Hopefully. Should not be run if {@link #constrained} is true. @private */ Navpopup.prototype.limitHorizontalPosition=function() { if (!this.constrained || this.tooWide) { return; } this.updateDimensions(); var x=this.left; var w=this.width; var cWidth=document.body.clientWidth; // log('limitHorizontalPosition: x='+x+ // ', this.left=' + this.left + // ', this.width=' + this.width + // ', cWidth=' + cWidth); if ( (x+w) >= cWidth || ( x > 0 && this.maxWidth && this.width < this.maxWidth && this.height > this.width && x > cWidth - this.maxWidth ) ) { // This is a very nasty hack. There has to be a better way! // We find the "natural" width of the div by positioning it at the far left // then reset it so that it should be flush right (well, nearly) this.mainDiv.style.left='-10000px'; this.mainDiv.style.width = this.maxWidth + 'px'; var naturalWidth=parseInt(this.mainDiv.offsetWidth, 10); var newLeft=cWidth - naturalWidth - 1; if (newLeft < 0) { newLeft = 0; this.tooWide=true; } // still unstable for really wide popups? log ('limitHorizontalPosition: moving to ('+newLeft + ','+ this.top+');' + ' naturalWidth=' + naturalWidth + ', clientWidth=' + cWidth); this.reposition(newLeft, null, true); } }; /** Counter indicating the z-order of the "highest" popup. We start the z-index at 1000 so that popups are above everything else on the screen. @private @type integer */ Navpopup.highest=1000; /** Brings popup to the top of the z-order. We increment the {@link #highest} property of the contructor here. @private */ Navpopup.prototype.raise = function () { this.mainDiv.style.zIndex=Navpopup.highest + 1; ++Navpopup.highest; }; /** Shows the popup provided {@link #noshow} is not true. Updates the position, brings the popup to the top of the z-order and unhides it. */ Navpopup.prototype.show = function () { //document.title+='s'; if (this.noshow) { return; } //document.title+='t'; this.reposition(); this.raise(); this.unhide(); }; /** Runs the {@link #show} method in a little while, unless we're already visible. @param {integer} time Delay in milliseconds @see #showSoonIfStable */ Navpopup.prototype.showSoon = function (time) { if (this.visible) { return; } this.noshow=false; //~ We have to save the value of @tt{this} so that the closure below //~ works. var savedThis=this; //this.start_x = Navpopup.tracker.x; //this.start_y = Navpopup.tracker.y; setTimeout(function () { if (Navpopup.tracker.active) { savedThis.reposition.apply(savedThis, [Navpopup.tracker.x + 2, Navpopup.tracker.y + 2]); } //~ Have to use apply to invoke his member function here savedThis.show.apply(savedThis, []); }, time); }; /** Checks to see if the mouse pointer has stabilised (checking every <code>time</code>/2 milliseconds) and runs the {@link #show} method if it has. This method makes {@link #showSoon} redundant. @param {integer} time The minimum time (ms) before the popup may be shown. */ Navpopup.prototype.showSoonIfStable = function (time) { log ('showSoonIfStable, time='+time); if (this.visible) { return; } this.noshow = false; //~ initialize these variables so that we never run @tt{show} after //~ just half the time this.stable_x = -10000; this.stable_y = -10000; var stableShow = function() { log('stableShow called'); var new_x = Navpopup.tracker.x, new_y = Navpopup.tracker.y; var dx = savedThis.stable_x - new_x, dy = savedThis.stable_y - new_y; var fuzz2 = 0; // savedThis.fuzz * savedThis.fuzz; //document.title += '[' + [savedThis.stable_x,new_x, savedThis.stable_y,new_y, dx, dy, fuzz2].join(',') + '] '; if ( dx * dx <= fuzz2 && dy * dy <= fuzz2 ) { log ('mouse is stable'); clearInterval(savedThis.showSoonStableTimer); savedThis.reposition.apply(savedThis, [new_x + 2, new_y + 2]); savedThis.show.apply(savedThis, []); return; } savedThis.stable_x = new_x; savedThis.stable_y = new_y; }; var savedThis = this; this.showSoonStableTimer = setInterval(stableShow, time/2); }; /** Makes the popup unhidable until we call {@link #unstick}. */ Navpopup.prototype.stick=function() { this.noshow=false; this.sticky=true; }; /** Allows the popup to be hidden. */ Navpopup.prototype.unstick=function() { this.sticky=false; }; /** Sets the {@link #noshow} flag and hides the popup. This should be called when the mouse leaves the link before (or after) it's actually been displayed. */ Navpopup.prototype.banish = function () { log ('banish called'); // hide and prevent showing with showSoon in the future this.noshow=true; if (this.showSoonStableTimer) { log('clearing showSoonStableTimer'); clearInterval(this.showSoonStableTimer); } this.hide(); }; /** Runs hooks added with {@link #addHook}. @private @param {String} key Key name of the {@link #hooks} array - one of 'create', 'unhide', 'hide' @param {String} when Controls exactly when the hook is run: either 'before' or 'after' */ Navpopup.prototype.runHooks = function (key, when) { if (!this.hooks[key]) { return; } var keyHooks=this.hooks[key]; var len=keyHooks.length; for (var i=0; i< len; ++i) { if (keyHooks[i] && keyHooks[i].when == when) { if (keyHooks[i].hook.apply(this, [])) { // remove the hook if (keyHooks[i].hookId) { delete this.hookIds[keyHooks[i].hookId]; } keyHooks[i]=null; } } } }; /** Adds a hook to the popup. Hook functions are run with <code>this</code> set to refer to the Navpopup instance, and no arguments. @param {Function} hook The hook function. Functions that return true are deleted. @param {String} key Key name of the {@link #hooks} array - one of 'create', 'unhide', 'hide' @param {String} when Controls exactly when the hook is run: either 'before' or 'after' @param {String} uid A truthy string identifying the hook function; if it matches another hook in this position, it won't be added again. */ Navpopup.prototype.addHook = function ( hook, key, when, uid ) { when = when || 'after'; if (!this.hooks[key]) { return; } // if uid is specified, don't add duplicates var hookId=null; if (uid) { hookId=[key,when,uid].join('|'); if (this.hookIds[hookId]) { return; } this.hookIds[hookId]=true; } this.hooks[key].push( {hook: hook, when: when, hookId: hookId} ); }; /** Creates the main DIV element, which contains all the actual popup content. Runs hooks with key 'create'. @private */ Navpopup.prototype.createMainDiv = function () { if (this.mainDiv) { return; } this.runHooks('create', 'before'); var mainDiv=document.createElement('div'); var savedThis=this; mainDiv.onclick=function(e) {savedThis.onclickHandler(e);}; mainDiv.className=(this.className) ? this.className : 'navpopup_maindiv'; mainDiv.id=mainDiv.className + this.uid; mainDiv.style.position='absolute'; mainDiv.style.display='none'; mainDiv.className='navpopup'; // easy access to javascript object through DOM functions mainDiv.navpopup=this; this.mainDiv=mainDiv; document.body.appendChild(mainDiv); this.runHooks('create', 'after'); }; /** Calls the {@link #raise} method. @private */ Navpopup.prototype.onclickHandler=function(e) { this.raise(); }; /** Makes the popup draggable, using a {@link Drag} object. @private */ Navpopup.prototype.makeDraggable=function(handleName) { if (!this.mainDiv) { this.createMainDiv(); } var drag=new Drag(); if (!handleName) { drag.startCondition=function(e) { try { if (!e.shiftKey) { return false; } } catch (err) { return false; } return true; }; } var dragHandle = document.getElementById(handleName) || this.mainDiv; var np=this; drag.endHook=function(x,y) { Navpopup.tracker.dirty=true; np.reposition(x,y); }; drag.init(dragHandle,this.mainDiv); }; /** Hides the popup using CSS. Runs hooks with key 'hide'. Sets {@link #visible} appropriately. {@link #banish} should be called externally instead of this method. @private */ Navpopup.prototype.hide = function () { this.runHooks('hide', 'before'); this.abortDownloads(); if (this.sticky) { return; } if (typeof this.visible != 'undefined' && this.visible) { this.mainDiv.style.display='none'; this.visible=false; } this.runHooks('hide', 'after'); }; /** Shows the popup using CSS. Runs hooks with key 'unhide'. Sets {@link #visible} appropriately. {@link #show} should be called externally instead of this method. @private */ Navpopup.prototype.unhide = function () { this.runHooks('unhide', 'before'); if (typeof this.visible != 'undefined' && !this.visible) { this.mainDiv.style.display='inline'; this.visible=true; } this.runHooks('unhide', 'after'); }; /** Sets the <code>innerHTML</code> attribute of the main div containing the popup content. @param {String} html The HTML to set. */ Navpopup.prototype.setInnerHTML = function (html) { this.mainDiv.innerHTML = html; }; /** Updates the {@link #width} and {@link #height} attributes with the CSS properties. @private */ Navpopup.prototype.updateDimensions = function () { this.width=parseInt(this.mainDiv.offsetWidth, 10); this.height=parseInt(this.mainDiv.offsetHeight, 10); }; /** Checks if the point (x,y) is within {@link #fuzz} of the {@link #mainDiv}. @param {integer} x x-coordinate (px) @param {integer} y y-coordinate (px) @type boolean */ Navpopup.prototype.isWithin = function(x,y) { //~ If we're not even visible, no point should be considered as //~ being within the popup. if (!this.visible) { return false; } this.updateDimensions(); var fuzz=this.fuzz || 0; //~ Use a simple box metric here. return (x+fuzz >= this.left && x-fuzz <= this.left + this.width && y+fuzz >= this.top && y-fuzz <= this.top + this.height); }; /** Adds a download to {@link #downloads}. @param {Downloader} download */ Navpopup.prototype.addDownload=function(download) { if (!download) { return; } this.downloads.push(download); }; /** Aborts the downloads listed in {@link #downloads}. @see Downloader#abort */ Navpopup.prototype.abortDownloads=function() { for(var i=0; i<this.downloads.length; ++i) { var d=this.downloads[i]; if (d && d.abort) { d.abort(); } } this.downloads=[]; }; /** A {@link Mousetracker} instance which is a property of the constructor (pseudo-global). */ Navpopup.tracker=new Mousetracker(); // ENDFILE: navpopup.js // STARTFILE: diff.js //<NOLITE> /* * Javascript Diff Algorithm * By John Resig (http://ejohn.org/) and [[:en:User:Lupin]] * * More Info: * http://ejohn.org/projects/javascript-diff-algorithm/ */ function delFmt(x) { if (!x.length) { return ''; } return "<del class='popupDiff'>" + x.join('') +"</del>"; } function insFmt(x) { if (!x.length) { return ''; } return "<ins class='popupDiff'>" + x.join('') +"</ins>"; } function countCrossings(a, b, i, eject) { // count the crossings on the edge starting at b[i] if (!b[i].row && b[i].row !== 0) { return -1; } var count=0; for (var j=0; j<a.length; ++j) { if (!a[j].row && a[j].row !== 0) { continue; } if ( (j-b[i].row)*(i-a[j].row) > 0) { if(eject) { return true; } count++; } } return count; } function shortenDiffString(str, context) { var re=RegExp('(<del[\\s\\S]*?</del>|<ins[\\s\\S]*?</ins>)'); var splitted=str.parenSplit(re); var ret=['']; for (var i=0; i<splitted.length; i+=2) { if (splitted[i].length < 2*context) { ret[ret.length-1] += splitted[i]; if (i+1<splitted.length) { ret[ret.length-1] += splitted[i+1]; } continue; } else { if (i > 0) { ret[ret.length-1] += splitted[i].substring(0,context); } if (i+1 < splitted.length) { ret.push(splitted[i].substring(splitted[i].length-context) + splitted[i+1]); } } } while (ret.length > 0 && !ret[0]) { ret = ret.slice(1); } return ret; } function diffString( o, n, simpleSplit ) { var splitRe=RegExp('([[]{2}|[\]]{2}|[{]{2,3}|[}]{2,3}|[|]|=|[*:]+|\\s|\\b)'); o=o.entify(); n=n.entify(); var out, i; if (simpleSplit) { out = diff( o.split(/\b/), n.split(/\b/) ); } else { out = diff( o.parenSplit(splitRe), n.parenSplit(splitRe) ); } var str = ""; var acc=[]; // accumulator for prettier output // crossing pairings -- eg 'A B' vs 'B A' -- cause problems, so let's iron them out // this doesn't always do things optimally but it should be fast enough var maxOutputPair=0; for (i=0; i<out.n.length; ++i) { if ( out.n[i].paired ) { if( maxOutputPair > out.n[i].row ) { // tangle - delete pairing out.o[ out.n[i].row ]=out.o[ out.n[i].row ].text; out.n[i]=out.n[i].text; } if (maxOutputPair < out.n[i].row) { maxOutputPair = out.n[i].row; } } } // output the stuff preceding the first paired old line for (i=0; i<out.o.length && !out.o[i].paired; ++i) { acc.push( out.o[i] ); } str += delFmt(acc); acc=[]; // main loop for ( i = 0; i < out.n.length; ++i ) { // output unpaired new "lines" while ( i < out.n.length && !out.n[i].paired ) { acc.push( out.n[i++] ); } str += insFmt(acc); acc=[]; if ( i < out.n.length ) { // this new "line" is paired with the (out.n[i].row)th old "line" str += out.n[i].text; // output unpaired old rows starting after this new line's partner var m = out.n[i].row + 1; while ( m < out.o.length && !out.o[m].paired ) { acc.push ( out.o[m++] ); } str += delFmt(acc); acc=[]; } } return str; } // see http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Object // FIXME: use obj.hasOwnProperty instead of this kludge! window.jsReservedProperties=RegExp('^(constructor|prototype|__((define|lookup)[GS]etter)__' + '|eval|hasOwnProperty|propertyIsEnumerable' + '|to(Source|String|LocaleString)|(un)?watch|valueOf)$'); function diffBugAlert(word) { if (!diffBugAlert.list[word]) { diffBugAlert.list[word]=1; alert('Bad word: '+word+'\n\nPlease report this bug.'); } } diffBugAlert.list={}; function makeDiffHashtable(src) { var ret={}; for ( var i = 0; i < src.length; i++ ) { if ( jsReservedProperties.test(src[i]) ) { src[i] += '<!-- -->'; } if ( !ret[ src[i] ] ) { ret[ src[i] ] = []; } try { ret[ src[i] ].push( i ); } catch (err) { diffBugAlert(src[i]); } } return ret; } function diff( o, n ) { // pass 1: make hashtable ns with new rows as keys var ns = makeDiffHashtable(n); // pass 2: make hashtable os with old rows as keys var os = makeDiffHashtable(o); // pass 3: pair unique new rows and matching unique old rows var i; for ( i in ns ) { if ( ns[i].length == 1 && os[i] && os[i].length == 1 ) { n[ ns[i][0] ] = { text: n[ ns[i][0] ], row: os[i][0], paired: true }; o[ os[i][0] ] = { text: o[ os[i][0] ], row: ns[i][0], paired: true }; } } // pass 4: pair matching rows immediately following paired rows (not necessarily unique) for ( i = 0; i < n.length - 1; i++ ) { if ( n[i].paired && ! n[i+1].paired && n[i].row + 1 < o.length && ! o[ n[i].row + 1 ].paired && n[i+1] == o[ n[i].row + 1 ] ) { n[i+1] = { text: n[i+1], row: n[i].row + 1, paired: true }; o[n[i].row+1] = { text: o[n[i].row+1], row: i + 1, paired: true }; } } // pass 5: pair matching rows immediately preceding paired rows (not necessarily unique) for ( i = n.length - 1; i > 0; i-- ) { if ( n[i].paired && ! n[i-1].paired && n[i].row > 0 && ! o[ n[i].row - 1 ].paired && n[i-1] == o[ n[i].row - 1 ] ) { n[i-1] = { text: n[i-1], row: n[i].row - 1, paired: true }; o[n[i].row-1] = { text: o[n[i].row-1], row: i - 1, paired: true }; } } return { o: o, n: n }; } //</NOLITE> // ENDFILE: diff.js // STARTFILE: init.js function setSiteInfo() { if (window.popupLocalDebug) { pg.wiki.hostname = 'en.wikipedia.org'; } else { pg.wiki.hostname = location.hostname; // use in preference to location.hostname for flexibility (?) } pg.wiki.wikimedia=RegExp('(wiki([pm]edia|source|books|news|quote|versity)|wiktionary|mediawiki)[.]org').test(pg.wiki.hostname); pg.wiki.wikia=RegExp('[.]wikia[.]com$', 'i').test(pg.wiki.hostname); pg.wiki.isLocal=RegExp('^localhost').test(pg.wiki.hostname); pg.wiki.commons=( pg.wiki.wikimedia && pg.wiki.hostname != 'commons.wikimedia.org') ? 'commons.wikimedia.org' : null; pg.wiki.lang = wgContentLanguage; var port = location.port ? ':' + location.port : ''; pg.wiki.sitebase = pg.wiki.hostname + port; } function setTitleBase() { var protocol = ( window.popupLocalDebug ? 'http:' : location.protocol ); pg.wiki.articlePath = wgArticlePath.replace(/\/\$1/, ""); // as in http://some.thing.com/wiki/Article pg.wiki.botInterfacePath = wgScript; pg.wiki.APIPath = wgScriptPath +"/api.php"; // default mediawiki setting is paths like http://some.thing.com/articlePath/index.php?title=foo var titletail = pg.wiki.botInterfacePath + '?title='; //var titletail2 = joinPath([pg.wiki.botInterfacePath, 'wiki.phtml?title=']); // other sites may need to add code here to set titletail depending on how their urls work pg.wiki.titlebase = protocol + '//' + pg.wiki.sitebase + titletail; //pg.wiki.titlebase2 = protocol + '//' + joinPath([pg.wiki.sitebase, titletail2]); pg.wiki.wikibase = protocol + '//' + pg.wiki.sitebase + pg.wiki.botInterfacePath; pg.wiki.apiwikibase = protocol + '//' + pg.wiki.sitebase + pg.wiki.APIPath; pg.wiki.articlebase = protocol + '//' + pg.wiki.sitebase + pg.wiki.articlePath; pg.wiki.commonsbase = protocol + '//' + pg.wiki.commons + pg.wiki.botInterfacePath; pg.wiki.apicommonsbase = protocol + '//' + pg.wiki.commons + pg.wiki.APIPath; pg.re.basenames = RegExp( '^(' + map( literalizeRegex, [ pg.wiki.titlebase, //pg.wiki.titlebase2, pg.wiki.articlebase ]).join('|') + ')' ); } ////////////////////////////////////////////////// // Global regexps function setMainRegex() { var reStart='[^:]*://'; var preTitles = literalizeRegex(wgScriptPath) + '/(?:index[.]php|wiki[.]phtml)[?]title='; // slightly ugly hack when pg.wiki.articlePath is empty preTitles += '|' + literalizeRegex( ( pg.wiki.articlePath ? pg.wiki.articlePath + '/': '')); var reEnd='(' + preTitles + ')([^&?#]*)[^#]*(?:#(.+))?'; pg.re.main = RegExp(reStart + literalizeRegex(pg.wiki.sitebase) + reEnd); } function setRegexps() { setMainRegex(); var sp=nsRe('Special'); pg.re.urlNoPopup=RegExp('((title=|/)' + sp + '(?:%3A|:)|section=[0-9])') ; pg.re.contribs =RegExp('(title=|/)' + sp + '(?:%3A|:)Contributions' + '(&target=|/|/' + pg.ns.user+':)(.*)') ; pg.re.email =RegExp('(title=|/)' + sp + '(?:%3A|:)Emailuser' + '(&target=|/|/(?:' + pg.ns.user+':)?)(.*)') ; pg.re.backlinks =RegExp('(title=|/)' + sp + '(?:%3A|:)Whatlinkshere' + '(&target=|/)([^&]*)'); //<NOLITE> var im=nsReImage(); // note: tries to get images in infobox templates too, e.g. movie pages, album pages etc // (^|\[\[)image: *([^|\]]*[^|\] ]) * // (^|\[\[)image: *([^|\]]*[^|\] ])([^0-9\]]*([0-9]+) *px)? // $4 = 120 as in 120px pg.re.image = RegExp('(^|\\[\\[)' + im + ': *([^|\\]]*[^|\\] ])' + '([^0-9\\]]*([0-9]+) *px)?|(?:\\n *[|]?|[|]) *' + '(' + getValueOf('popupImageVarsRegexp') + ')' + ' *= *(?:\\[\\[ *)?(?:' + im + ':)?' + '([^|]*?)(?:\\]\\])? *[|]? *\\n', 'img') ; pg.re.imageBracketCount = 6; pg.re.category = RegExp('\\[\\[' +nsRe('Category') + ': *([^|\\]]*[^|\\] ]) *', 'i'); pg.re.categoryBracketCount = 1; pg.re.ipUser=RegExp('('+nsRe('User')+':)?' + '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}' + '(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])'); pg.re.stub= RegExp(getValueOf('popupStubRegexp'), 'im'); pg.re.disambig=RegExp(getValueOf('popupDabRegexp'), 'im'); //</NOLITE> // FIXME replace with general parameter parsing function, this is daft pg.re.oldid=RegExp('[?&]oldid=([^&]*)'); pg.re.diff=RegExp('[?&]diff=([^&]*)'); } ////////////////////////////////////////////////// // miscellany function setupCache() { // page caching pg.cache.pages = []; } function setMisc() { pg.current.link=null; pg.current.links=[]; pg.current.linksHash={}; setupCache(); pg.timer.checkPopupPosition=null; pg.counter.loop=0; // ids change with each popup: popupImage0, popupImage1 etc pg.idNumber=0; // for myDecodeURI pg.misc.decodeExtras = [ {from: '%2C', to: ',' }, {from: '_', to: ' ' }, {from: '%24', to: '$'}, {from: '%26', to: '&' } // no , ]; } function leadingInteger(s){ var n=s.match(/^(\d*)/)[1]; if (n) { return +n; } return null; } function setBrowserHacks() { var useOriginal=false; // browser-specific hacks if (typeof window.opera != 'undefined') { //if (leadingInteger(opera.version()) < 9) { useOriginal=true; } // v9 beta still seems to have buggy css setDefault('popupNavLinkSeparator', ' &#183; '); } else if (navigator.appName=='Konqueror') { setDefault('popupNavLinkSeparator', ' &bull; '); pg.flag.isKonq=true; } else if ( navigator.vendor && navigator.vendor.toLowerCase().indexOf('apple computer')===0) { pg.flag.isSafari=true; var webkit=+navigator.userAgent.replace(RegExp('^.*AppleWebKit[/](\\d+).*', 'i'), '$1'); if (webkit < 420) { useOriginal=true; } } else if (navigator.appName.indexOf("Microsoft")!=-1) { setDefault('popupNavLinkSeparator', ' &#183; '); useOriginal=true; var ver=+navigator.userAgent.replace(RegExp('^.*MSIE (\\d+).*'), '$1'); pg.flag.isIE=true; pg.flag.IEVersion=ver; } if ((pg.flag.isIE && pg.flag.IEVersion < 7) || pg.flag.isKonq || (pg.flag.isSafari && webkit < 420)) { pg.flag.linksLikeIE6=true; } if (useOriginal && pg.structures.original) { setDefault('popupStructure','original'); } } function setupPopups() { // NB translatable strings should be set up first (strings.js) // basics setupDebugging(); setSiteInfo(); setTitleBase(); setOptions(); // see options.js // namespaces etc setNamespaces(); setInterwiki(); // regexps setRegexps(); setRedirs(); // other stuff setBrowserHacks(); setMisc(); setupLivePreview(); // main deal here setupTooltips(); Navpopup.tracker.enable(); setupPopups.completed = true; } // ENDFILE: init.js // STARTFILE: navlinks.js //<NOLITE> ////////////////////////////////////////////////// // navlinks... let the fun begin // function defaultNavlinkSpec() { var str=''; str += '<b><<mainlink|shortcut= >></b>'; if (getValueOf('popupLastEditLink')) { str += '*<<lastEdit|shortcut=/>>|<<lastContrib>>|<<sinceMe>>if(oldid){|<<oldEdit>>|<<diffCur>>}'; } // user links // contribs - log - count - email - block // count only if applicable; block only if popupAdminLinks str += 'if(user){<br><<contribs|shortcut=c>>*<<userlog|shortcut=L|log>>'; str+='if(ipuser){*<<arin>>}if(wikimedia){*<<count|shortcut=#>>}'; str+='if(ipuser){}else{*<<email|shortcut=E>>}if(admin){*<<block|shortcut=b>>|<<blocklog|log>>}}'; // editing links // talkpage -> edit|new - history - un|watch - article|edit // other page -> edit - history - un|watch - talk|edit|new var editstr='<<edit|shortcut=e>>'; var editOldidStr='if(oldid){<<editOld|shortcut=e>>|<<revert|shortcut=v|rv>>|<<edit|cur>>}else{' + editstr + '}' var historystr='<<history|shortcut=h>>if(mainspace_en){|<<editors|shortcut=E|>>}'; var watchstr='<<unwatch|unwatchShort>>|<<watch|shortcut=w|watchThingy>>'; str+='<br>if(talk){' + editOldidStr+'|<<new|shortcut=+>>' + '*' + historystr+'*'+watchstr + '*' + '<b><<article|shortcut=a>></b>|<<editArticle|edit>>' + '}else{' + // not a talk page editOldidStr + '*' + historystr + '*' + watchstr + '*' + '<b><<talk|shortcut=t>></b>|<<editTalk|edit>>|<<newTalk|shortcut=+|new>>' + '}'; // misc links str += '<br><<whatLinksHere|shortcut=l>>*<<relatedChanges|shortcut=r>>*<<move|shortcut=m>>'; // admin links str += 'if(admin){<br><<unprotect|unprotectShort>>|<<protect|shortcut=p>>|<<protectlog|log>>*' + '<<undelete|undeleteShort>>|<<delete|shortcut=d>>|<<deletelog|log>>}'; return str; } function navLinksHTML (article, hint, params) { //oldid, rcid) { var str = '<span class="popupNavLinks">' + defaultNavlinkSpec() + '</span>'; // BAM return navlinkStringToHTML(str, article, params); } function expandConditionalNavlinkString(s,article,z,recursionCount) { var oldid=z.oldid, rcid=z.rcid, diff=z.diff; // nested conditionals (up to 10 deep) are ok, hopefully! (work from the inside out) if (typeof recursionCount!=typeof 0) { recursionCount=0; } var conditionalSplitRegex=RegExp( //(1 if \\( (2 2) \\) {(3 3)} (4 else {(5 5)} 4)1) '(;?\\s*if\\s*\\(\\s*([\\w]*)\\s*\\)\\s*\\{([^{}]*)\\}(\\s*else\\s*\\{([^{}]*?)\\}|))', 'i'); var splitted=s.parenSplit(conditionalSplitRegex); // $1: whole conditional // $2: test condition // $3: true expansion // $4: else clause (possibly empty) // $5: false expansion (possibly null) var numParens=5; var ret = splitted[0]; for (var i=1; i<splitted.length; i=i+numParens+1) { var testString=splitted[i+2-1]; var trueString=splitted[i+3-1]; var falseString=splitted[i+5-1]; if (typeof falseString=='undefined' || !falseString) { falseString=''; } var testResult=null; switch (testString) { case 'user': testResult=(article.userName())?true:false; break; case 'talk': testResult=(article.talkPage())?false:true; // talkPage converts _articles_ to talkPages break; case 'admin': testResult=getValueOf('popupAdminLinks')?true:false; break; case 'oldid': testResult=(typeof oldid != 'undefined' && oldid)?true:false; break; case 'rcid': testResult=(typeof rcid != 'undefined' && rcid)?true:false; break; case 'ipuser': testResult=(article.isIpUser())?true:false; break; case 'mainspace_en': testResult=isInMainNamespace(article) && pg.wiki.hostname=='en.wikipedia.org'; break; case 'wikimedia': testResult=(pg.wiki.wikimedia) ? true : false; break; case 'diff': testResult=(typeof diff != 'undefined' && diff)?true:false; break; } switch(testResult) { case null: ret+=splitted[i]; break; case true: ret+=trueString; break; case false: ret+=falseString; break; } // append non-conditional string ret += splitted[i+numParens]; } if (conditionalSplitRegex.test(ret) && recursionCount < 10) { return expandConditionalNavlinkString(ret,article,z,recursionCount+1); } return ret; } function navlinkStringToArray(s, article, params) { s=expandConditionalNavlinkString(s,article,params); var splitted=s.parenSplit(RegExp('<<(.*?)>>')); var ret=[]; for (var i=0; i<splitted.length; ++i) { if (i%2) { // i odd, so s is a tag var t=new navlinkTag(); var ss=splitted[i].split('|'); t.id=ss[0]; for (var j=1; j<ss.length; ++j) { var sss=ss[j].split('='); if (sss.length>1) { t[sss[0]]=sss[1]; } else { // no assignment (no "="), so treat this as a title (overwriting the last one) t.text=popupString(sss[0]); } } t.article=article; var oldid=params.oldid, rcid=params.rcid, diff=params.diff; if (typeof oldid != 'undefined' && oldid != null) { t.oldid=oldid; } if (typeof rcid != 'undefined' && rcid != null) { t.rcid=rcid; } if (typeof diff != 'undefined' && diff != null) { t.diff=diff; } if (!t.text && t.id != 'mainlink') { t.text=popupString(t.id); } ret.push(t); } else { // plain HTML ret.push(splitted[i]); } } return ret; } function navlinkSubstituteHTML(s) { return s.split('*').join(getValueOf('popupNavLinkSeparator')) .split('<menurow>').join('<li class="popup_menu_row">') .split('</menurow>').join('</li>') .split('<menu>').join('<ul class="popup_menu">') .split('</menu>').join('</ul>'); } function navlinkDepth(magic,s) { return s.split('<' + magic + '>').length - s.split('</' + magic + '>').length; } // navlinkString: * becomes the separator // <<foo|bar=baz|fubar>> becomes a foo-link with attribute bar='baz' // and visible text 'fubar' // if(test){...} and if(test){...}else{...} work too (nested ok) function navlinkStringToHTML(s,article,params) { //limitAlert(navlinkStringToHTML, 5, 'navlinkStringToHTML\n' + article + '\n' + (typeof article)); var p=navlinkStringToArray(s,article,params); var html=''; var menudepth = 0; // nested menus not currently allowed, but doesn't do any harm to code for it var menurowdepth = 0; var wrapping = null; for (var i=0; i<p.length; ++i) { if (typeof p[i] == typeof '') { html+=navlinkSubstituteHTML(p[i]); menudepth += navlinkDepth('menu', p[i]); menurowdepth += navlinkDepth('menurow', p[i]); // if (menudepth === 0) { // tagType='span'; // } else if (menurowdepth === 0) { // tagType='li'; // } else { // tagType = null; // } } else if (typeof p[i].type != 'undefined' && p[i].type=='navlinkTag') { if (menudepth > 0 && menurowdepth === 0) { html += '<li class="popup_menu_item">' + p[i].html() + '</li>'; } else { html+=p[i].html(); } } } return html; } function navlinkTag() { this.type='navlinkTag'; } navlinkTag.prototype.html=function () { this.getNewWin(); this.getPrintFunction(); var html=''; var opening, closing; var tagType='span'; if (!tagType) { opening = ''; closing = ''; } else { opening = '<' + tagType + ' class="popup_' + this.id + '">'; closing = '</' + tagType + '>'; } if (typeof this.print!='function') { errlog ('Oh dear - invalid print function for a navlinkTag, id='+this.id); } else { html=this.print(this); if (typeof html != typeof '') {html='';} else if (typeof this.shortcut!='undefined') html=addPopupShortcut(html, this.shortcut); } return opening + html + closing; }; navlinkTag.prototype.getNewWin=function() { getValueOf('popupLinksNewWindow'); if (typeof pg.option.popupLinksNewWindow[this.id] === 'undefined') { this.newWin=null; } this.newWin=pg.option.popupLinksNewWindow[this.id]; } navlinkTag.prototype.getPrintFunction=function() { //think about this some more // this.id and this.article should already be defined if (typeof this.id!=typeof '' || typeof this.article!=typeof {} ) { return; } var html=''; var a,t; this.noPopup=1; switch (this.id) { case 'contribs': case 'history': case 'whatLinksHere': case 'userPage': case 'monobook': case 'userTalk': case 'talk': case 'article': case 'lastEdit': this.noPopup=null; } switch (this.id) { case 'email': case 'contribs': case 'block': case 'unblock': case 'userlog': case 'userSpace': case 'deletedContribs': this.article=this.article.userName(); } switch (this.id) { case 'userTalk': case 'newUserTalk': case 'editUserTalk': case 'userPage': case 'monobook': case 'editMonobook': case 'blocklog': this.article=this.article.userName(true); // fall through; no break case 'pagelog': case 'deletelog': case 'protectlog': delete this.oldid; } if (this.id=='editMonobook' || this.id=='monobook') { this.article.append('/monobook.js'); } if (this.id != 'mainlink') { // FIXME anchor handling should be done differently with Title object this.article=this.article.removeAnchor(); // if (typeof this.text=='undefined') this.text=popupString(this.id); } switch (this.id) { case 'undelete': this.print=specialLink; this.specialpage='Undelete'; this.sep='/'; break; case 'whatLinksHere': this.print=specialLink; this.specialpage='Whatlinkshere'; break; case 'relatedChanges': this.print=specialLink; this.specialpage='Recentchangeslinked'; break; case 'move': this.print=specialLink; this.specialpage='Movepage'; break; case 'contribs': this.print=specialLink; this.specialpage='Contributions'; break; case 'deletedContribs':this.print=specialLink; this.specialpage='Deletedcontributions'; break; case 'email': this.print=specialLink; this.specialpage='Emailuser'; break; case 'block': this.print=specialLink; this.specialpage='Blockip'; this.sep='&ip='; break; case 'unblock': this.print=specialLink; this.specialpage='Ipblocklist'; this.sep='&action=unblock&ip='; break; case 'userlog': this.print=specialLink; this.specialpage='Log'; this.sep='&user='; break; case 'blocklog': this.print=specialLink; this.specialpage='Log'; this.sep='&type=block&page='; break; case 'pagelog': this.print=specialLink; this.specialpage='Log'; this.sep='&page='; break; case 'protectlog': this.print=specialLink; this.specialpage='Log'; this.sep='&type=protect&page='; break; case 'deletelog': this.print=specialLink; this.specialpage='Log'; this.sep='&type=delete&page='; break; case 'userSpace': this.print=specialLink; this.specialpage='PrefixIndex'; this.sep='&namespace=2&prefix='; break; case 'search': this.print=specialLink; this.specialpage='Search'; this.sep='&fulltext=Search&search='; break; case 'history': case 'historyfeed': case 'unwatch': case 'watch': case 'unprotect': case 'protect': this.print=wikiLink; this.action=this.id; break; case 'delete': this.print=wikiLink; this.action='delete'; if (this.article.namespace()==pg.ns.image) { var img=this.article.stripNamespace(); this.action+='&image='+img; } break; case 'markpatrolled': case 'edit': // editOld should keep the oldid, but edit should not. delete this.oldid; // fall through case 'view': case 'purge': case 'render': this.print=wikiLink; this.action=this.id; break; case 'raw': this.print=wikiLink; this.action='raw&ctype=text/css'; break; case 'new': this.print=wikiLink; this.action='edit&section=new'; break; case 'mainlink': if (typeof this.text=='undefined') { this.text=this.article.toString().entify(); } if (getValueOf('popupSimplifyMainLink') && isInStrippableNamespace(this.article)) { var s=this.text.split('/'); this.text=s[s.length-1]; if (this.text=='' && s.length > 1) { this.text=s[s.length-2]; } } this.print=titledWikiLink; if (typeof this.title=='undefined' && pg.current.link && typeof pg.current.link.href != 'undefined') { this.title=safeDecodeURI((pg.current.link.originalTitle)?pg.current.link.originalTitle:this.article); if (typeof this.oldid != 'undefined' && this.oldid) { this.title=tprintf('Revision %s of %s', [this.oldid, this.title]); } } this.action='view'; break; case 'userPage': case 'article': case 'monobook': case 'editMonobook': case 'editArticle': delete this.oldid; //alert(this.id+'\n'+this.article + '\n'+ typeof this.article); this.article=this.article.articleFromTalkOrArticle(); //alert(this.id+'\n'+this.article + '\n'+ typeof this.article); this.print=wikiLink; if (this.id.indexOf('edit')==0) { this.action='edit'; } else { this.action='view';} break; case 'userTalk': case 'talk': this.article=this.article.talkPage(); delete this.oldid; this.print=wikiLink; this.action='view'; break; case 'arin': this.print=arinLink; break; case 'count': this.print=editCounterLink; break; case 'google': this.print=googleLink; break; case 'editors': this.print=editorListLink; break; case 'globalsearch': this.print=globalSearchLink; break; case 'lastEdit': this.print=titledDiffLink; this.title=popupString('Show the last edit'); this.from='prev'; this.to='cur'; break; case 'oldEdit': this.print=titledDiffLink; this.title=popupString('Show the edit made to get revision') + ' ' + this.oldid; this.from='prev'; this.to=this.oldid; break; case 'editOld': this.print=wikiLink; this.action='edit'; break; case 'undo': this.print=wikiLink; this.action='edit&undo='; break; case 'markpatrolled': this.print=wikiLink; this.action='markpatrolled'; case 'revert': this.print=wikiLink; this.action='revert'; break; case 'nullEdit': this.print=wikiLink; this.action='nullEdit'; break; case 'diffCur': this.print=titledDiffLink; this.title=tprintf('Show changes since revision %s', [this.oldid]); this.from=this.oldid; this.to='cur'; break; case 'editUserTalk': case 'editTalk': delete this.oldid; this.article=this.article.talkPage(); this.action='edit'; this.print=wikiLink; break; case 'newUserTalk': case 'newTalk': this.article=this.article.talkPage(); this.action='edit&section=new'; this.print=wikiLink; break; case 'lastContrib': case 'sinceMe': this.print=magicHistoryLink; break; case 'togglePreviews': this.text=popupString(pg.option.simplePopups ? 'enable previews' : 'disable previews'); case 'disablePopups': case 'purgePopups': this.print=popupMenuLink; break; default: this.print=function () {return 'Unknown navlink type: '+this.id+''}; } }; // // end navlinks ////////////////////////////////////////////////// //</NOLITE> // ENDFILE: navlinks.js // STARTFILE: shortcutkeys.js //<NOLITE> function popupHandleKeypress(evt) { var keyCode = window.event ? window.event.keyCode : ( evt.keyCode ? evt.keyCode : evt.which); if (!keyCode || !pg.current.link || !pg.current.link.navpopup) { return; } if (keyCode==27) { // escape killPopup(); return false; // swallow keypress } var letter=String.fromCharCode(keyCode); var links=pg.current.link.navpopup.mainDiv.getElementsByTagName('A'); var startLink=0; var i,j; if (popupHandleKeypress.lastPopupLinkSelected) { for (i=0; i<links.length; ++i) { if (links[i]==popupHandleKeypress.lastPopupLinkSelected) { startLink=i; } } } for (j=0; j<links.length; ++j) { i=(startLink + j + 1) % links.length; if (links[i].getAttribute('popupkey')==letter) { if (evt && evt.preventDefault) evt.preventDefault(); links[i].focus(); popupHandleKeypress.lastPopupLinkSelected=links[i]; return false; // swallow keypress } } // pass keypress on if (document.oldPopupOnkeypress) { return document.oldPopupOnkeypress(evt); } return true; } function addPopupShortcuts() { if (document.onkeypress!=popupHandleKeypress) { document.oldPopupOnkeypress=document.onkeypress; } document.onkeypress=popupHandleKeypress; } function rmPopupShortcuts() { popupHandleKeypress.lastPopupLinkSelected=null; try { if (document.oldPopupOnkeypress && document.oldPopupOnkeypress==popupHandleKeypress) { // panic document.onkeypress=null; //function () {}; return; } document.onkeypress=document.oldPopupOnkeypress; } catch (nasties) { /* IE goes here */ } } function addLinkProperty(html, property) { // take "<a href=...>...</a> and add a property // not sophisticated at all, easily broken var i=html.indexOf('>'); if (i<0) { return html; } return html.substring(0,i) + ' ' + property + html.substring(i); } function addPopupShortcut(html, key) { if (!getValueOf('popupShortcutKeys')) { return html; } var ret= addLinkProperty(html, 'popupkey="'+key+'"'); if (key==' ') { key=popupString('spacebar'); } return ret.replace(RegExp('^(.*?)(title=")(.*?)(".*)$', 'i'),'$1$2$3 ['+key+']$4'); } //</NOLITE> // ENDFILE: shortcutkeys.js // STARTFILE: diffpreview.js //<NOLITE> function loadDiff(article, oldid, diff, navpop) { navpop.diffData={}; var oldRev, newRev; switch (diff) { case 'cur': switch ( oldid ) { case null: case '': case 'prev': // eg newmessages diff link oldRev='0&direction=prev'; newRev=0; break; default: oldRev = oldid; newRev = 0; } break; case 'prev': oldRev = ( oldid || 0 ) + '&direction=prev'; newRev = oldid; break; case 'next': oldRev = oldid; newRev = oldid + '&direction=next'; break; default: oldRev = oldid || 0; newRev = diff || 0; break; } oldRev = oldRev || 0; newRev = newRev || 0; var go = function() { pendingNavpopTask(navpop); getWiki(article, doneDiffNew, newRev, navpop); pendingNavpopTask(navpop); getWiki(article, doneDiffOld, oldRev, navpop); var tz = Cookie.read('popTz'); if ( (window.wgEnableAPI || wgEnableAPI) && getValueOf('popupAdjustDiffDates') && tz===null) { pendingNavpopTask(navpop); getPageWithCaching(pg.wiki.apiwikibase + '?format=json&action=query&meta=userinfo&uiprop=options', function(d) { completedNavpopTask(navpop); setTimecorrectionCookie(d); if (diffDownloadsComplete(navpop)) { insertDiff(navpop); } }, navpop); } return true; // remove hook once run } if (navpop.visible || !getValueOf('popupLazyDownloads')) { go(); } else { navpop.addHook(go, 'unhide', 'before', 'DOWNLOAD_DIFFS'); } } function setTimecorrectionCookie(d) { try { var jsobj=getJsObj(d.data); var tz=jsobj.query.userinfo.options.timecorrection; } catch (someError) { logerr( 'setTimecorretion failed' ); return; } Cookie.create( 'popTz', getTimeOffset(tz), 1); } function doneDiff(download, isOld) { if (!download.owner || !download.owner.diffData) { return; } var navpop=download.owner; var label= (isOld) ? 'Old' : 'New'; var otherLabel=(isOld) ? 'New' : 'Old'; navpop.diffData[label]=download; completedNavpopTask(download.owner); if (diffDownloadsComplete(navpop)) { insertDiff(navpop); } } function diffDownloadsComplete(navpop) { if ( Cookie.read('popTz')===null) { return false; } return navpop.diffData.Old && navpop.diffData.New; } function doneDiffNew(download) { doneDiff(download, false); } function doneDiffOld(download) { doneDiff(download, true); } function rmBoringLines(a,b,context) { if (typeof context == 'undefined') { context=2; } // this is fairly slow... i think it's quicker than doing a word-based diff from the off, though var aa=[], aaa=[]; var bb=[], bbb=[]; var i, j; // first, gather all disconnected nodes in a and all crossing nodes in a and b for (i=0; i<a.length; ++i ) { if(!a[i].paired) { aa[i]=1; } else if (countCrossings(b,a,i, true)) { aa[i]=1; bb[ a[i].row ] = 1; } } // pick up remaining disconnected nodes in b for (i=0; i<b.length; ++i ) { if (bb[i]==1) { continue; } if(!b[i].paired) { bb[i]=1; } } // another pass to gather context: we want the neighbours of included nodes which are not yet included // we have to add in partners of these nodes, but we don't want to add context for *those* nodes in the next pass for (i=0; i<b.length; ++i) { if ( bb[i] == 1 ) { for (j=max(0,i-context); j < min(b.length, i+context); ++j) { if ( !bb[j] ) { bb[j] = 1; aa[ b[j].row ] = 0.5; } } } } for (i=0; i<a.length; ++i) { if ( aa[i] == 1 ) { for (j=max(0,i-context); j < min(a.length, i+context); ++j) { if ( !aa[j] ) { aa[j] = 1; bb[ a[j].row ] = 0.5; } } } } for (i=0; i<bb.length; ++i) { if (bb[i] > 0) { // it's a row we need if (b[i].paired) { bbb.push(b[i].text); } // joined; partner should be in aa else { bbb.push(b[i]); } } } for (i=0; i<aa.length; ++i) { if (aa[i] > 0) { // it's a row we need if (a[i].paired) { aaa.push(a[i].text); } // joined; partner should be in aa else { aaa.push(a[i]); } } } return { a: aaa, b: bbb}; } function stripOuterCommonLines(a,b,context) { var i=0; while (i<a.length && i < b.length && a[i]==b[i]) { ++i; } var j=a.length-1; var k=b.length-1; while ( j>=0 && k>=0 && a[j]==b[k] ) { --j; --k; } return { a: a.slice(max(0,i - 1 - context), min(a.length+1, j + context+1)), b: b.slice(max(0,i - 1 - context), min(b.length+1, k + context+1)) }; } function insertDiff(navpop) { // for speed reasons, we first do a line-based diff, discard stuff that seems boring, then do a word-based diff // FIXME: sometimes this gives misleading diffs as distant chunks are squashed together var oldlines=navpop.diffData.Old.data.split('\n'); var newlines=navpop.diffData.New.data.split('\n'); var inner=stripOuterCommonLines(oldlines,newlines,getValueOf('popupDiffContextLines')); oldlines=inner.a; newlines=inner.b; var truncated=false; getValueOf('popupDiffMaxLines'); if (oldlines.length > pg.option.popupDiffMaxLines || newlines.length > pg.option.popupDiffMaxLines) { // truncate truncated=true; inner=stripOuterCommonLines(oldlines.slice(0,pg.option.popupDiffMaxLines), newlines.slice(0,pg.option.popupDiffMaxLines), pg.option.popupDiffContextLines); oldlines=inner.a; newlines=inner.b; } var lineDiff=diff(oldlines, newlines); var lines2=rmBoringLines(lineDiff.o, lineDiff.n); var oldlines2=lines2.a; var newlines2=lines2.b; var simpleSplit = !String.prototype.parenSplit.isNative; var html='<hr>'; if (getValueOf('popupDiffDates')) { html += diffDatesTable(navpop.diffData.Old, navpop.diffData.New); html += '<hr>'; } html += shortenDiffString( diffString(oldlines2.join('\n'), newlines2.join('\n'), simpleSplit), getValueOf('popupDiffContextCharacters') ).join('<hr>'); setPopupTipsAndHTML(html.split('\n').join('<br>') + (truncated ? '<hr><b>'+popupString('Diff truncated for performance reasons')+'</b>' : '') , 'popupPreview', navpop.idNumber); } function diffDatesTable( oldDl, newDl ) { var html='<table class="popup_diff_dates">'; html += diffDatesTableRow( newDl, tprintf('New revision')); html += diffDatesTableRow( oldDl, tprintf('Old revision')); html += '</table>'; return html; } function diffDatesTableRow( dl, label ) { var txt=''; if (!dl) { txt=popupString('Something went wrong :-('); } else if (!dl.lastModified) { txt= (/^\s*$/.test(dl.data)) ? popupString('Empty revision, maybe non-existent') : popupString('Unknown date'); } else { var datePrint=getValueOf('popupDiffDatePrinter'); if (typeof dl.lastModified[datePrint] == 'function') { if (getValueOf('popupAdjustDiffDates')) { var off; if (off=Cookie.read('popTz')) { var d2=adjustDate(dl.lastModified, off); txt = dayFormat(d2, true) + ' ' + timeFormat(d2, true); } } else { txt = dl.lastModified[datePrint](); } } else { txt = tprintf('Invalid %s %s', ['popupDiffDatePrinter', datePrint]); } } var revlink = generalLink({url: dl.url.replace(/&.*?(oldid=[0-9]+(?:&direction=[^&]*)?).*/, '&$1'), text: label, title: label}); return simplePrintf('<tr><td>%s</td><td>%s</td></tr>', [ revlink, txt ]); } //</NOLITE> // ENDFILE: diffpreview.js // STARTFILE: links.js //<NOLITE> ///////////////////// // LINK GENERATION // ///////////////////// // titledDiffLink --> titledWikiLink --> generalLink // wikiLink --> titledWikiLink --> generalLink // editCounterLink --> generalLink function titledDiffLink(l) { // article, text, title, from, to) { return titledWikiLink({article: l.article, action: l.to + '&oldid=' + l.from, newWin: l.newWin, noPopup: l.noPopup, text: l.text, title: l.title, /* hack: no oldid here */ actionName: 'diff'}); } function wikiLink(l) { //{article:article, action:action, text:text, oldid, newid}) { if (! (typeof l.article == typeof {} && typeof l.action == typeof '' && typeof l.text==typeof '')) return null; if (typeof l.oldid == 'undefined') { l.oldid=null; } var savedOldid = l.oldid; if (!/^(edit|view|revert|render)$|^raw/.test(l.action)) { l.oldid=null; } var hint=popupString(l.action + 'Hint'); // revertHint etc etc etc var oldidData=[l.oldid, safeDecodeURI(l.article)]; var revisionString = tprintf('revision %s of %s', oldidData); log('revisionString='+revisionString); switch (l.action) { case 'edit&section=new': hint = popupString('newSectionHint'); break; case 'edit&undo=': if (l.diff && l.diff != 'prev' && savedOldid ) { l.action += l.diff + '&undoafter=' + savedOldid; } else if (savedOldid) { l.action += savedOldid; } hint = popupString('undoHint'); break; case 'raw&ctype=text/css': hint=popupString('rawHint'); break; case 'revert': if (!window.wgEnableAPI || !wgEnableAPI) { alert( 'This function of navigation popups now requires a MediaWiki ' + 'installation with the API enabled.'); break; } var p=parseParams(pg.current.link.href); l.action='edit&autoclick=wpSave&actoken=' + autoClickToken() + '&autosummary=' + revertSummary(l.oldid, p.diff); if (p.diff=='prev') { l.action += '&direction=prev'; revisionString = tprintf('the revision prior to revision %s of %s', oldidData); } if (getValueOf('popupRevertSummaryPrompt')) { l.action += '&autosummaryprompt=true'; } if (getValueOf('popupMinorReverts')) { l.action += '&autominor=true'; } log('revisionString is now '+revisionString); break; case 'nullEdit': l.action='edit&autoclick=wpSave&actoken=' + autoClickToken() + '&autosummary=null'; break; case 'historyfeed': l.action='history&feed=rss'; break; case 'markpatrolled': l.action='markpatrolled&rcid='+l.rcid; } if (hint) { if (l.oldid) { hint = simplePrintf(hint, [revisionString]); } else { hint = simplePrintf(hint, [safeDecodeURI(l.article)]); } } else { hint = safeDecodeURI(l.article + '&action=' + l.action) + (l.oldid) ? '&oldid='+l.oldid : ''; } return titledWikiLink({article: l.article, action: l.action, text: l.text, newWin:l.newWin, title: hint, oldid: l.oldid, noPopup: l.noPopup}); } function revertSummary(oldid, diff) { var ret=''; if (diff == 'prev') { ret=getValueOf('popupQueriedRevertToPreviousSummary'); } else { ret = getValueOf('popupQueriedRevertSummary'); } return ret + '&autorv=' + oldid; } function titledWikiLink(l) { // possible properties of argument: // article, action, text, title, oldid, actionName, className, noPopup // oldid = null is fine here // article and action are mandatory args if (typeof l.article == 'undefined' || typeof l.action=='undefined') { errlog('got undefined article or action in titledWikiLink'); return null; } var base = pg.wiki.titlebase + l.article.urlString(); var url=base; if (typeof l.actionName=='undefined' || !l.actionName) { l.actionName='action'; } // no need to add &action=view, and this confuses anchors if (l.action != 'view') { url = base + '&' + l.actionName + '=' + l.action; } if (typeof l.oldid!='undefined' && l.oldid) { url+='&oldid='+l.oldid; } var cssClass=pg.misc.defaultNavlinkClassname; if (typeof l.className!='undefined' && l.className) { cssClass=l.className; } return generalNavLink({url: url, newWin: l.newWin, title: (typeof l.title != 'undefined') ? l.title : null, text: (typeof l.text!='undefined')?l.text:null, className: cssClass, noPopup:l.noPopup}); } function getLastContrib(wikipage, newWin) { getHistoryInfo(wikipage, function(x){processLastContribInfo(x,{page: wikipage, newWin: newWin})}); } function processLastContribInfo(info, stuff) { if(!info.edits || !info.edits.length) { alert('Popups: an odd thing happened. Please retry.'); return; } if(!info.firstNewEditor) { alert(tprintf('Only found one editor: %s made %s edits', [info.edits[0].editor,info.edits.length])); return; } var newUrl=pg.wiki.titlebase + new Title(stuff.page).urlString() + '&diff=cur&oldid='+info.firstNewEditor.oldid; displayUrl(newUrl, stuff.newWin); } function getDiffSinceMyEdit(wikipage, newWin) { getHistoryInfo(wikipage, function(x){processDiffSinceMyEdit(x,{page: wikipage, newWin: newWin})}); } function processDiffSinceMyEdit(info, stuff) { if(!info.edits || !info.edits.length) { alert('Popups: something fishy happened. Please try again.'); return; } var friendlyName=stuff.page.split('_').join(' '); if(!info.myLastEdit) { alert(tprintf('Couldn\'t find an edit by %s\nin the last %s edits to\n%s', [info.userName, getValueOf('popupHistoryLimit'), friendlyName])); return; } if(info.myLastEdit.index==0) { alert(tprintf("%s seems to be the last editor to the page %s", [info.userName, friendlyName])); return; } var newUrl=pg.wiki.titlebase + new Title(stuff.page).urlString() + '&diff=cur&oldid='+ info.myLastEdit.oldid; displayUrl(newUrl, stuff.newWin); } function displayUrl(url, newWin){ if(newWin) { window.open(url); } else { document.location=url; } } function purgePopups() { processAllPopups(true); setupCache(); // deletes all cached items (not browser cached, though...) pg.option={}; abortAllDownloads(); } function processAllPopups(nullify, banish) { for (var i=0; i<pg.current.links.length; ++i) { if (!pg.current.links[i].navpopup) { continue; } (nullify || banish) && pg.current.links[i].navpopup.banish(); pg.current.links[i].simpleNoMore=false; nullify && (pg.current.links[i].navpopup=null); } } function disablePopups(){ processAllPopups(false, true); setupTooltips(null, true); } function togglePreviews() { processAllPopups(true, true); pg.option.simplePopups=!pg.option.simplePopups; abortAllDownloads(); } function magicHistoryLink(l) { // FIXME use onclick change href trick to sort this out instead of window.open var jsUrl='', title=''; switch(l.id) { case 'lastContrib': jsUrl=simplePrintf('javascript:getLastContrib(\'%s\',%s)', [l.article.toString(true).split("'").join("\\'"), l.newWin]); title=popupString('lastContribHint'); break; case 'sinceMe': jsUrl=simplePrintf('javascript:getDiffSinceMyEdit(\'%s\',%s)', [l.article.toString(true).split("'").join("\\'"), l.newWin]); title=popupString('sinceMeHint'); break; } return generalNavLink({url: jsUrl, newWin: false, // can't have new windows with JS links, I think title: title, text: l.text, noPopup: l.noPopup}); } function popupMenuLink(l) { var jsUrl=simplePrintf('javascript:%s()', [l.id]); var title=popupString(simplePrintf('%sHint', [l.id])); return generalNavLink({url: jsUrl, newWin:false, title:title, text:l.text, noPopup:l.noPopup}); } function specialLink(l) { // properties: article, specialpage, text, sep if (typeof l.specialpage=='undefined'||!l.specialpage) return null; var base = pg.wiki.titlebase + pg.ns.special+':'+l.specialpage; if (typeof l.sep == 'undefined' || l.sep===null) l.sep='&target='; var article=l.article.urlString({keepSpaces: l.specialpage=='Search'}); var hint=popupString(l.specialpage+'Hint'); switch (l.specialpage) { case 'Log': switch (l.sep) { case '&user=': hint=popupString('userLogHint'); break; case '&type=block&page=': hint=popupString('blockLogHint'); break; case '&page=': hint=popupString('pageLogHint'); break; case '&type=protect&page=': hint=popupString('protectLogHint'); break; case '&type=delete&page=': hint=popupString('deleteLogHint'); break; default: log('Unknown log type, sep=' + l.sep); hint='Missing hint (FIXME)'; } break; case 'PrefixIndex': article += '/'; break; } if (hint) hint = simplePrintf(hint, [safeDecodeURI(l.article)]); else hint = safeDecodeURI(l.specialpage+':'+l.article) ; var url = base + l.sep + article; return generalNavLink({url: url, title: hint, text: l.text, newWin:l.newWin, noPopup:l.noPopup}); } function generalLink(l) { // l.url, l.text, l.title, l.newWin, l.className, l.noPopup if (typeof l.url=='undefined') return null; // only quotation marks in the url can screw us up now... I think var url=l.url.split('"').join('%22'); var ret='<a href="' + url + '"'; if (typeof l.title!='undefined' && l.title) { ret += ' title="' + l.title + '"'; } if (l.noPopup) { ret += ' noPopup=1'; } var newWin; if (typeof l.newWin=='undefined' || l.newWin===null) { newWin=getValueOf('popupNewWindows'); } else { newWin=l.newWin; } if (newWin) { ret += ' target="_blank"'; } if (typeof l.className!='undefined'&&l.className) { ret+=' class="'+l.className+'"'; } ret += '>'; if (typeof l.text==typeof '') { ret+= l.text; } ret +='</a>'; return ret; } function appendParamsToLink(linkstr, params) { var sp=linkstr.parenSplit(RegExp('(href="[^"]+?)"', 'i')); if (sp.length<2) return null; var ret=sp.shift() + sp.shift(); ret += '&' + params + '"'; ret += sp.join(''); return ret; } function changeLinkTargetLink(x) { // newTarget, text, hint, summary, clickButton, minor, title (optional) { if (x.newTarget) { log ('changeLinkTargetLink: newTarget=' + x.newTarget); } // optional: oldTarget (in wikitext) // if x.newTarget omitted or null, remove the link //x.text=encodeURI(x.text); // this buggers things up on zh.wikipedia.org and doesn't seem necessary x.clickButton=encodeURI(x.clickButton); // FIXME: first character of page title as well as namespace should be case insensitive // eg [[category:foo]] and [[Category:Foo]] are equivalent // this'll break if charAt(0) is nasty var cA=literalizeRegex(x.oldTarget); var chs=cA.charAt(0).toUpperCase(); chs='['+chs + chs.toLowerCase()+']'; var currentArticleRegexBit=encodeURIComponent(chs+cA.substring(1)); currentArticleRegexBit=currentArticleRegexBit .split(RegExp('[_ ]+', 'g')).join('[_ ]+') .split( "%20" ).join('[_ ]+') .split('\\(').join('(?:%2528|\\()') .split('\\)').join('(?:%2529|\\))'); // leading and trailing space should be ignored, and anchor bits optional: currentArticleRegexBit = '\\s*(' + currentArticleRegexBit + '(?:#[^\\[\\|]*)?)\\s*'; // e.g. Computer (archaic) -> \s*([Cc]omputer[_ ](?:%2528|\()archaic(?:%2528|\)))\s* // autoedit=s~\[\[([Cc]ad)\]\]~[[Computer-aided%20design|$1]]~g;s~\[\[([Cc]AD)[|]~[[Computer-aided%20design|~g var title=x.title || wgPageName.split('_').join(' '); var lk=titledWikiLink({article: new Title(title), newWin:x.newWin, action: 'edit', text: x.text, title: x.hint, className: 'popup_change_title_link' }); var cmd=''; if (x.newTarget) { // escape '&' and other nasties var t=encodeURIComponent(x.newTarget); var s=encodeURIComponent(literalizeRegex(x.newTarget)); cmd += 's~\\[\\['+currentArticleRegexBit+'\\]\\]~[['+t+'|$1]]~g;'; cmd += 's~\\[\\['+currentArticleRegexBit+'[|]~[['+t+'|~g;'; cmd += 's~\\[\\['+s + '\\|' + s + '\\]\\]~[[' + t + ']]~g'; } else { cmd += 's~\\[\\['+currentArticleRegexBit+'\\]\\]~$1~g;'; cmd += 's~\\[\\['+currentArticleRegexBit+'[|](.*?)\\]\\]~$2~g'; } cmd += '&autoclick='+x.clickButton + '&actoken=' + autoClickToken(); cmd += ( x.minor == null ) ? '' : '&autominor='+x.minor; cmd += ( x.watch == null ) ? '' : '&autowatch='+x.watch; cmd += '&autosummary='+encodeURIComponent(x.summary); return appendParamsToLink(lk, 'autoedit='+cmd); } function redirLink(redirMatch, article) { // NB redirMatch is in wikiText var ret=''; if (getValueOf('popupAppendRedirNavLinks') && getValueOf('popupNavLinks')) { ret += '<hr>'; if (getValueOf('popupFixRedirs') && typeof autoEdit != 'undefined' && autoEdit) { log('redirLink: newTarget=' + redirMatch); ret += addPopupShortcut( changeLinkTargetLink( {newTarget: redirMatch, text: popupString('Redirects'), hint: popupString('Fix this redirect'), summary: simplePrintf(getValueOf('popupFixRedirsSummary'), [article.toString(), redirMatch ]), oldTarget: article.toString(), clickButton: getValueOf('popupRedirAutoClick'), minor: true, watch: getValueOf('popupWatchRedirredPages')}) , 'R'); ret += popupString(' to '); } else ret += popupString('Redirects') + popupString(' to '); return ret; } else return '<br> ' + popupString('Redirects') + popupString(' to ') + titledWikiLink({article: new Title().fromWikiText(redirMatch), action: 'view', /* FIXME: newWin */ text: safeDecodeURI(redirMatch), title: popupString('Bypass redirect')}); } function arinLink(l) { if (!saneLinkCheck(l)) { return null; } if ( ! l.article.isIpUser() || ! pg.wiki.wikimedia) return null; var uN=l.article.userName(); return generalNavLink({url:'http://ws.arin.net/cgi-bin/whois.pl?queryinput=' + encodeURIComponent(uN), newWin:l.newWin, title: tprintf('Look up %s in ARIN whois database', [uN]), text: l.text, noPopup:1}); } function toolDbName(cookieStyle) { var ret = wgDBname; if (!cookieStyle) { ret+= '_p'; } return ret; } function saneLinkCheck(l) { if (typeof l.article != typeof {} || typeof l.text != typeof '') { return false; } return true; } function editCounterLink(l) { if(!saneLinkCheck(l)) return null; if (! pg.wiki.wikimedia) return null; var uN=l.article.userName(); var tool=getValueOf('popupEditCounterTool'); var url; var soxredToolUrl='http://toolserver.org/~soxred93/count/index.php?name=$1&lang=$2&wiki=$3'; var kateToolUrl='http://toolserver.org/~$3/cgi-bin/Tool1/wannabe_kate?username=$1&site=en.wikipedia.org&$2'; switch(tool) { case 'custom': url=simplePrintf(getValueOf('popupEditCounterUrl'), [ encodeURIComponent(uN), toolDbName() ]); break; case 'kate': case 'interiot': url=simplePrintf(kateToolUrl, [ encodeURIComponent(uN), toolDbName(), tool ]); break; default: var theWiki=pg.wiki.hostname.split('.'); url=simplePrintf(soxredToolUrl, [ encodeURIComponent(uN), theWiki[0], theWiki[1] ]); } return generalNavLink({url:url, title: tprintf('editCounterLinkHint', [uN]), newWin:l.newWin, text: l.text, noPopup:1}); } function globalSearchLink(l) { if(!saneLinkCheck(l)) return null; var base='http://vs.aka-online.de/cgi-bin/globalwpsearch.pl?timeout=120&search='; var article=l.article.urlString({keepSpaces:true}); return generalNavLink({url:base + article, newWin:l.newWin, title: tprintf('globalSearchHint', [safeDecodeURI(l.article)]), text: l.text, noPopup:1}); } function googleLink(l) { if(!saneLinkCheck(l)) return null; var base='http://www.google.com/search?q='; var article=l.article.urlString({keepSpaces:true}); return generalNavLink({url:base + '%22' + article + '%22', newWin:l.newWin, title: tprintf('googleSearchHint', [safeDecodeURI(l.article)]), text: l.text, noPopup:1}); } function editorListLink(l) { if(!saneLinkCheck(l)) return null; var article= l.article.articleFromTalkPage() || l.article; var base='http://toolserver.org/~tim/cgi-bin/contribution-counter?page='; return generalNavLink({url:base+article.urlString(), title: tprintf('editorListHint', [article]), newWin:l.newWin, text: l.text, noPopup:1}); } function generalNavLink(l) { l.className = (l.className==null) ? 'popupNavLink' : l.className; return generalLink(l); } ////////////////////////////////////////////////// // magic history links // function getHistoryInfo(wikipage, whatNext) { log('getHistoryInfo'); getHistory(wikipage, whatNext ? function(d){whatNext(processHistory(d));} : processHistory); } // FIXME eliminate pg.idNumber ... how? :-( function getHistory(wikipage, onComplete) { log('getHistory'); if( !window.wgEnableAPI || !wgEnableAPI ) { alert( 'This function of navigation popups now requires a MediaWiki ' + 'installation with the API enabled.'); return false; } var url = pg.wiki.apiwikibase + '?format=json&action=query&prop=revisions&titles=' + new Title(wikipage).urlString() + '&rvlimit=' + getValueOf('popupHistoryLimit'); log('getHistory: url='+url); return startDownload(url, pg.idNumber+'history', onComplete); } function processHistory(download) { var jsobj = getJsObj(download.data); try { window.x=jsobj; var p=jsobj['query']['pages'] for (var pageid in p) { var revisions=p[pageid]['revisions']; // we only get the first one break; } } catch (someError) { log('Something went wrong with JSON business'); return finishProcessHistory([]); } var edits=[]; for (var i=0; i<revisions.length; ++i) { edits.push({ oldid: revisions[i]['revid'], editor: revisions[i]['user'] }); } log('processed ' + edits.length + ' edits'); return finishProcessHistory(edits, wgUserName); } function finishProcessHistory(edits, userName) { var histInfo={}; histInfo.edits=edits; histInfo.userName=userName; for (var i=0; i<edits.length; ++i) { if (typeof histInfo.myLastEdit == 'undefined' && userName && edits[i].editor==userName) { histInfo.myLastEdit={index: i, oldid: edits[i].oldid, previd: (i==0 ? null : edits[i-1].oldid)}; } if (typeof histInfo.firstNewEditor == 'undefined' && edits[i].editor != edits[0].editor) { histInfo.firstNewEditor={index:i, oldid:edits[i].oldid, previd: (i==0 ? null : edits[i-1].oldid)}; } } //pg.misc.historyInfo=histInfo; return histInfo; } //</NOLITE> // ENDFILE: links.js // STARTFILE: options.js ////////////////////////////////////////////////// // options // check for cookies and existing value, else use default function defaultize(x) { var val=null; if (x!='popupCookies') { defaultize('popupCookies'); if (pg.option.popupCookies && (val=Cookie.read(x))) { pg.option[x]=val; return; } } if (pg.option[x]===null || typeof pg.option[x]=='undefined') { if (typeof window[x] != 'undefined' ) pg.option[x]=window[x]; else pg.option[x]=pg.optionDefault[x]; } } function newOption(x, def) { pg.optionDefault[x]=def; } function setDefault(x, def) { return newOption(x, def); } function getValueOf(varName) { defaultize(varName); return pg.option[varName]; } function useDefaultOptions() { // for testing for (var p in pg.optionDefault) { pg.option[p]=pg.optionDefault[p]; if (typeof window[p]!='undefined') { delete window[p]; } } } function setOptions() { // user-settable parameters and defaults var userIsSysop = false; if ( wgUserGroups ) { for ( var g = 0; g < wgUserGroups.length; ++g ) { if ( wgUserGroups[g] == "sysop" ) userIsSysop = true } } // Basic options newOption('popupDelay', 0.5); newOption('popupHideDelay', 0.5); newOption('simplePopups', false); newOption('popupStructure', 'shortmenus'); // see later - default for popupStructure is 'original' if simplePopups is true newOption('popupActionsMenu', true); newOption('popupSetupMenu', true); newOption('popupAdminLinks', userIsSysop); newOption('popupShortcutKeys', false); newOption('popupHistoricalLinks', true); newOption('popupOnlyArticleLinks', true); newOption('removeTitles', true); newOption('popupMaxWidth', 350); newOption('popupInitialWidth', false); // integer or false newOption('popupSimplifyMainLink', true); newOption('popupAppendRedirNavLinks', true); newOption('popupTocLinks', false); newOption('popupSubpopups', true); newOption('popupDragHandle', false /* 'popupTopLinks'*/); newOption('popupLazyPreviews', true); newOption('popupLazyDownloads', true); newOption('popupAllDabsStubs', false); newOption('popupDebugging', false); newOption('popupAdjustDiffDates', true); newOption('popupActiveNavlinks', true); newOption('popupModifier', false); // ctrl, shift, alt or meta newOption('popupModifierAction', 'enable'); // or 'disable' newOption('popupDraggable', true); //<NOLITE> // images newOption('popupImages', true); newOption('imagePopupsForImages', true); newOption('popupNeverGetThumbs', false); //newOption('popupImagesToggleSize', true); newOption('popupThumbAction', 'imagepage'); //'sizetoggle'); newOption('popupImageSize', 60); newOption('popupImageSizeLarge', 200); // redirs, dabs, reversion newOption('popupFixRedirs', false); newOption('popupRedirAutoClick', 'wpDiff'); newOption('popupFixDabs', false); newOption('popupRevertSummaryPrompt', false); newOption('popupMinorReverts', false); newOption('popupRedlinkRemoval', false); newOption('popupWatchDisambiggedPages', null); newOption('popupWatchRedirredPages', null); newOption('popupDabWiktionary', 'last'); // navlinks newOption('popupNavLinks', true); newOption('popupNavLinkSeparator', ' &sdot; '); newOption('popupLastEditLink', true); newOption('popupEditCounterTool', 'soxred'); newOption('popupEditCounterUrl', ''); newOption('popupExtraUserMenu', ''); //</NOLITE> // previews etc newOption('popupPreviews', true); newOption('popupSummaryData', true); newOption('popupMaxPreviewSentences', 5); newOption('popupMaxPreviewCharacters', 600); newOption('popupLastModified', true); newOption('popupPreviewKillTemplates', true); newOption('popupPreviewRawTemplates', true); newOption('popupPreviewFirstParOnly', true); newOption('popupPreviewCutHeadings', true); newOption('popupPreviewButton', false); newOption('popupPreviewButtonEvent', 'click'); //<NOLITE> // diffs newOption('popupPreviewDiffs', true); newOption('popupDiffMaxLines', 100); newOption('popupDiffContextLines', 2); newOption('popupDiffContextCharacters', 40); newOption('popupDiffDates', true); newOption('popupDiffDatePrinter', 'toLocaleString'); // edit summaries. God, these are ugly. newOption('popupFixDabsSummary', popupString('defaultpopupFixDabsSummary') ); newOption('popupExtendedRevertSummary', popupString('defaultpopupExtendedRevertSummary') ); newOption('popupTimeOffset', null); newOption('popupRevertSummary', popupString('defaultpopupRevertSummary') ); newOption('popupRevertToPreviousSummary', popupString('defaultpopupRevertToPreviousSummary') ); newOption('popupQueriedRevertSummary', popupString('defaultpopupQueriedRevertSummary') ); newOption('popupQueriedRevertToPreviousSummary', popupString('defaultpopupQueriedRevertToPreviousSummary') ); newOption('popupFixRedirsSummary', popupString('defaultpopupFixRedirsSummary') ); newOption('popupRedlinkSummary', popupString('defaultpopupRedlinkSummary') ); newOption('popupRmDabLinkSummary', popupString('defaultpopupRmDabLinkSummary') ); //</NOLITE> // misc newOption('popupCookies', false); newOption('popupHistoryLimit', 50); //<NOLITE> newOption('popupFilters', [popupFilterStubDetect, popupFilterDisambigDetect, popupFilterPageSize, popupFilterCountLinks, popupFilterCountImages, popupFilterCountCategories, popupFilterLastModified]); newOption('extraPopupFilters', []); newOption('popupOnEditSelection', 'cursor'); newOption('popupPreviewHistory', true); newOption('popupImageLinks', true); newOption('popupCategoryMembers', true); newOption('popupUserInfo', true); newOption('popupHistoryPreviewLimit', 25); newOption('popupContribsPreviewLimit',25); //</NOLITE> // new windows newOption('popupNewWindows', false); newOption('popupLinksNewWindow', {'lastContrib': true, 'sinceMe': true}); // regexps newOption('popupDabRegexp', '([{][{]\\s*disambig|disambig\\s*[}][}]|disamb\\s*[}][}]|dab\\s*[}][}])|[{][{]\\s*(((geo|hn|road?|school|number)dis)|[234][lc][acw]|shipindex)(\\s*[|][^}]*)?\\s*[}][}]|is a .*disambiguation.*page'); newOption('popupStubRegexp', '(sect)?stub[}][}]|This .*-related article is a .*stub'); newOption('popupImageVarsRegexp', 'image|image_(?:file|skyline|name|flag|seal)|cover|badge|logo'); } // ENDFILE: options.js // STARTFILE: strings.js //<NOLITE> ////////////////////////////////////////////////// // Translatable strings ////////////////////////////////////////////////// // // See instructions at // //en.wikipedia.org/wiki/Wikipedia:Tools/Navigation_popups/Translation pg.string = { ///////////////////////////////////// // summary data, searching etc. ///////////////////////////////////// 'article': 'article', 'category': 'category', 'categories': 'categories', 'image': 'image', 'images': 'images', 'stub': 'stub', 'section stub': 'section stub', 'Empty page': 'Empty page', 'kB': 'kB', 'bytes': 'bytes', 'day': 'day', 'days': 'days', 'hour': 'hour', 'hours': 'hours', 'minute': 'minute', 'minutes': 'minutes', 'second': 'second', 'seconds': 'seconds', 'week': 'week', 'weeks': 'weeks', 'search': 'search', 'SearchHint': 'Find English Wikipedia articles containing %s', 'web': 'web', 'global': 'global', 'globalSearchHint': 'Search across Wikipedias in different languages for %s', 'googleSearchHint': 'Google for %s', ///////////////////////////////////// // article-related actions and info // (some actions also apply to user pages) ///////////////////////////////////// 'actions': 'actions', ///// view articles and view talk 'popupsMenu': 'popups', 'togglePreviewsHint': 'Toggle preview generation in popups on this page', 'enable previews': 'enable previews', 'disable previews': 'disable previews', 'toggle previews': 'toggle previews', 'show preview': 'show preview', 'reset': 'reset', 'more...': 'more...', 'disable': 'disable popups', 'disablePopupsHint': 'Disable popups on this page. Reload page to re-enable.', 'historyfeedHint': 'RSS feed of recent changes to this page', 'purgePopupsHint': 'Reset popups, clearing all cached popup data.', 'PopupsHint': 'Reset popups, clearing all cached popup data.', 'spacebar': 'space', 'view': 'view', 'view article': 'view article', 'viewHint': 'Go to %s', 'talk': 'talk', 'talk page': 'talk page', 'this&nbsp;revision': 'this&nbsp;revision', 'revision %s of %s': 'revision %s of %s', 'Revision %s of %s': 'Revision %s of %s', 'the revision prior to revision %s of %s': 'the revision prior to revision %s of %s', 'Toggle image size': 'Click to toggle image size', 'del': 'del', ///// delete, protect, move 'delete': 'delete', 'deleteHint': 'Delete %s', 'undeleteShort': 'un', 'UndeleteHint': 'Show the deletion history for %s', 'protect': 'protect', 'protectHint': 'Restrict editing rights to %s', 'unprotectShort': 'un', 'unprotectHint': 'Allow %s to be edited by anyone again', 'move': 'move', 'move page': 'move page', 'MovepageHint': 'Change the title of %s', 'edit': 'edit', ///// edit articles and talk 'edit article': 'edit article', 'editHint': 'Change the content of %s', 'edit talk': 'edit talk', 'new': 'new', 'new topic': 'new topic', 'newSectionHint': 'Start a new section on %s', 'null edit': 'null edit', 'nullEditHint': 'Submit an edit to %s, making no changes ', 'hist': 'hist', ///// history, diffs, editors, related 'history': 'history', 'historyHint': 'List the changes made to %s', 'last': 'last', 'lastEdit': 'lastEdit', 'mark patrolled': 'mark patrolled', 'markpatrolledHint': 'Mark this edit as patrolled', 'show last edit': 'most recent edit', 'Show the last edit': 'Show the effects of the most recent change', 'lastContrib': 'lastContrib', 'last set of edits': 'latest edits', 'lastContribHint': 'Show the net effect of changes made by the last editor', 'cur': 'cur', 'diffCur': 'diffCur', 'Show changes since revision %s': 'Show changes since revision %s', '%s old': '%s old', // as in 4 weeks old 'oldEdit': 'oldEdit', 'purge': 'purge', 'purgeHint': 'Demand a fresh copy of %s', 'raw': 'source', 'rawHint': 'Download the source of %s', 'render': 'simple', 'renderHint': 'Show a plain HTML version of %s', 'Show the edit made to get revision': 'Show the edit made to get revision', 'sinceMe': 'sinceMe', 'changes since mine': 'diff my edit', 'sinceMeHint': 'Show changes since my last edit', 'Couldn\'t find an edit by %s\nin the last %s edits to\n%s': 'Couldn\'t find an edit by %s\nin the last %s edits to\n%s', 'eds': 'eds', 'editors': 'editors', 'editorListHint': 'List the users who have edited %s', 'related': 'related', 'relatedChanges': 'relatedChanges', 'related changes': 'related changes', 'RecentchangeslinkedHint': 'Show changes in articles related to %s', 'editOld': 'editOld', ///// edit old version, or revert 'rv': 'rv', 'revert': 'revert', 'revertHint': 'Revert to %s', 'defaultpopupRedlinkSummary': 'Removing link to empty page [[%s]] using [[:en:Wikipedia:Tools/Navigation_popups|popups]]', 'defaultpopupFixDabsSummary': 'Disambiguate [[%s]] to [[%s]] using [[:en:Wikipedia:Tools/Navigation_popups|popups]]', 'defaultpopupFixRedirsSummary': 'Redirect bypass from [[%s]] to [[%s]] using [[:en:Wikipedia:Tools/Navigation_popups|popups]]', 'defaultpopupExtendedRevertSummary': 'Revert to revision dated %s by %s, oldid %s using [[:en:Wikipedia:Tools/Navigation_popups|popups]]', 'defaultpopupRevertToPreviousSummary': 'Revert to the revision prior to revision %s using [[:en:Wikipedia:Tools/Navigation_popups|popups]]', 'defaultpopupRevertSummary': 'Revert to revision %s using [[:en:Wikipedia:Tools/Navigation_popups|popups]]', 'defaultpopupQueriedRevertToPreviousSummary': 'Revert to the revision prior to revision $1 dated $2 by $3 using [[:en:Wikipedia:Tools/Navigation_popups|popups]]', 'defaultpopupQueriedRevertSummary': 'Revert to revision $1 dated $2 by $3 using [[:en:Wikipedia:Tools/Navigation_popups|popups]]', 'defaultpopupRmDabLinkSummary': 'Remove link to dab page [[%s]] using [[:en:Wikipedia:Tools/Navigation_popups|popups]]', 'Redirects': 'Redirects', // as in Redirects to ... ' to ': ' to ', // as in Redirects to ... 'Bypass redirect': 'Bypass redirect', 'Fix this redirect': 'Fix this redirect', 'disambig': 'disambig', ///// add or remove dab etc. 'disambigHint': 'Disambiguate this link to [[%s]]', 'Click to disambiguate this link to:': 'Click to disambiguate this link to:', 'remove this link': 'remove this link', 'remove all links to this page from this article': 'remove all links to this page from this article', 'remove all links to this disambig page from this article': 'remove all links to this disambig page from this article', 'mainlink': 'mainlink', ///// links, watch, unwatch 'wikiLink': 'wikiLink', 'wikiLinks': 'wikiLinks', 'links here': 'links here', 'whatLinksHere': 'whatLinksHere', 'what links here': 'what links here', 'WhatlinkshereHint': 'List the pages that are hyperlinked to %s', 'unwatchShort': 'un', 'watchThingy': 'watch', // called watchThingy because {}.watch is a function 'watchHint': 'Add %s to my watchlist', 'unwatchHint': 'Remove %s from my watchlist', 'Only found one editor: %s made %s edits': 'Only found one editor: %s made %s edits', '%s seems to be the last editor to the page %s': '%s seems to be the last editor to the page %s', 'rss': 'rss', ///////////////////////////////////// // diff previews ///////////////////////////////////// 'Diff truncated for performance reasons': 'Diff truncated for performance reasons', 'Old revision': 'Old revision', 'New revision': 'New revision', 'Something went wrong :-(': 'Something went wrong :-(', 'Empty revision, maybe non-existent': 'Empty revision, maybe non-existent', 'Unknown date': 'Unknown date', ///////////////////////////////////// // other special previews ///////////////////////////////////// 'Empty category': 'Empty category', 'Category members (%s shown)': 'Category members (%s shown)', 'No image links found': 'No image links found', 'File links': 'File links', 'No image found': 'No image found', 'Image from Commons': 'Image from Commons', 'Description page': 'Description page', ///////////////////////////////////// // user-related actions and info ///////////////////////////////////// 'user': 'user', ///// user page, talk, email, space 'user&nbsp;page': 'user&nbsp;page', 'user talk': 'user talk', 'edit user talk': 'edit user talk', 'leave comment': 'leave comment', 'email': 'email', 'email user': 'email user', 'EmailuserHint': 'Send an email to %s', 'space': 'space', // short form for userSpace link 'PrefixIndexHint': 'Show pages in the userspace of %s', 'count': 'count', ///// contributions, log 'edit counter': 'edit counter', 'editCounterLinkHint': 'Count the contributions made by %s', 'contribs': 'contribs', 'contributions': 'contributions', 'deletedContribs': 'deleted contributions', 'DeletedcontributionsHint': 'List deleted edits made by %s', 'ContributionsHint': 'List the contributions made by %s', 'log': 'log', 'user log': 'user log', 'userLogHint': 'Show %s\'s user log', 'arin': 'ARIN lookup', ///// ARIN lookup, block user or IP 'Look up %s in ARIN whois database': 'Look up %s in the ARIN whois database', 'unblockShort': 'un', 'block': 'block', 'block user': 'block user', 'IpblocklistHint': 'Unblock %s', 'BlockipHint': 'Prevent %s from editing', 'block log': 'block log', 'blockLogHint': 'Show the block log for %s', 'protectLogHint': 'Show the protection log for %s', 'pageLogHint': 'Show the page log for %s', 'deleteLogHint': 'Show the deletion log for %s', 'Invalid %s %s': 'The option %s is invalid: %s', 'No backlinks found': 'No backlinks found', ' and more': ' and more', 'undo': 'undo', 'undoHint': 'undo this edit', 'Download preview data': 'Download preview data', 'Invalid or IP user': 'Invalid or IP user', 'Not a registered username': 'Not a registered username', 'BLOCKED': 'BLOCKED', ' edits since: ': ' edits since: ', ///////////////////////////////////// // Autoediting ///////////////////////////////////// 'Enter a non-empty edit summary or press cancel to abort': 'Enter a non-empty edit summary or press cancel to abort', 'Failed to get revision information, please edit manually.\n\n': 'Failed to get revision information, please edit manually.\n\n', 'The %s button has been automatically clicked. Please wait for the next page to load.': 'The %s button has been automatically clicked. Please wait for the next page to load.', 'Could not find button %s. Please check the settings in your javascript file.': 'Could not find button %s. Please check the settings in your javascript file.', ///////////////////////////////////// // Popups setup ///////////////////////////////////// 'Open full-size image': 'Open full-size image', 'zxy': 'zxy' }; function popupString(str) { if (typeof popupStrings != 'undefined' && popupStrings && popupStrings[str]) { return popupStrings[str]; } if (pg.string[str]) { return pg.string[str]; } return str; } function tprintf(str,subs) { if (typeof subs != typeof []) { subs = [subs]; } return simplePrintf(popupString(str), subs); } //</NOLITE> // ENDFILE: strings.js //////////////////////////////////////////////////////////////////// // Run things //////////////////////////////////////////////////////////////////// hookEvent('load', setupPopups); addOnloadHook(autoEdit); //support for MediaWiki's live preview addOnloadHook( function() { if(typeof doLivePreview != "function" || typeof $j != "function") return; $j("#wpPreview").click(function(){ var i = setInterval(function(){ var p = document.getElementById("wikiPreview"); if(p.previousSibling.className == "mw-ajax-loader") return; p.ranSetupTooltipsAlready = false; setupTooltips(p); clearInterval(i); }, 500); }); }); qgmurqe1b61zlposnxvp7tg4w2rge84 14877 14876 2015-04-27T05:02:38Z Az1568 66 Import from WP, current code is outdated. 14877 javascript text/javascript // [[File:Wikipedia_Gadget-popups.js]] Pop-ups imported from enWP mw.loader.load( '//en.wikipedia.org/w/index.php?title=MediaWiki:Gadget-popups.js&action=raw&ctype=text/javascript' ); 7po4i1bmkow5ey6yzmipjizjgu8v77i 14878 14877 2026-08-01T17:26:44Z QueerEcofeminist 1879 [[:en:MediaWiki:Gadget-navpop.js]] पासून ५ आवर्तने आयात केलीत 14877 javascript text/javascript // [[File:Wikipedia_Gadget-popups.js]] Pop-ups imported from enWP mw.loader.load( '//en.wikipedia.org/w/index.php?title=MediaWiki:Gadget-popups.js&action=raw&ctype=text/javascript' ); 7po4i1bmkow5ey6yzmipjizjgu8v77i मिडियाविकी:Gadget-commons-file.js 8 4166 14879 2011-08-17T00:01:00Z Darklama 2894 code 14879 javascript text/javascript $(document).ready( function() { var ns = mw.config.get( 'wgNamespaceNumber' ), path = (mw.config.get('wgServer').match(/^https/) ? 'https://secure.wikimedia.org/wikipedia/commons/wiki/' : 'http://commons.wikimedia.org/wiki/'), file_ns = mw.config.get( 'wgFormattedNamespaces' )['6'], re = RegExp('^https?\:\/\/upload\.wikimedia\.org\/wikipedia\/commons\/'); if ( ns === 6 && !$('#ca-history').length && $('.sharedUploadNotice').length ) { var title = mw.util.wikiUrlencode( mw.config.get( 'wgTitle' ) ), lang = mw.config.get( 'wgUserLanguage' ); // Discussion link $('#ca-talk').filter('.new').find('a').attr('href', function(i, val) { return path + 'File_talk:' + title + '?uselang=' + lang; }); // Edit link $( document.getElementById('ca-edit') || document.getElementById('ca-viewsource') ) .find('a') .attr('href', function(i, val) { return path + 'File:' + title + '?uselang=' + lang + '&action=edit'; }); } $('a.image').attr('href', function(i, val) { if ( re.test( $(this).find('img').attr('src') ) ) { return val.replace('/wiki/' + file_ns + ':', path + 'File:'); } }); }); s7aahsjjjlpnn45wz1vlhps29jyxebp 14880 14879 2011-09-27T20:15:16Z Darklama 2894 use protocol relative path 14880 javascript text/javascript $(document).ready( function() { var ns = mw.config.get( 'wgNamespaceNumber' ), path = '//commons.wikimedia.org/wiki/', file_ns = mw.config.get( 'wgFormattedNamespaces' )['6'], re = RegExp('^https?\:\/\/upload\.wikimedia\.org\/wikipedia\/commons\/'); if ( ns === 6 && !$('#ca-history').length && $('.sharedUploadNotice').length ) { var title = mw.util.wikiUrlencode( mw.config.get( 'wgTitle' ) ), lang = mw.config.get( 'wgUserLanguage' ); // Discussion link $('#ca-talk').filter('.new').find('a').attr('href', function(i, val) { return path + 'File_talk:' + title + '?uselang=' + lang; }); // Edit link $( document.getElementById('ca-edit') || document.getElementById('ca-viewsource') ) .find('a') .attr('href', function(i, val) { return path + 'File:' + title + '?uselang=' + lang + '&action=edit'; }); } $('a.image').attr('href', function(i, val) { if ( re.test( $(this).find('img').attr('src') ) ) { return val.replace('/wiki/' + file_ns + ':', path + 'File:'); } }); }); hv92ow6bx6z85cwji09k93cpi3uk2cj 14881 14880 2011-09-27T20:21:56Z Darklama 2894 use protocol relative url 14881 javascript text/javascript $(document).ready( function() { var ns = mw.config.get( 'wgNamespaceNumber' ), path = '//commons.wikimedia.org/wiki/', file_ns = mw.config.get( 'wgFormattedNamespaces' )['6'], re = RegExp('^\/\/upload\.wikimedia\.org\/wikipedia\/commons\/'); if ( ns === 6 && !$('#ca-history').length && $('.sharedUploadNotice').length ) { var title = mw.util.wikiUrlencode( mw.config.get( 'wgTitle' ) ), lang = mw.config.get( 'wgUserLanguage' ); // Discussion link $('#ca-talk').filter('.new').find('a').attr('href', function(i, val) { return path + 'File_talk:' + title + '?uselang=' + lang; }); // Edit link $( document.getElementById('ca-edit') || document.getElementById('ca-viewsource') ) .find('a') .attr('href', function(i, val) { return path + 'File:' + title + '?uselang=' + lang + '&action=edit'; }); } $('a.image').attr('href', function(i, val) { if ( re.test( $(this).find('img').attr('src') ) ) { return val.replace('/wiki/' + file_ns + ':', path + 'File:'); } }); }); 4ca16r3b12mmdn2l1d4b31ezip8ize5 14882 14881 2026-08-01T17:27:03Z QueerEcofeminist 1879 [[:en:MediaWiki:Gadget-commons-file.js]] पासून ३ आवर्तने आयात केलीत 14881 javascript text/javascript $(document).ready( function() { var ns = mw.config.get( 'wgNamespaceNumber' ), path = '//commons.wikimedia.org/wiki/', file_ns = mw.config.get( 'wgFormattedNamespaces' )['6'], re = RegExp('^\/\/upload\.wikimedia\.org\/wikipedia\/commons\/'); if ( ns === 6 && !$('#ca-history').length && $('.sharedUploadNotice').length ) { var title = mw.util.wikiUrlencode( mw.config.get( 'wgTitle' ) ), lang = mw.config.get( 'wgUserLanguage' ); // Discussion link $('#ca-talk').filter('.new').find('a').attr('href', function(i, val) { return path + 'File_talk:' + title + '?uselang=' + lang; }); // Edit link $( document.getElementById('ca-edit') || document.getElementById('ca-viewsource') ) .find('a') .attr('href', function(i, val) { return path + 'File:' + title + '?uselang=' + lang + '&action=edit'; }); } $('a.image').attr('href', function(i, val) { if ( re.test( $(this).find('img').attr('src') ) ) { return val.replace('/wiki/' + file_ns + ':', path + 'File:'); } }); }); 4ca16r3b12mmdn2l1d4b31ezip8ize5 मिडियाविकी:Gadget-UTCLiveClock.js 8 4167 14883 2013-12-19T12:13:22Z Az1568 66 14883 javascript text/javascript mw.loader.load( '//www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-UTCLiveClock.js&action=raw&ctype=text/javascript&smaxage=21600&maxage=86400' ); r4xr7nk5qw6c9pm4tc3c1c88kkvh3qk 14884 14883 2026-08-01T17:28:22Z QueerEcofeminist 1879 [[:en:MediaWiki:Gadget-UTCLiveClock.js]] पासून १ आवर्तन आयात केलीत 14883 javascript text/javascript mw.loader.load( '//www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-UTCLiveClock.js&action=raw&ctype=text/javascript&smaxage=21600&maxage=86400' ); r4xr7nk5qw6c9pm4tc3c1c88kkvh3qk मिडियाविकी:Gadget-collectionparser.js 8 4168 14885 2008-12-08T17:13:51Z Whiteknight 3636 New page: // Adapted from User:Pediapress/collection-parser.js function putOutList(list) { var articleName, bookName = list[0]; var out = '== ' + bookName.replace(/_/g, " ") +' ==\n'; out += ... 14885 javascript text/javascript // Adapted from User:Pediapress/collection-parser.js function putOutList(list) { var articleName, bookName = list[0]; var out = '== ' + bookName.replace(/_/g, " ") +' ==\n'; out += ':[[' + bookName.replace(/_/g, " ") + ']]\n'; for (var i = 1; i < list.length; i++) { if (list[i] != null && list[i].match(/^http:/)) { articleName = getArticleId(list[i], bookName); out += ":[[" + bookName + "/" + articleName + "|" + articleName.replace(/_/g, " ") + "]]\n"; } else { //kick out empty headlines and those without links if ((i < list.length-1 && list[i+1].match(/^http:/)) && list[i] != " ") { out += ";" + list[i] + "\n"; } } } out += "\n[[Category:Collections]]"; //print the collectionmarkup into a textarea var collectionName = prompt("Name your collection:", ""); if (collectionName) { var w = window.open(wgServer + "/w/index.php?title=User:" + wgUserName + "/Collections/" + collectionName + "&action=edit"); if (w.attachEvent) { w.attachEvent("onload", function() {refreshTextArea(w, out)}); } else if (window.addEventListener) { w.addEventListener("load", function() {refreshTextArea(w, out)}, false); } else { w.document.addEventListener("load", function() {refreshTextArea(w, out)}, false); } } } function refreshTextArea(w, out) { var txt = w.document.getElementById('wpTextbox1'); txt.value = out; } function getArticleId(link, bookName) { var linkList = link.split("/"); var isId = 0; var output = ""; for (var i = 0; i < linkList.length; i++) { if (isId == 0 && linkList[i] == bookName) { isId++; } else { if (isId == 1) { output += linkList[i]; isId++; } else { if (isId > 1) { output += "/" + linkList[i]; } } } } return output; } //look for headlines and links function parseContent () { var bookLinks = initBooklinks(); var contDiv = document.getElementById('bodyContent'); var bodyElements = contDiv.getElementsByTagName("*"); var element; for (var i = 0; i < bodyElements.length; i++) { element = bodyElements[i]; if (element.nodeName.match(/^H\d/)) { bookLinks[bookLinks.length] = getHeadingText(element); } else { if (element.nodeName == "A") { if (isBookInternalLink(element)) { bookLinks[bookLinks.length] = element.href; } } } } return bookLinks; } //extracts the text from a headline function getHeadingText(heading) { if (heading.id == "siteSub") { return " "; } else { var elements = heading.childNodes; for (var i = 0; i < elements.length; i++) { if (elements[i].nodeName == "SPAN" && elements[i].getAttribute("class") == "mw-headline") { return elements[i].innerHTML; } } } return "chapter"; } function initBooklinks() { var bookName = wgPageName.split("/"); if (bookName.length > 1) { return [bookName[0], "http://" + wgPageName]; } else { return [wgPageName]; } } //checks links for targets inside the wikibook function isBookInternalLink(link) { var articleBaseURL = wgServer + wgArticlePath; var bookName = wgPageName; var articleURL = articleBaseURL.substring(0, articleBaseURL.length-2) + bookName.split("/")[0]; if (link.href.substring(0,articleURL.length) != articleURL || link.href.match(/#/) || link.href.match(/Print_version/i)) { return false; } else { return true; } } //added link has been clicked function getCollection() { var bookLinks = parseContent(); putOutList(bookLinks); } //add an link at thr right upper corner function addPediapressLinks() { if (wgNamespaceNumber == 0 || wgNamespaceNumber == 102 || wgNamespaceNumber == 110) { addPortletLink ('p-personal', 'javascript:getCollection()', 'get collection'); } } addOnloadHook(addPediapressLinks); fm58p8d7n1i0v3ggb0btkcau0y212sx 14886 14885 2010-12-17T14:22:39Z Darklama 2894 started to make this work better with more skins and browsers 14886 javascript text/javascript // Adapted from User:Pediapress/collection-parser.js function putOutList(list) { var pagename, bookname = list[0]; var out = '== ' + bookname.replace(/_/g, " ") +' ==\n:[[' + bookname.replace(/_/g, " ") + ']]\n'; for (var i = 1; i < list.length; i++) { if ( list[i] != null && list[i].match(/^http:/) ) { pagename = getArticleId(list[i], bookname); out += ":[[" + bookname + "/" + pagename + "|" + pagename.replace(/_/g, " ") + "]]\n"; } else { // kick out empty headlines and those without links if ( (i < list.length-1 && list[i+1].match(/^http:/)) && list[i] != " " ) { out += ";" + list[i] + "\n"; } } } out += "\n[[Category:Collections]]"; // print the collectionmarkup into a textarea var collectionName = prompt("Name your collection:", ""); if (collectionName) { var w = window.open(wgServer + "/w/index.php?title=User:" + wgUserName + "/Collections/" + collectionName + "&action=edit"); $j(w).load( function() { refreshTextArea(w, out); } ); } } function refreshTextArea(w, out) { var txt = w.document.getElementById('wpTextbox1'); txt.value = out; } function getArticleId(link, bookname) { var linkList = link.split("/"); var isId = 0; var output = ""; for (var i = 0; i < linkList.length; i++) { if (isId == 0 && linkList[i] == bookname) { isId++; } else if (isId == 1) { output += linkList[i]; isId++; } else if (isId > 1) { output += "/" + linkList[i]; } } return output; } // look for headlines and links function parseContent () { var bookLinks = initBooklinks(); var contDiv = document.getElementById('bodyContent') || document.getElementById('article') || document.getElementById('content'); var bodyElements = contDiv.getElementsByTagName("*"); var element; for (var i = 0; i < bodyElements.length; i++) { element = bodyElements[i]; if (element.nodeName.match(/^H\d/)) { bookLinks[bookLinks.length] = getHeadingText(element); } else if (element.nodeName == "A" && isBookInternalLink(element)) { bookLinks[bookLinks.length] = element.href; } } return bookLinks; } //extracts the text from a headline function getHeadingText(heading) { if (heading.id == "siteSub") { return " "; } else { var elements = heading.childNodes; for (var i = 0; i < elements.length; i++) { if (elements[i].nodeName == "SPAN" && elements[i].getAttribute("class") == "mw-headline") { return elements[i].innerHTML; } } } return "chapter"; } function initBooklinks() { var bookName = wgPageName.split("/"); if (bookName.length > 1) { return [bookName[0], "http://" + wgPageName]; } else { return [wgPageName]; } } //checks links for targets inside the wikibook function isBookInternalLink(link) { var articleBaseURL = wgServer + wgArticlePath; var bookName = wgPageName; var articleURL = articleBaseURL.substring(0, articleBaseURL.length-2) + bookName.split("/", 1)[0]; if (link.href.substring(0,articleURL.length) != articleURL || link.href.match(/#/) || link.href.match(/Print_version/i)) { return false; } else { return true; } } // added link has been clicked function getCollection() { var bookLinks = parseContent(); putOutList(bookLinks); } // add an link at thr right upper corner function addPediapressLinks() { if (wgNamespaceNumber == 0 || wgNamespaceNumber == 102 || wgNamespaceNumber == 110) { addPortletLink ('p-personal', 'javascript:getCollection()', 'get collection'); } } addOnloadHook(addPediapressLinks); sgbjpg5b4nfw3cz6avlyr7w0vxwvrv0 14887 14886 2014-06-11T22:51:31Z Darklama 2894 hopefully fixed while updating to replace deprecated things 14887 javascript text/javascript // Adapted from User:Pediapress/collection-parser.js function putOutList(list) { var bookURL = mw.config.get('wgServer') + mw.util.getUrl( mw.config.get( 'wgBookName' ) ); var pathRE; var pagename, bookname = list[0].replace(/_/g, " "); var out = '== ' + bookname +' ==\n:[[' + bookname + ']]\n'; bookURL = $.escapeRE(bookURL); pathRE = new RegExp( '^https?:' + bookURL + '\\/' ); list.shift(); $.each( list, function(i) { if ( this.match(pathRE) ) { pagename = this.replace(pathRE, '').replace(/_/g, " "); out += ":[[" + bookname + "/" + pagename + "|" + pagename + "]]\n"; } else if ( list[i+1].match(pathRE) && $.trim(this) !== "" ) { // kick out empty headlines and those without links out += ";" + this + "\n"; } }); out += "\n[[Category:Collections]]"; // print the collectionmarkup into a textarea var collectionName = prompt("Name your collection:", ""); if (collectionName) { var w = window.open(wgServer + "/w/index.php?title=User:" + wgUserName + "/Collections/" + collectionName + "&action=edit"); $(w).load( function() { refreshTextArea(w, out); } ); } } function refreshTextArea(w, out) { var txt = w.document.getElementById('wpTextbox1'); txt.value = out; } // look for headlines and links function parseContent ($content) { var bookURL = mw.config.get('wgServer') + mw.util.getUrl( mw.config.get( 'wgBookName' ) ); var bookLinks = [mw.config.get( 'wgBookName' )]; var pathRE; bookURL = $.escapeRE(bookURL); pathRE = new RegExp( '^https?:' + bookURL + '$|^https?:' + bookURL + '\\/' ); $.each( $content.find(".mw-headline, a"), function() { var $this = $(this), val; if ( $this.is('.mw-headline') ) { bookLinks[bookLinks.length] = $this.html() || 'chapter'; } else if ( $this.is('a') && this.href.match(pathRE) ) { bookLinks[bookLinks.length] = this.href; } }); return bookLinks; } // added link has been clicked function getCollection($content) { putOutList(parseContent($content)); } // add an link at thr right upper corner function addPediapressLinks($content) { if ( $.inArray( mw.config.get('wgNamespaceNumber'), [ 0, 102, 110 ] ) ) { $(mw.util.addPortletLink ('p-personal', '#', 'get collection')).click(function() { getCollection($content); }); } } mw.hook('wikipage.content').add(addPediapressLinks); lc1rtd5fwtqe9zx999l9op73ejwqm1h 14888 14887 2014-06-11T22:58:20Z Darklama 2894 fix 14888 javascript text/javascript // Adapted from User:Pediapress/collection-parser.js function putOutList(list) { var bookURL = mw.config.get('wgServer') + mw.util.getUrl( mw.config.get( 'wgBookName' ) ); var pathRE; var pagename, bookname = list[0].replace(/_/g, " "); var out = '== ' + bookname +' ==\n:[[' + bookname + ']]\n'; bookURL = $.escapeRE(bookURL); pathRE = new RegExp( '^https?:' + bookURL + '\\/' ); list.shift(); $.each( list, function(i) { if ( this.match(pathRE) ) { pagename = this.replace(pathRE, '').replace(/_/g, " "); out += ":[[" + bookname + "/" + pagename + "|" + pagename + "]]\n"; } else if ( list[i+1].match(pathRE) && $.trim(this) !== "" ) { // kick out empty headlines and those without links out += ";" + this + "\n"; } }); out += "\n[[Category:Collections]]"; // print the collectionmarkup into a textarea var collectionName = prompt("Name your collection:", ""); if (collectionName) { var w = window.open(wgServer + "/w/index.php?title=User:" + wgUserName + "/Collections/" + collectionName + "&action=edit"); $(w).load( function() { refreshTextArea(w, out); } ); } } function refreshTextArea(w, out) { var txt = w.document.getElementById('wpTextbox1'); txt.value = out; } // look for headlines and links function parseContent ($content) { var bookURL = mw.config.get('wgServer') + mw.util.getUrl( mw.config.get( 'wgBookName' ) ); var bookLinks = [mw.config.get( 'wgBookName' )]; var pathRE; bookURL = $.escapeRE(bookURL); pathRE = new RegExp( '^https?:' + bookURL + '$|^https?:' + bookURL + '\\/' ); $.each( $content.find(".mw-headline, a"), function() { var $this = $(this), val; if ( $this.is('.mw-headline') ) { bookLinks[bookLinks.length] = $this.html() || 'chapter'; } else if ( $this.is('a') && this.href.match(pathRE) ) { bookLinks[bookLinks.length] = this.href; } }); return bookLinks; } // added link has been clicked function getCollection($content) { putOutList(parseContent($content)); } // add an link at thr right upper corner function addPediapressLinks($content) { if ( $.inArray( mw.config.get('wgNamespaceNumber'), [ 0, 102, 110 ] ) !== -1 ) { $(mw.util.addPortletLink ('p-personal', '#', 'get collection')).click(function() { getCollection($content); }); } } mw.hook('wikipage.content').add(addPediapressLinks); o0v3sr5o925u2cgo2czop11rhrohtjt 14889 14888 2014-06-11T23:00:29Z Darklama 2894 fix 14889 javascript text/javascript // Adapted from User:Pediapress/collection-parser.js function putOutList(list) { var bookURL = mw.config.get('wgServer') + mw.util.getUrl( mw.config.get( 'wgBookName' ) ); var pathRE; var pagename, bookname = list[0].replace(/_/g, " "); var out = '== ' + bookname +' ==\n:[[' + bookname + ']]\n'; bookURL = $.escapeRE(bookURL); pathRE = new RegExp( '^https?:' + bookURL + '\\/' ); list.shift(); $.each( list, function(i) { if ( this.match(pathRE) ) { pagename = this.replace(pathRE, '').replace(/_/g, " "); out += ":[[" + bookname + "/" + pagename + "|" + pagename + "]]\n"; } else if ( list[i+1] && list[i+1].match(pathRE) && $.trim(this) !== "" ) { // kick out empty headlines and those without links out += ";" + this + "\n"; } }); out += "\n[[Category:Collections]]"; // print the collectionmarkup into a textarea var collectionName = prompt("Name your collection:", ""); if (collectionName) { var w = window.open(wgServer + "/w/index.php?title=User:" + wgUserName + "/Collections/" + collectionName + "&action=edit"); $(w).load( function() { refreshTextArea(w, out); } ); } } function refreshTextArea(w, out) { var txt = w.document.getElementById('wpTextbox1'); txt.value = out; } // look for headlines and links function parseContent ($content) { var bookURL = mw.config.get('wgServer') + mw.util.getUrl( mw.config.get( 'wgBookName' ) ); var bookLinks = [mw.config.get( 'wgBookName' )]; var pathRE; bookURL = $.escapeRE(bookURL); pathRE = new RegExp( '^https?:' + bookURL + '$|^https?:' + bookURL + '\\/' ); $.each( $content.find(".mw-headline, a"), function() { var $this = $(this), val; if ( $this.is('.mw-headline') ) { bookLinks[bookLinks.length] = $this.html() || 'chapter'; } else if ( $this.is('a') && this.href.match(pathRE) ) { bookLinks[bookLinks.length] = this.href; } }); return bookLinks; } // added link has been clicked function getCollection($content) { putOutList(parseContent($content)); } // add an link at thr right upper corner function addPediapressLinks($content) { if ( $.inArray( mw.config.get('wgNamespaceNumber'), [ 0, 102, 110 ] ) !== -1 ) { $(mw.util.addPortletLink ('p-personal', '#', 'get collection')).click(function() { getCollection($content); }); } } mw.hook('wikipage.content').add(addPediapressLinks); 3a4vi0bcsh5wtrxuk2tjv7vyg3nsrfk 14890 14889 2014-06-11T23:11:53Z Darklama 2894 exclude anchor links 14890 javascript text/javascript // Adapted from User:Pediapress/collection-parser.js function putOutList(list) { var bookURL = mw.config.get('wgServer') + mw.util.getUrl( mw.config.get( 'wgBookName' ) ); var pathRE; var pagename, bookname = list[0].replace(/_/g, " "); var out = '== ' + bookname +' ==\n:[[' + bookname + ']]\n'; bookURL = $.escapeRE(bookURL); pathRE = new RegExp( '^https?:' + bookURL + '\\/' ); list.shift(); $.each( list, function(i) { if ( this.match(pathRE) ) { pagename = this.replace(pathRE, '').replace(/_/g, " "); out += ":[[" + bookname + "/" + pagename + "|" + pagename + "]]\n"; } else if ( list[i+1] && list[i+1].match(pathRE) && $.trim(this) !== "" ) { // kick out empty headlines and those without links out += ";" + this + "\n"; } }); out += "\n[[Category:Collections]]"; // print the collectionmarkup into a textarea var collectionName = prompt("Name your collection:", ""); if (collectionName) { var w = window.open(wgServer + "/w/index.php?title=User:" + wgUserName + "/Collections/" + collectionName + "&action=edit"); $(w).load( function() { refreshTextArea(w, out); } ); } } function refreshTextArea(w, out) { var txt = w.document.getElementById('wpTextbox1'); txt.value = out; } // look for headlines and links function parseContent ($content) { var bookURL = mw.config.get('wgServer') + mw.util.getUrl( mw.config.get( 'wgBookName' ) ); var bookLinks = [mw.config.get( 'wgBookName' )]; var pathRE; bookURL = $.escapeRE(bookURL); pathRE = new RegExp( '^https?:' + bookURL + '$|^https?:' + bookURL + '\\/' ); $.each( $content.find(".mw-headline, a"), function() { var $this = $(this), val; if ( $this.is('.mw-headline') ) { bookLinks[bookLinks.length] = $this.html() || 'chapter'; } else if ( $this.is('a') && this.href.match(pathRE) && !this.href.match(/#/) ) { bookLinks[bookLinks.length] = this.href; } }); return bookLinks; } // added link has been clicked function getCollection($content) { putOutList(parseContent($content)); } // add an link at thr right upper corner function addPediapressLinks($content) { if ( $.inArray( mw.config.get('wgNamespaceNumber'), [ 0, 102, 110 ] ) !== -1 ) { $(mw.util.addPortletLink ('p-personal', '#', 'get collection')).click(function() { getCollection($content); }); } } mw.hook('wikipage.content').add(addPediapressLinks); 8zjps1vj5a6y60q8tjs64pmq1z728zn 14891 14890 2014-06-11T23:24:15Z Darklama 2894 +save book template to output 14891 javascript text/javascript // Adapted from User:Pediapress/collection-parser.js function putOutList(list) { var bookURL = mw.config.get('wgServer') + mw.util.getUrl( mw.config.get( 'wgBookName' ) ); var pathRE; var pagename, bookname = list[0].replace(/_/g, " "); var out = '{{saved book}}\n' + '== ' + bookname +' ==\n:[[' + bookname + ']]\n'; bookURL = $.escapeRE(bookURL); pathRE = new RegExp( '^https?:' + bookURL + '\\/' ); list.shift(); $.each( list, function(i) { if ( this.match(pathRE) ) { pagename = this.replace(pathRE, '').replace(/_/g, " "); out += ":[[" + bookname + "/" + pagename + "|" + pagename + "]]\n"; } else if ( list[i+1] && list[i+1].match(pathRE) && $.trim(this) !== "" ) { // kick out empty headlines and those without links out += ";" + this + "\n"; } }); out += "\n[[Category:Collections]]"; // print the collectionmarkup into a textarea var collectionName = prompt("Name your collection:", ""); if (collectionName) { var w = window.open(wgServer + "/w/index.php?title=User:" + wgUserName + "/Collections/" + collectionName + "&action=edit"); $(w).load( function() { refreshTextArea(w, out); } ); } } function refreshTextArea(w, out) { var txt = w.document.getElementById('wpTextbox1'); txt.value = out; } // look for headlines and links function parseContent ($content) { var bookURL = mw.config.get('wgServer') + mw.util.getUrl( mw.config.get( 'wgBookName' ) ); var bookLinks = [mw.config.get( 'wgBookName' )]; var pathRE; bookURL = $.escapeRE(bookURL); pathRE = new RegExp( '^https?:' + bookURL + '$|^https?:' + bookURL + '\\/' ); $.each( $content.find(".mw-headline, a"), function() { var $this = $(this), val; if ( $this.is('.mw-headline') ) { bookLinks[bookLinks.length] = $this.html() || 'chapter'; } else if ( $this.is('a') && this.href.match(pathRE) && !this.href.match(/#/) ) { bookLinks[bookLinks.length] = this.href; } }); return bookLinks; } // added link has been clicked function getCollection($content) { putOutList(parseContent($content)); } // add an link at thr right upper corner function addPediapressLinks($content) { if ( $.inArray( mw.config.get('wgNamespaceNumber'), [ 0, 102, 110 ] ) !== -1 ) { $(mw.util.addPortletLink ('p-personal', '#', 'get collection')).click(function() { getCollection($content); }); } } mw.hook('wikipage.content').add(addPediapressLinks); 1ezbi2nazacm23kfzr02q98u455q36v 14892 14891 2016-08-14T13:43:20Z JackPotte 1965 /* top */JavaScript semi-auto reparation, because of the 2015 migrations using [[Project:AWB|AWB]] 14892 javascript text/javascript // Adapted from User:Pediapress/collection-parser.js function putOutList(list) { var bookURL = mw.config.get('wgServer') + mw.util.getUrl( mw.config.get( 'wgBookName' ) ); var pathRE; var pagename, bookname = list[0].replace(/_/g, " "); var out = '{{saved book}}\n' + '== ' + bookname +' ==\n:[[' + bookname + ']]\n'; bookURL = $.escapeRE(bookURL); pathRE = new RegExp( '^https?:' + bookURL + '\\/' ); list.shift(); $.each( list, function(i) { if ( this.match(pathRE) ) { pagename = this.replace(pathRE, '').replace(/_/g, " "); out += ":[[" + bookname + "/" + pagename + "|" + pagename + "]]\n"; } else if ( list[i+1] && list[i+1].match(pathRE) && $.trim(this) !== "" ) { // kick out empty headlines and those without links out += ";" + this + "\n"; } }); out += "\n[[Category:Collections]]"; // print the collectionmarkup into a textarea var collectionName = prompt("Name your collection:", ""); if (collectionName) { var w = window.open(mw.config.get('wgServer') + "/w/index.php?title=User:" + wgUserName + "/Collections/" + collectionName + "&action=edit"); $(w).load( function() { refreshTextArea(w, out); } ); } } function refreshTextArea(w, out) { var txt = w.document.getElementById('wpTextbox1'); txt.value = out; } // look for headlines and links function parseContent ($content) { var bookURL = mw.config.get('wgServer') + mw.util.getUrl( mw.config.get( 'wgBookName' ) ); var bookLinks = [mw.config.get( 'wgBookName' )]; var pathRE; bookURL = $.escapeRE(bookURL); pathRE = new RegExp( '^https?:' + bookURL + '$|^https?:' + bookURL + '\\/' ); $.each( $content.find(".mw-headline, a"), function() { var $this = $(this), val; if ( $this.is('.mw-headline') ) { bookLinks[bookLinks.length] = $this.html() || 'chapter'; } else if ( $this.is('a') && this.href.match(pathRE) && !this.href.match(/#/) ) { bookLinks[bookLinks.length] = this.href; } }); return bookLinks; } // added link has been clicked function getCollection($content) { putOutList(parseContent($content)); } // add an link at thr right upper corner function addPediapressLinks($content) { if ( $.inArray( mw.config.get('wgNamespaceNumber'), [ 0, 102, 110 ] ) !== -1 ) { $(mw.util.addPortletLink ('p-personal', '#', 'get collection')).click(function() { getCollection($content); }); } } mw.hook('wikipage.content').add(addPediapressLinks); lthgman86v9rzxgaw9s467buibwidci 14893 14892 2017-08-11T12:27:11Z Krenair 1158 Maintenance: [[mw:RL/MGU]] / [[mw:RL/JD]] - Replaced .load event handler (removed in jQuery 3.0) [[phab:T169385]] 14893 javascript text/javascript // Adapted from User:Pediapress/collection-parser.js function putOutList(list) { var bookURL = mw.config.get('wgServer') + mw.util.getUrl( mw.config.get( 'wgBookName' ) ); var pathRE; var pagename, bookname = list[0].replace(/_/g, " "); var out = '{{saved book}}\n' + '== ' + bookname +' ==\n:[[' + bookname + ']]\n'; bookURL = $.escapeRE(bookURL); pathRE = new RegExp( '^https?:' + bookURL + '\\/' ); list.shift(); $.each( list, function(i) { if ( this.match(pathRE) ) { pagename = this.replace(pathRE, '').replace(/_/g, " "); out += ":[[" + bookname + "/" + pagename + "|" + pagename + "]]\n"; } else if ( list[i+1] && list[i+1].match(pathRE) && $.trim(this) !== "" ) { // kick out empty headlines and those without links out += ";" + this + "\n"; } }); out += "\n[[Category:Collections]]"; // print the collectionmarkup into a textarea var collectionName = prompt("Name your collection:", ""); if (collectionName) { var w = window.open(mw.config.get('wgServer') + "/w/index.php?title=User:" + wgUserName + "/Collections/" + collectionName + "&action=edit"); $(w).on( 'load', function() { refreshTextArea(w, out); } ); } } function refreshTextArea(w, out) { var txt = w.document.getElementById('wpTextbox1'); txt.value = out; } // look for headlines and links function parseContent ($content) { var bookURL = mw.config.get('wgServer') + mw.util.getUrl( mw.config.get( 'wgBookName' ) ); var bookLinks = [mw.config.get( 'wgBookName' )]; var pathRE; bookURL = $.escapeRE(bookURL); pathRE = new RegExp( '^https?:' + bookURL + '$|^https?:' + bookURL + '\\/' ); $.each( $content.find(".mw-headline, a"), function() { var $this = $(this), val; if ( $this.is('.mw-headline') ) { bookLinks[bookLinks.length] = $this.html() || 'chapter'; } else if ( $this.is('a') && this.href.match(pathRE) && !this.href.match(/#/) ) { bookLinks[bookLinks.length] = this.href; } }); return bookLinks; } // added link has been clicked function getCollection($content) { putOutList(parseContent($content)); } // add an link at thr right upper corner function addPediapressLinks($content) { if ( $.inArray( mw.config.get('wgNamespaceNumber'), [ 0, 102, 110 ] ) !== -1 ) { $(mw.util.addPortletLink ('p-personal', '#', 'get collection')).click(function() { getCollection($content); }); } } mw.hook('wikipage.content').add(addPediapressLinks); al1zyynhhqcddilx478yn3fop36tbzm 14894 14893 2021-02-07T02:16:28Z Ladsgroup 1615 Maintenance: Replacing legacy global variable ([[phab:T72470]]) 14894 javascript text/javascript // Adapted from User:Pediapress/collection-parser.js function putOutList(list) { var bookURL = mw.config.get('wgServer') + mw.util.getUrl( mw.config.get( 'wgBookName' ) ); var pathRE; var pagename, bookname = list[0].replace(/_/g, " "); var out = '{{saved book}}\n' + '== ' + bookname +' ==\n:[[' + bookname + ']]\n'; bookURL = $.escapeRE(bookURL); pathRE = new RegExp( '^https?:' + bookURL + '\\/' ); list.shift(); $.each( list, function(i) { if ( this.match(pathRE) ) { pagename = this.replace(pathRE, '').replace(/_/g, " "); out += ":[[" + bookname + "/" + pagename + "|" + pagename + "]]\n"; } else if ( list[i+1] && list[i+1].match(pathRE) && $.trim(this) !== "" ) { // kick out empty headlines and those without links out += ";" + this + "\n"; } }); out += "\n[[Category:Collections]]"; // print the collectionmarkup into a textarea var collectionName = prompt("Name your collection:", ""); if (collectionName) { var w = window.open(mw.config.get('wgServer') + "/w/index.php?title=User:" + mw.config.get('wgUserName') + "/Collections/" + collectionName + "&action=edit"); $(w).on( 'load', function() { refreshTextArea(w, out); } ); } } function refreshTextArea(w, out) { var txt = w.document.getElementById('wpTextbox1'); txt.value = out; } // look for headlines and links function parseContent ($content) { var bookURL = mw.config.get('wgServer') + mw.util.getUrl( mw.config.get( 'wgBookName' ) ); var bookLinks = [mw.config.get( 'wgBookName' )]; var pathRE; bookURL = $.escapeRE(bookURL); pathRE = new RegExp( '^https?:' + bookURL + '$|^https?:' + bookURL + '\\/' ); $.each( $content.find(".mw-headline, a"), function() { var $this = $(this), val; if ( $this.is('.mw-headline') ) { bookLinks[bookLinks.length] = $this.html() || 'chapter'; } else if ( $this.is('a') && this.href.match(pathRE) && !this.href.match(/#/) ) { bookLinks[bookLinks.length] = this.href; } }); return bookLinks; } // added link has been clicked function getCollection($content) { putOutList(parseContent($content)); } // add an link at thr right upper corner function addPediapressLinks($content) { if ( $.inArray( mw.config.get('wgNamespaceNumber'), [ 0, 102, 110 ] ) !== -1 ) { $(mw.util.addPortletLink ('p-personal', '#', 'get collection')).click(function() { getCollection($content); }); } } mw.hook('wikipage.content').add(addPediapressLinks); bgbzbi5fjoyewd47p88us5gz80c7pf3 14895 14894 2024-12-17T16:12:07Z Leaderboard 2891 https://en.wikibooks.org/wiki/Wikibooks:Reading_room/Technical_Assistance#CollectionParser_gadget_doesn't_work 14895 javascript text/javascript // Adapted from User:Pediapress/collection-parser.js var bookURL = $.escapeSelector(mw.config.get('wgServer') + mw.util.getUrl( mw.config.get( 'wgBookName' ))); var pathRE; function putOutList(list) { var pagename, bookname = list[0].replace(/_/g, " "); var out = '{{saved book}}\n' + '== ' + bookname +' ==\n:[[' + bookname + ']]\n'; pathRE = new RegExp( '^https?:' + bookURL + '\\/' ); list.shift(); $.each( list, function(i) { if ( this.match(pathRE) ) { pagename = this.replace(pathRE, '').replace(/_/g, " "); out += ":[[" + bookname + "/" + pagename + "|" + pagename + "]]\n"; } else if ( list[i+1] && list[i+1].match(pathRE) && $.trim(this) !== "" ) { // kick out empty headlines and those without links out += ";" + this + "\n"; } }); out += "\n[[Category:Collections]]"; // print the collectionmarkup into a textarea var collectionName = prompt("Name your collection:", ""); if (collectionName) { var w = window.open(mw.config.get('wgServer') + "/w/index.php?title=User:" + mw.config.get('wgUserName') + "/Collections/" + collectionName + "&action=edit"); $(w).on( 'load', function() { refreshTextArea(w, out); } ); } } function refreshTextArea(w, out) { var txt = w.document.getElementById('wpTextbox1'); txt.value = out; } // look for headlines and links function parseContent ($content) { var bookLinks = [mw.config.get( 'wgBookName' )]; var pathRE; pathRE = new RegExp( '^https?:' + bookURL + '$|^https?:' + bookURL + '\\/' ); $.each( $content.find(".mw-headline, a"), function() { var $this = $(this), val; if ( $this.is('.mw-headline') ) { bookLinks[bookLinks.length] = $this.html() || 'chapter'; } else if ( $this.is('a') && this.href.match(pathRE) && !this.href.match(/#/) ) { bookLinks[bookLinks.length] = this.href; } }); return bookLinks; } // added link has been clicked function getCollection($content) { putOutList(parseContent($content)); } // add a link at the right upper corner function addPediapressLinks($content) { if ( mw.config.get('wgNamespaceNumber') == 0 || mw.config.get('wgNamespaceNumber') == 102 || mw.config.get('wgNamespaceNumber') == 110 ) { $(mw.util.addPortletLink ('p-personal', '#', 'Get collection')).click(function() { getCollection($content); }); } } mw.hook('wikipage.content').add(addPediapressLinks); rbq43mbeu5tzqji5ptjxe8f9im273d8 14896 14895 2024-12-21T03:16:08Z Leaderboard 2891 https://en.wikibooks.org/wiki/Wikibooks:Reading_room/Technical_Assistance#CollectionParser_gadget_doesn't_work 14896 javascript text/javascript // Adapted from User:Pediapress/collection-parser.js var bookURL = $.escapeSelector(mw.config.get('wgServer') + mw.util.getUrl( mw.config.get( 'wgBookName' ))); var pathRE; function putOutList(list) { var pagename, bookname = list[0].replace(/_/g, " "); var out = '{{saved book}}\n' + '== ' + bookname +' ==\n:[[' + bookname + ']]\n'; pathRE = new RegExp( '^https?:' + bookURL + '\\/' ); list.shift(); $.each( list, function(i) { if ( this.match(pathRE) ) { pagename = this.replace(pathRE, '').replace(/_/g, " "); out += ":[[" + bookname + "/" + pagename + "|" + pagename + "]]\n"; } else if ( list[i+1] && list[i+1].match(pathRE) && $.trim(this) !== "" ) { // kick out empty headlines and those without links out += ";" + this + "\n"; } }); out += "\n[[Category:Collections]]"; // print the collectionmarkup into a textarea var collectionName = prompt("Name your collection:", ""); if (collectionName) { var w = window.open(mw.config.get('wgServer') + "/w/index.php?title=User:" + mw.config.get('wgUserName') + "/Collections/" + collectionName + "&action=edit"); $(w).on( 'load', function() { refreshTextArea(w, out); } ); } } function refreshTextArea(w, out) { var txt = w.document.getElementById('wpTextbox1'); txt.value = out; } // look for headlines and links function parseContent ($content) { var bookLinks = [mw.config.get( 'wgBookName' )]; var pathRE; pathRE = new RegExp( '^https?:' + bookURL + '$|^https?:' + bookURL + '\\/' ); $.each( $content.find(".mw-headline, a"), function() { var $this = $(this), val; if ( $this.is('.mw-headline') ) { bookLinks[bookLinks.length] = $this.html() || 'chapter'; } else if ( $this.is('a') && this.href.match(pathRE) && !this.href.match(/#/) ) { bookLinks[bookLinks.length] = this.href; } }); return bookLinks; } // added link has been clicked function getCollection($content) { putOutList(parseContent($content)); } // add a link at the right upper corner function addPediapressLinks($content) { if ( mw.config.get('wgArticleId') && (mw.config.get('wgNamespaceNumber') == 0 || mw.config.get('wgNamespaceNumber') == 102 || mw.config.get('wgNamespaceNumber') == 110) ) { $(mw.util.addPortletLink ('p-personal', '#', 'Get collection')).click(function() { getCollection($content); }); } } $(function() { addPediapressLinks() }); mw.hook('wikipage.content').add(addPediapressLinks); aq7hp08t94hhy3wkt8wsp8goer4yxt5 14897 14896 2024-12-21T03:28:09Z Leaderboard 2891 14897 javascript text/javascript // Adapted from User:Pediapress/collection-parser.js var bookURL = $.escapeSelector(mw.config.get('wgServer') + mw.util.getUrl( mw.config.get( 'wgBookName' ))); var pathRE; function putOutList(list) { var pagename, bookname = list[0].replace(/_/g, " "); var out = '{{saved book}}\n' + '== ' + bookname +' ==\n:[[' + bookname + ']]\n'; pathRE = new RegExp( '^https?:' + bookURL + '\\/' ); list.shift(); $.each( list, function(i) { if ( this.match(pathRE) ) { pagename = this.replace(pathRE, '').replace(/_/g, " "); out += ":[[" + bookname + "/" + pagename + "|" + pagename + "]]\n"; } else if ( list[i+1] && list[i+1].match(pathRE) && $.trim(this) !== "" ) { // kick out empty headlines and those without links out += ";" + this + "\n"; } }); out += "\n[[Category:Collections]]"; // print the collectionmarkup into a textarea var collectionName = prompt("Name your collection:", ""); if (collectionName) { var w = window.open(mw.config.get('wgServer') + "/w/index.php?title=User:" + mw.config.get('wgUserName') + "/Collections/" + collectionName + "&action=edit"); $(w).on( 'load', function() { refreshTextArea(w, out); } ); } } function refreshTextArea(w, out) { var txt = w.document.getElementById('wpTextbox1'); txt.value = out; } // look for headlines and links function parseContent ($content) { var bookLinks = [mw.config.get( 'wgBookName' )]; var pathRE; pathRE = new RegExp( '^https?:' + bookURL + '$|^https?:' + bookURL + '\\/' ); $.each( $content.find(".mw-headline, a"), function() { var $this = $(this), val; if ( $this.is('.mw-headline') ) { bookLinks[bookLinks.length] = $this.html() || 'chapter'; } else if ( $this.is('a') && this.href.match(pathRE) && !this.href.match(/#/) ) { bookLinks[bookLinks.length] = this.href; } }); return bookLinks; } // added link has been clicked function getCollection($content) { putOutList(parseContent($content)); } // add a link at the right upper corner function addPediapressLinks($content) { if ( mw.config.get('wgArticleId') && (mw.config.get('wgNamespaceNumber') == 0 || mw.config.get('wgNamespaceNumber') == 102 || mw.config.get('wgNamespaceNumber') == 110) ) { $(mw.util.addPortletLink ('p-personal', '#', 'Get collection')).click(function() { getCollection($content); }); } } $(function() { addPediapressLinks() }); 66ik2wzomrqgb1x4r5yd73m9gotu6rz 14898 14897 2024-12-21T05:13:11Z Leaderboard 2891 14898 javascript text/javascript // Adapted from User:Pediapress/collection-parser.js var bookURL = $.escapeSelector(mw.config.get('wgServer') + mw.util.getUrl( mw.config.get( 'wgBookName' ))); var pathRE; function putOutList(list) { var pagename, bookname = list[0].replace(/_/g, " "); var out = '{{saved book}}\n' + '== ' + bookname +' ==\n:[[' + bookname + ']]\n'; pathRE = new RegExp( '^https?:' + bookURL + '\\/' ); list.shift(); $.each( list, function(i) { if ( this.match(pathRE) ) { pagename = this.replace(pathRE, '').replace(/_/g, " "); out += ":[[" + bookname + "/" + pagename + "|" + pagename + "]]\n"; } else if ( list[i+1] && list[i+1].match(pathRE) && $.trim(this) !== "" ) { // kick out empty headlines and those without links out += ";" + this + "\n"; } }); out += "\n[[Category:Collections]]"; // print the collectionmarkup into a textarea var collectionName = prompt(`Name your collection (default: ${bookname})`, bookname); if (collectionName) { var w = window.open(mw.config.get('wgServer') + "/w/index.php?title=User:" + mw.config.get('wgUserName') + "/Collections/" + collectionName + "&action=edit"); $(w).on( 'load', function() { refreshTextArea(w, out); } ); } else return; } function refreshTextArea(w, out) { var txt = w.document.getElementById('wpTextbox1'); txt.value = out; } // look for headlines and links function parseContent ($content) { var bookLinks = [mw.config.get( 'wgBookName' )]; var pathRE; pathRE = new RegExp( '^https?:' + bookURL + '$|^https?:' + bookURL + '\\/' ); $.each($content.find(".mw-heading :header, a"), function() { var $this = $(this), val; if ( $this.is('.mw-heading') ) { bookLinks[bookLinks.length] = $this.html() || 'chapter'; } else if ( $this.is('a') && this.href.match(pathRE) && !this.href.match(/#/) ) { bookLinks[bookLinks.length] = this.href; } }); return bookLinks; } // added link has been clicked function getCollection($content) { putOutList(parseContent($content)); } var collectionParserPortletLink = mw.util.addPortletLink ('p-personal', '#', 'Get collection', 'pediapress'); // add a link at the right upper corner function addPediapressLinks($content) { if ( mw.config.get('wgArticleId') && (mw.config.get('wgNamespaceNumber') == 0 || mw.config.get('wgNamespaceNumber') == 102 || mw.config.get('wgNamespaceNumber') == 110) ) { $(collectionParserPortletLink).click(function() { getCollection($content); }); } } mw.hook('wikipage.content').add(addPediapressLinks); 7inmaow9m6amoot3cjyacmioe9s9wk2 14899 14898 2024-12-22T01:14:10Z Leaderboard 2891 https://en.wikibooks.org/wiki/Wikibooks:Reading_room/Technical_Assistance#CollectionParser_gadget_doesn't_work 14899 javascript text/javascript // Adapted from User:Pediapress/collection-parser.js var bookURL = $.escapeSelector(mw.config.get('wgServer') + mw.util.getUrl( mw.config.get( 'wgBookName' ))); var pathRE; function putOutList(list) { var pagename, bookname = list[0].replace(/_/g, " "); var out = '{{saved book}}\n' + '== ' + bookname +' ==\n:[[' + bookname + ']]\n'; pathRE = new RegExp( '^https?:' + bookURL + '\\/' ); list.shift(); $.each( list, function(i) { if ( this.match(pathRE) ) { pagename = this.replace(pathRE, '').replace(/_/g, " "); out += ":[[" + bookname + "/" + pagename + "|" + pagename + "]]\n"; } else if ( list[i+1] && list[i+1].match(pathRE) && $.trim(this) !== "" ) { // kick out empty headlines and those without links out += ";" + this + "\n"; } }); out += "\n[[Category:Collections]]"; // print the collectionmarkup into a textarea var collectionName = prompt(`Name your collection (default: ${bookname})`, bookname); if (collectionName) { var w = window.open(mw.config.get('wgServer') + "/w/index.php?title=User:" + mw.config.get('wgUserName') + "/Collections/" + collectionName + "&action=edit"); $(w).on( 'load', function() { refreshTextArea(w, out); } ); } else return; } function refreshTextArea(w, out) { var txt = w.document.getElementById('wpTextbox1'); txt.value = out; } // look for headlines and links function parseContent ($content) { var bookLinks = [mw.config.get( 'wgBookName' )]; var pathRE; pathRE = new RegExp( '^https?:' + bookURL + '$|^https?:' + bookURL + '\\/' ); $.each($content.find(".mw-heading :header, a"), function() { var $this = $(this), val; if ( $this.is('.mw-heading') ) { bookLinks[bookLinks.length] = $this.html() || 'chapter'; } else if ( $this.is('a') && this.href.match(pathRE) && !this.href.match(/#/) ) { bookLinks[bookLinks.length] = this.href; } }); return bookLinks; } // added link has been clicked function getCollection($content) { putOutList(parseContent($content)); } var collectionParserPortletLink = mw.config.get('wgArticleId') > 0 ? mw.util.addPortletLink ('p-personal', '#', 'Get collection', 'pediapress') : null; // add a link at the right upper corner function addPediapressLinks($content) { if ( mw.config.get('wgArticleId') && (mw.config.get('wgNamespaceNumber') == 0 || mw.config.get('wgNamespaceNumber') == 102 || mw.config.get('wgNamespaceNumber') == 110) ) { $(collectionParserPortletLink).click(function() { getCollection($content); }); } } mw.hook('wikipage.content').add(addPediapressLinks); rhdezrhyurl2kkorfflaq40fprlpjg5 14900 14899 2024-12-30T02:59:33Z Leaderboard 2891 https://en.wikibooks.org/wiki/Wikibooks:Reading_room/Technical_Assistance#CollectionParser_edit_request 14900 javascript text/javascript // Adapted from User:Pediapress/collection-parser.js var bookURL = $.escapeSelector(mw.config.get('wgServer') + mw.util.getUrl( mw.config.get( 'wgBookName' ))); var pathRE; function putOutList(list) { var pagename, bookname = list[0].replace(/_/g, " "); var out = '{{saved book}}\n' + '== ' + bookname +' ==\n:[[' + bookname + ']]\n'; pathRE = new RegExp( '^https?:' + bookURL + '\\/' ); list.shift(); $.each( list, function(i) { if ( this.match(pathRE) ) { pagename = this.replace(pathRE, '').replace(/_/g, " "); out += ":[[" + bookname + "/" + pagename + "|" + pagename + "]]\n"; } else if ( list[i+1] && list[i+1].match(pathRE) && $.trim(this) !== "" ) { // kick out empty headlines and those without links out += ";" + this + "\n"; } }); out += "\n[[Category:Collections]]"; // print the collectionmarkup into a textarea var collectionName = prompt(`Name your collection (default: ${bookname})`, bookname); if (collectionName) { var w = window.open(mw.config.get('wgServer') + "/w/index.php?title=User:" + mw.config.get('wgUserName') + "/Collections/" + collectionName + "&action=edit"); $(w).on( 'load', function() { refreshTextArea(w, out); } ); } else return; } function refreshTextArea(w, out) { var txt = w.document.getElementById('wpTextbox1'); txt.value = out; } // look for headlines and links function parseContent ($content) { var bookLinks = [mw.config.get( 'wgBookName' )]; var pathRE; pathRE = new RegExp( '^https?:' + bookURL + '$|^https?:' + bookURL + '\\/' ); $.each($content.find(".mw-heading :header, a"), function() { var $this = $(this), val; if ( $this.is('.mw-heading') ) { bookLinks[bookLinks.length] = $this.html() || 'chapter'; } else if ( $this.is('a') && this.href.match(pathRE) && !this.href.match(/#/) ) { bookLinks[bookLinks.length] = this.href; } }); return bookLinks; } // added link has been clicked function getCollection($content) { putOutList(parseContent($content)); } const showLink = mw.config.get("wgArticleId") > 0 && !mw.config.get("wgIsMainPage") && (mw.config.get('wgNamespaceNumber') == 0 || mw.config.get('wgNamespaceNumber') == 102 || mw.config.get('wgNamespaceNumber') == 110); var collectionParserPortletLink = showLink ? mw.util.addPortletLink('p-personal', '#', 'Get collection', 'pediapress') : null; // add a link at the right upper corner function addPediapressLinks($content) { if (showLink) { $(collectionParserPortletLink).click(function() { getCollection($content); }); } } mw.hook('wikipage.content').add(addPediapressLinks); opq2k8jvql6vufyrqo4hextw73msjk9 14901 14900 2026-08-01T17:28:38Z QueerEcofeminist 1879 [[:en:MediaWiki:Gadget-collectionparser.js]] पासून १६ आवर्तने आयात केलीत 14900 javascript text/javascript // Adapted from User:Pediapress/collection-parser.js var bookURL = $.escapeSelector(mw.config.get('wgServer') + mw.util.getUrl( mw.config.get( 'wgBookName' ))); var pathRE; function putOutList(list) { var pagename, bookname = list[0].replace(/_/g, " "); var out = '{{saved book}}\n' + '== ' + bookname +' ==\n:[[' + bookname + ']]\n'; pathRE = new RegExp( '^https?:' + bookURL + '\\/' ); list.shift(); $.each( list, function(i) { if ( this.match(pathRE) ) { pagename = this.replace(pathRE, '').replace(/_/g, " "); out += ":[[" + bookname + "/" + pagename + "|" + pagename + "]]\n"; } else if ( list[i+1] && list[i+1].match(pathRE) && $.trim(this) !== "" ) { // kick out empty headlines and those without links out += ";" + this + "\n"; } }); out += "\n[[Category:Collections]]"; // print the collectionmarkup into a textarea var collectionName = prompt(`Name your collection (default: ${bookname})`, bookname); if (collectionName) { var w = window.open(mw.config.get('wgServer') + "/w/index.php?title=User:" + mw.config.get('wgUserName') + "/Collections/" + collectionName + "&action=edit"); $(w).on( 'load', function() { refreshTextArea(w, out); } ); } else return; } function refreshTextArea(w, out) { var txt = w.document.getElementById('wpTextbox1'); txt.value = out; } // look for headlines and links function parseContent ($content) { var bookLinks = [mw.config.get( 'wgBookName' )]; var pathRE; pathRE = new RegExp( '^https?:' + bookURL + '$|^https?:' + bookURL + '\\/' ); $.each($content.find(".mw-heading :header, a"), function() { var $this = $(this), val; if ( $this.is('.mw-heading') ) { bookLinks[bookLinks.length] = $this.html() || 'chapter'; } else if ( $this.is('a') && this.href.match(pathRE) && !this.href.match(/#/) ) { bookLinks[bookLinks.length] = this.href; } }); return bookLinks; } // added link has been clicked function getCollection($content) { putOutList(parseContent($content)); } const showLink = mw.config.get("wgArticleId") > 0 && !mw.config.get("wgIsMainPage") && (mw.config.get('wgNamespaceNumber') == 0 || mw.config.get('wgNamespaceNumber') == 102 || mw.config.get('wgNamespaceNumber') == 110); var collectionParserPortletLink = showLink ? mw.util.addPortletLink('p-personal', '#', 'Get collection', 'pediapress') : null; // add a link at the right upper corner function addPediapressLinks($content) { if (showLink) { $(collectionParserPortletLink).click(function() { getCollection($content); }); } } mw.hook('wikipage.content').add(addPediapressLinks); opq2k8jvql6vufyrqo4hextw73msjk9 साचा:Sane 10 4169 14910 2020-04-16T08:41:22Z ShakespeareFan00 2900 Created page with "{{#if:{{{1|@@null@@}}}<!-- -->|{{#ifeq:{{{1|}}}||@@null@@<!-- -->|{{{1}}}}}<!-- Definite output value -->|@@null@@<!-- -->}}<!-- --><noinclude>{{documentation}}</noinclude>" 14910 wikitext text/x-wiki {{#if:{{{1|@@null@@}}}<!-- -->|{{#ifeq:{{{1|}}}||@@null@@<!-- -->|{{{1}}}}}<!-- Definite output value -->|@@null@@<!-- -->}}<!-- --><noinclude>{{documentation}}</noinclude> g5awy2g6u75ma27s09q081acph38sjp 14911 14910 2020-04-16T08:42:38Z ShakespeareFan00 2900 14911 wikitext text/x-wiki {{#switch:{{{1|@@absent@@}}}<!-- -->|=@@empty@@<!-- -->|@@absent@@=@@absent@@<!-- -->|#default={{{1}}}<!-- -->}} --><noinclude>{{documentation}}</noinclude> sth27rffx62k2617ux1ko9dc6fhqfrt 14912 14911 2020-04-16T08:43:08Z ShakespeareFan00 2900 14912 wikitext text/x-wiki {{#switch:{{{1|@@absent@@}}}<!-- -->|=@@empty@@<!-- -->|@@absent@@=@@absent@@<!-- -->|#default={{{1}}}<!-- -->}}<!-- --><noinclude>{{documentation}}</noinclude> kw4eih43uhj6w4yxvcrcl4rkwhzw789 14913 14912 2026-08-01T17:28:39Z QueerEcofeminist 1879 [[:en:Template:Sane]] पासून ३ आवर्तने आयात केलीत 14912 wikitext text/x-wiki {{#switch:{{{1|@@absent@@}}}<!-- -->|=@@empty@@<!-- -->|@@absent@@=@@absent@@<!-- -->|#default={{{1}}}<!-- -->}}<!-- --><noinclude>{{documentation}}</noinclude> kw4eih43uhj6w4yxvcrcl4rkwhzw789 साचा:Saved book 10 4170 14914 2009-02-02T23:51:15Z Didzun 3645 New page: ABRAHAM, Sir Edward Penley (1913- ) ADAMS, John Couch (1819-1892) ADANSON, Michel (1727- 1806) ADDISON, Thomas (1793-1860) ADRIAN, Edgar Douglas, Ist Baron (1889-1977) AGNESI, Maria G... 14914 wikitext text/x-wiki ABRAHAM, Sir Edward Penley (1913- ) ADAMS, John Couch (1819-1892) ADANSON, Michel (1727- 1806) ADDISON, Thomas (1793-1860) ADRIAN, Edgar Douglas, Ist Baron (1889-1977) AGNESI, Maria Gaetana (1718- 1799) AIRY, Sir George Biddell (1801-1892) AKI, Keliti (1930-) ALBERTUS MAGNUS, St, Count of Bollstadt (c.1200-1280) ALCMAEON (fl.520 BC) ALFVEN, Hannes Olof Gosta (1908- ) ALHAZEN (Ibn al Haythem)(c.965- 1040) AL-KHWARIZMI, Abu J'far Muhammad ibn Musa (c.800-850) ALLEN, Sir Geoffrey (1928 - ) ALPHER, Ralph Asher(1921-) ALTER, David (1807 - 1881) ALTMAN, Sidney (1939 -) ALTOUNYAN, Roger Edward Collingwood (1922-1987) ALVAREZ,Luis walter (1911-1988) AMONTONS, Guillaume (1663-1705) AMPERE, Andre Marie (1775-1836) ANAXAGORAS (c.500-428 BC) ANAXIMANDER (c.611-546 BC) ANDERASON, Philip Warren (1923-) ANDERSON, Tempest (1846- 1913) ANDREWS, Thomas (1813-1885) ANFINSEN, Christian Boehmer (1916-) APOLLONIUS OF PERGA (fl. 250 - 220 BC) APPLETON, Sir Edward Victor (1892-1965) ARBER, Werner (1929-) ARCHIMEDES (c.287-212 BC) ARGAND, Aime(1755-1803) ARGAND, Jean-Robert (1768-1822) ARISTARCHOAS OF SAMOS (fl. c.270 BC) ARISTOTLE (384-322 BC) ARMSTRONG, Henry Edward (1848 - 1937) ARNOLD, Joseph (1782 - 1818) ARP, Halton Christian (1927 -) ARRHENIUS, Svante August (1859 - 1927) ARTIN, Emil (1898 - 1962) ASHBURNER, Michael (1942 - ) ASTBURY, William Thomas (1889 - 1961) ASTON, Francis William (1877-1945) ATANASOFF, John Vincent (1903 - ) ATIYAH, Sir Michael Francis (1929-) AUER, Karl, Baron von Welsbach (1858-1929) AUERBACH, Charlotte (1899-) AUGER, Pierre Victor (1899-) AVERROES, Ibn Rushd (1126-1198) AVERY, Oswald Theodore (1877-1955) AVOGADRO, (Lorenzo- Romano) Amedeo(Carlo)(1776-1856) AXELROD, Julius (1912- ) AYRTON, Hertha, originally Phoebe Sarah Marks (1854-1923) AYRTOM, William Edward (1847-1908) BAADE, (Wilhelm Heinrich) Walter (1893-1960) BABBAGE, Charles (1792-1871) BACON, Francis, Baron Verulam of Verulam Viscount St. Albans (1561-1626) BACON, Roger (c. 1214- 1292) BAEKELAND, Leo Hendrik (1863-1944) BAER, Karl Ernst Ritter von (1792-1876) BAILEY, Liberty Hyde (1858-1954) BAILY, Francis (1774-1844) BAIRD, John Logie (1888-1946) BAKER, Herbert Brereton (1862-1935) BALFOUR, Francis Maitland (1851-1882) BALL, John (1818-1889) BALL, Sir Robert Staywell (1840-1913) BALTIMORE, David (1938- ) BANACH, Stefan (1892-1945) BANKS, Sir Joseph (1744-1820) BANTING, Sir Frederick Grant (1891-1941) BARANY, Robert (1876-1936) BARCROFT, Sir Joseph (1872-1947) BARDEEN, John (1908- ) BARNARD, Christian Neethling (1922- ) BARNARD, Edward Emerson (1857-1923) BARROW, Isaac (1630-1677) BARTHOLIN, Caspar, the Younger (1655-1738) BARTHOLIN, Erasmus (1625-1698) BARTOM, Sir Derek Harold Richard(1918-1998) BARTRAM, John (1699-1777) BASOV, Nikolai Gennadiyevich (1922-) BASSI, Agnostino Maria (1773-1856) BATES, Henry Walter (1825-1892) BATESON, William (1861-1926) BATTERSBY, Sir Alan Rushton (1925-) BAYLISS, Sir William Maddock (1860-1924) BEADLE, George Wells (1903-1989) BEAUMONT, William (1785-1853) BECQUEREL, Alexandre-Edmond(1820-1891) BECQEUREL, Antoine Henri (1852-1908) BEDNORZ, (Johannes) Beorg (1950-) BEHRING, Emil von (1854-1917) BELL, Alexander Grahm (1847-1922) BELL, Sir Charles (1774-1842) BELL, Thomas (1792-1880) BELL BURNELL, (Susan) Jocelyn, nee Bell (1943-) BENACERRAF, Baruj (1920-) BENIOFF, Victor Hugo (1899-1968) BENTLEY, Charles Raymond (1929-) BENZER, Seymour (1929-) BERG, Paul (1926-) BERGERON, Tor Harold Percival (1891-1977) BERGSTROM, Sune Karl (1916-) BERNAL, John Desmond (1901-1971) BRNARD, Claude (1813-1878) BERNOULLI, David (1700-1782) BERNOULLI, Jacques or Jakob (1654-1705) BERNOULLI, Jean or Johann (1667-1748) BERNSTEIN, Richard Barry (1923-1990) BERTHELOT, ( Pierre Eugene) Marcellin (1827-1907) BERTHOLLET, Claude Louis, Comte de (1749-1822) BERZELIUS, Jons Jacob (1779-1848) BEST, Charles Herbert (1899-1978) BHABHA, Homi Jahangir (1909-1966) BISHOP, (John) Michael (1936- ) BLACK, Sir James Whyte (1924- ) BLACK, Joseph (1728-1799) BLALOCK, Alfred (1899-1964) BLOEMBERGEN, Nicolaas (1925- ) BLUMBERG, Baruch Samuel (1925- ) BODMER, Sir Walter Fred (1936- ) BOERHAAVE, Hermann (1668-1738) BOHR, Niels Henrik David (1885-1962) BOK, Bart Jan (1906-1983) BOLTZMANN, Ludwig (1844-1906) BONDI, Sir Hermann (1919- ) BORDET, Jules Jean Baptiste Vincent (1870-1961) BORN, Max (1882-1970) BOSE, Sir Jagadis Chandra (1858-1937) BOSE, Satyendra Nath (1894-1974) BOWDITCH, Henry Pickering (1840-1911) BOYLE, Robert (1627-1691) BRAGG, Sir (Willam) Lawrence (1890-1971) BRAHE, Tycho (1546-1601) BRIDGMAN, Percy Williams (1882-1961) BRIGHT,Richard (1789-1858) BRITTEN, Roy John (1919-) BROCA, (Pierre) Paul (1824-1880) BROWN, Michael Stuart (1941-) BROWN-SQUARD, Edouard (1817-1894) BRUNEL, Isambard Kingdom (1806-1859) BUNSEN, Robert Wilhelm (1811-1899) BURKITT, Denis Parsons (1911-1993) BURNET, Sir(Frank) Macfarlane (1899-1985) CALVIN, Melvin (1911-) CAMPBELL, William Wallace (1862-1938) CANTOR, Charles Robert (1942-) CARLSON, Chester Floyd (1906-1968) CARSON, Hampton Lawrence (1914-) CAVENDISH, Henry (1731-1810) CELCIUS, Anders (1701-1744) CELSUS, Aulus Cornelius (First century AD) CHAGAS, Carlos Ribeiro Justiniano (1879-1934) CHAMBERLAIN, Owen (1920-) CHANDRASEKHAR, Subrahmanyan (1910-) CHAPMAN, David Leonard (1869-1958) CHARCOT, Jean Martin (1825-1893) CHARNLEY, Sir John (1911-1982) CHORLEY, Richard John (1927-) CLARKE, Bryan Campbell (1932-) COCKERELL, Sir Christopher Sydney (1910-) COHEN, Stanley (1922-) COPERNICUS, Nicolas (1473-1543) CORI, Carl Ferdinand (1806-1984) CORNFORTH, Sir John Warcup (1917-) COULOMB, Charles Augustin de (1736-1806) COURNAND, Andre Frederic (1895-1988) CRICK, Francis Harry Compton (1916-) CRILE, George Washington (1864-1943) CURIE, Marie (originally Marya), nee Sklodowska (1867-1934) CURIE, Pierre (1859-1906) DAGUERRE, Louis Jacques Mande (1789-1851) DALE, Sir Henry Hallett (1875-1968) DALTON, John (1766-1844) DARWIN, Charles Robert (1809-1882) DAVY, Sir Humphry (1778-1829) DAWKINS, (Clinton) Richard (1941-) DE DUVE, Christian Rene (1917-) DESCARTES, Rens (1596 - 1650 ) DE VERIES, Hugo Marie (1848-1935) DIOPHANTIUS (fl. third century) DIRAC, Paul Adrien Maurice (1902-1984) DOLLOND , John (1706-1761) DONDERS , Franciscus Cornelis (1818-1889) DOPPLER , Christian Johann(1803-1853) DOTY, Paul Mead (1922-) DRIESCH, Hans Adolf Eduard (1867- 1941) DU BOIS-REYMOND, Emil Heinrich (1818-1896) DUBOS, Rene Jules (1901-1982) DUCHENNE, Guillaume Benjamin Amand (1805-1875) DULBECCO, Renato (1914-) DYSON, Freeman John (1923-) ECCLES, Sir John, Carew (1903-) EDDINGTON , Sir Arthur Stanley (1882-1944) EDELMAN, Gerald Maurice (1929-) EDISON, Thomas Alva(1847-1931) EDWARDS , Robert Geoffrey(1925-) EHRLICH, Paul (1854-1915) EINSTEIN , Albert (1879-1955) EINTHOVEN , Willem (1860-1927) EMPEDOCLES (fl.c.450 BC) ERATOSTHENES , (c.276 - 194 BC) EUCLID (fl.300 BC) EULER, Leonhard (1707-1783) FAHRENHEIT, (Gabriel) Daniel (1686-1736) FAIRCLOUGH, John Whitaker (1930-) FARADAY , Michael (1791-1867) FERMAT, Pierre de (1601-1665) FERMI, Enrico(1901-1954) FISCHER, Emil Hermann (1852-1919) FISCHER, Hans(1881-1945) FLEMING , Sir Alexander (1881-1955) FLEMMING , Walther (1843-1905) FLOREY, Howard Walter, Baron Florey of Adelaide and Marston (1898-1968) FLORY, Paul John (1910-1985) FOUCAULT, Jaen Bernard Leon (1819-1868) FOURIER, Jean Baptiste Joseph Baron de (1768-1830) FRANKLIN , Benjamin(1706-1719) FEYNMAN, Richard (1918-1988) GABOR, Dennis (1900-1979) GAJDUSEK, Daniel Carleton (1923-) GALEN (Claudius Galenus ) (c.130- c.201 AD) GALILEO(Galileo Galilei)(1564-1642) GALTON , Sir Francis (1822-1911) GALVANI, Luigi (1737-1798) GARROD, Sir Archibald Edward (1857-1936) GAY-LUSSAC , Joseph Louis (1778-1850) GEER, Baron Gerhard Jacob de (1858-1943) GEHRING, Walter Jacob (1939-) GEIGER , Hans Wilhelm (1882- 1945) GILBERT , or GYLBERDE, William (1544-1603) GMELIN , Leopold (1788-1853) GOLDSTEIN , Joseph Leonard (1940-) GOLGI , Camillo (1843 - 1926) GOODALL, Jane(1934-) GOULD, Stephen Jay(1941-) GRAAF, Regnier de (1641-1673) GRANIT, Ragnar Arthur(1900-) GREEN, Michael Boris (1945-) GROTHENDIECK, Alexandre (1928-) GUERICKE, Otton von (1602-1686) GURDON, John Bertrand (1933-) HABER, Fritz (1868-1934) HAFFKINE, Waldemar Mordecai Wolff (1860-1930) HAHNEMANN, (Christian Friedrich) Samuel (1755-1843) HALLEY, Edmond (1656-1742) HAMILTON, Sir William Rowan (1805-1865) HARDY, Godfrey Harold (1877-1947) HARINGTON, Sir Charles Robert (1897-1972) HARVEY, William (1578-1657) HASSEL, Odd (1897-1981) HAUPTMAN, Herbert Aaron (1917 -) HAWKING, Stephen William (1942-) HAWORTH, Sir (Walter) Norman (1883-1950) HELMHOLTZ, Hermann von (1821-1894) HERACLEIDES OF PONTUS AND EKPHANTUS (c.338-c.315 BC) HERSCHEL, Caroline Lucretia (1750-1848) HERSHCHEL, Sir John Frederick William (1792-1871) HERSHEL, Sir (Frederick) William (1738-1822) HERSHEY, Alfred Day (1908 -) HERZBERG, Gerhard (1904-) HEYWOOD, Vernon Hilton (1927-) HILBERT, David (1862-1943) HIPPARCHOS, (c.180-125 BC) HIPPOCRATES, (c. 460-377 or 359 BC) HIRST, Sir Edmund Langley (1898-1975) HODGKIN, Dorothy Mary, nee Crawford (1910- ) HOFFMANN, Roald (1937- ) HOLLEY, Robert William (1922-) HOPWOOD, David Alan (1933-) HORROCKS, Jeremiah (1619-1641) HOUNSFIELD, Sir Godfrey Newbold (1919-) HOUSSAY, Bernardo Alberto (1887-1971) HOYLE, Sir Fred (1915-) HUBBLE, Edwin Powell (1889-1953) HUDSON, William (1734-1793) HUGGINS, Charles Brento (1901-) HUNTER, John (1728-1793) HUXLEY, Sir Andrew Fielding (1917-) HUXLEY, Sir Julian Sorell (1887-1975) HYPATIA (c. 370-415 AD) JAKSON, Benjamin Daydon (1846-1927) JACOB, Fracois (1920- ) JANSSEN, (Pierre) Jules Cesar (1824-1907) . JOHANSON, Donald Carl (1943-) JAHNAVI-PRASAD, Ashoka (1955-) JOLIOT-CURIE, Frederic, originally Jean-Frederic Joliot (1900-1958) JOLIOT-CURIE, Irene, nee Curie (1897-1956) JOULE, Jarnes Presscott (1818-1889) KARRER, Paun (1889-1971) KATZ, Sir Bernard (1911-) KELVIN, William Thomson 1st Baron of Largs (1824-1907) KENDALL, Edward Calvin (1886-1972) KENDREW, Sir Jonh Cowdery (1917-1997) KEPLER, Johannes (1571-1630) KERR, Roy Patrick (1934- ) KHORANA, Har Gobind (1922-) KILBURN, Tom (1921-) KIRWAN, Richard (1733-1812) KLINGENSTIERNA, Samuel (1698-1765) KLUG, Sir Aaron (1926-) KNOPOFF, Leon(1925-) KOCH, (Heinrich Hermann) Robert(1843-1910) KOCHER, Emil Theodor(1841-1917) KOHLER, Georges Jean Franz (1946-) KLOFF , Willem Johan (1911-) KOLMOGOROV, Andrei Nikolaevich (1903-1987) KORNBERG, Arthur (1918-) KOSSEL, Albrecht (1853-1927) KREBS, Edwin Gerhard (1918-) KREBS, Sir Hans Adolf (1900-1981) KROTO,Harold Walter, (1939-) KUHN, Richard (1900-1967) KUMMER, Ernst Eduard(1810-1893) LACK, David (1910-1973) LAENNEC, Rene Theophile Hyacinthe (1781-182) LAGRANGE,Joseph(1736-1813) LAMARCK, Jean-Baptiste Pierre Antoine de Monet, , Chevalier de (1744-1829) LAMB, Willis Eugene (1913-) LANDAU, Lev Davidovich (1908-1968) LANDSTEINER, Karl (1868-1943) LAPLACE, Pierre Simon , Marquis de (1749-1827) LARTET, Edouard Arman Isidore Hippolyte (1801-1871) LAVOISIER , Antoine Laurent (1743-1794) LAWS , Richard Maitland (1926-) LAWTON, John Hartley (1943-) LEAKEY, Mary Douglas, nee Nicol (1913-) LE BEL, Joseph Achille (1847-1930) LE CHATELIER, Hend Louis (1850-1936) LEDER, Philip (1934-) LEDERBERG, Joshua (1925-) LEE, Taung-Dao(1926-) LEEUWENHOEK, Anton van(1632-1723) LEHMANN, Inge(1888-1993) LEIBNIZ, Gottfried Wilhelm(1646-1716) LEISHMAN, Sir William Boog(1865-1926) LELOIR, Luis Frederico (1906-) LEMAITRE, Georges Henri (1894-1966) LENZ, Heinrich Friedrich Emil(1804-1865) LEUCKART, Kari George Friedrich Rudolf(1822-1898) LEVI-MONTALCINI , Rita (1909-) LEWIS, Sir Thomas (1881-1945) LEWONTIN, Richard Charles (1929-) LIE, (Marius) Sophus(1842-1899) LIND, James(1716-1794) LINDERSTROM-LANG, Kaj Ulrik(1896-1959) LINNAEUS, Carolus (Carl von Linne) (1707-1778) LIPPIVIANN, Gabriel Jonas (1845-1921) LIPSCOMB, William Nunn (1919- ) LISTER, Joseph, Lord (1827-1912) LOCKYER, Sir (Joseph) Norman (1836-1920) LOEB, Jacques (1859-1924) LOEWI, Otto (1873-1961) LONGUET-HIGGINS, (Hugh) Christopher (1923-) LORENZ, Konrad Zacharias (1903-1989) LORENZ, Ludwig Valentin (1829-1891) LOWRY, (Thomas) Martin (1874-1936) LUBBOCK, Sir John, 1st Baron Avebury (1834-1913) LUDWING, Karl Friedrich Wilhelm (1816-1895) LURIA, Salvador Edward (1912-1991) LYAPUNOV, Aleksandr Mikhailovich (1857-1918) LYNEN, Feodor Felix Konrad (1911-1979) LYON, Mary Frances (1925- ) MACH, Ernst (1838-1916) MACHNAMARA, Dame (Annie) Jean (1890-1968) MAGNUS, Heinrich Gustav (1802-1870) MALPIGHI, Marcello (1628-1694) MALTHUS, Thomas Robert (1766-1834) MANSON, Sir Patrick (1844-1922) MARCONI, Gugiielmo, Marchese (1874-1937) MARIOTTE, Edme(c.1620-1684) MARSH, James(1789-1846) MARSH, Othniel Charles(1831-1899) MASON, Sir (Basil) John(1923-) MATUYAMA, Motonori (1884-1958) MAXWELL, James Clerk(1831-1879) MAYALL, Nicholas Ulrich(1906-) MAYOW, John (1640-1679) McCLINTOCK, Barbara (1902-1992) McCREA, Sir William Hunter (1904-) McLAREN, Anne Laura (1927-) McMILLAN, Edwin Mattison (1907-1991) MEDAWAR,Sir Peter Brian (1915-1987) MEITNER, Lise(1878-1968) MELVILL, Thomas(1726-1753) MENDEL,Gregor Johann(1822-1884) MENDELEYEV, Dmitri Ivanovich(1834-1907) MERRIFIELD, (Robert) Bruce(1921-) METCHNIKOFF, Elle, originally Ilya Ilyich(1845-1916) MICHAELSON, Sidney(1925-1991) MICHEL, Hartmut(1948-) MICHELSON, Albert Abraham(1852-1931) MICHIE, Donald(1923-) MIDGLEY, Thomas Jr(1889-1944) MILANKOVITCH, Milutin(1879-1958) MILLER, Stanley Lloyd(1930-) MILLIKAN, Robert Andrews (1868-1953) MILNE, John(1859-1913) MILSTEIN, Cesar(1927-) MINKOWSKI, Hermann(1864-1909) MINOT, George Richards (1885-1950) MITCHELL, Maria(1818-1889) MITCHELL, Peter Dennis(1920-1992) MOBIUS, August Ferdinand (1790-1868) MOHL, Hugo von (1805-1872) MOISSAN, (Ferdinand Frederic) Henri (1852-1907) MONOD, Jacques Lucien (1910-1976) MONRO, Alexander (1697-17667) MONTAGNIER, Luc (1932-) MORGAGNT, Giovanni Battista (1682-1771) MORGAN, Thomas Hunt (1866-1945) MORISON, Robert (1620-1683) MOSELEY, Harry (Henry Gwyn Jeffroys) (1887-1915) MOTT, Sir Nevill Francis (1905-) MUOLLER, (Karl) Alex (ander) (1927-) MULLER, Johannes Peter (1801-1858) MULLER, Paul Hermann (1899-1965) MULLIS, Kary Banks (1944-) MUNK, Walter Heinrich (1917-) MURRAY, Joseph Edward (1919-) NAGELI, Karl Wilhelm von (1817-1891) NAPIER, John (1550-1617) NATHANS, Daniel (1928-) NATTA, Giulio (1903-1979) NAVIER, Claude Louis Marle Henri (1785-1836) NEEDHAM, Joseph (1900-) NEEL, Louis Eugene Felix (1904-) NEHER, Erwin (1944-) NEWLANDES, John Alexander Reina (1837-1898) NEWTON, Alfred (1829-1907) NEWTON, Sir Issac (1642-1727) NICHOLSON, (Edward) Max (1904-) NICOL, William (1768-1851) NICOLLE, Charles Jules Henri (1866-1936) NIEPCE, Joseph Nicephore (1765-1833) NIEUWLAND, Julius Arthur (1878-1936) NIRENBERG, Marshall Warren (1927-) NOBEL, Alfred (1833-1896) NOETHER, (Amalie) Emmy (1882-1935) NOGUCHI, Hideyo (1876-1928) NOLLET, Jean Antoine (1700-1770) NOROYI, Ryoji (1937-) NORRISH, Ronald George Wreyford (1897-1978) NORTHROP, John Howard (1891-1987) NOSSAL, Sir Gustav Joseph Victor (1931-) NOYCE, Robert Norton (1927-1990) NUTTALL, Thomas (1786-1859) OATLEY, Sir Charles (1904-) OCHOA, Severo (1905-) ODUM, Eugene Pleasants (1913-) OHM, Georg Simon (1787-1854) OKAZAKI, Reiji (1930-1975) OLDHAM, Richard Dixon (1858-1936) OLIPHANT, Sir Mark (Marcus Laurence Elwin) (1901-) OLSEN, Kenneth Harry (1926-) ONSAGER, Lars (1903-1976) OORT, Jan Hendrik (1900-1992) OPPENHEIMER, (Julius) Robert (1904-1967) OSBORN, Henry Fairfield (1857-1935) OSLER, Sir William (1849-1919) OSTWALD, (Friedrich) Wilhelm (1853-1932) OTTO, Nikolaus August (1832-1891) OWEN, Sir Richadr (1804-1892) OXBURGH, Sir (Ernest) Ronald (1934-) PALADE, George Emil (1912-) PANDER, Christian Heinrich (1974-1865) PAPANICOLAOU, George Nicholas (1883-1962) PAPPUS OF ALEXANDRIA (fourth century) PARACELSUS, (a name coined for himself by Theophrastus Bombastus von Hohenhelm) (1493-1541) PARDEE, Arthur Beck (1921-) PARKES, Alexander (1813-1890) PASCAL, Blaise (1623-1662) PASTEUR, Louis (1822-1895) PAUL, Wolfgang (1913-) PAULING, Linus Carl (1901-1997) PAVLOV, Ivan Petrovich (1849-1936) PEANO, Giuseppe (1858-1932) PECQUET, Jean (1622-1674) PEDERSEN, Charles (1904-1990) PEIRCE, Charles Sanders (1839-1914) PELL, John (1610-1685) PENFIELD, Wilder Graver (1891-1976) PENROSE, Lionel Sharples (1898-1972) PENZIAS, Aron Allan (1933-) PERKIN, William Henry Jr (1860-1929) PERKIN, Sir William Henry Sr (1838-1970) PERRIN, Jean Baptiste (1870-1942) PERSOON, Christiaan Hendrik (1761-1836) PERT, Candace, nee Beebe (1915-) PERUTZ, Max Ferdinand (1914-) PFEFFER, Wilhelm Friedrich Philipp (1845-1920) PFEIFFER, Richard Friedrich Johannes (1858-1945) PIAZZI, Giuseppe (1746-1826) PICCARD, Auguste Antoine (1884-1962) PICKERING, Sir George White (1904-1980) PICTET, Marc-Auguate (1752-1825) PICTET, Raoul Pierre (1846-1929) PINCUS, Gregory Goodwin (1903-1967) PLANCK, Max Karl Ernst Ludwing (1858-1947) PLAYFAIR, Lyon, 1st Baron Playfair (1819-1898) PLINY, Galus Plinius Secundus, known as the "the Elder" (AD 23-79) POINCARE, Jules Henri (1854-1912) POISSON, Simeon Denis (1781-1840) POLANYI, Michael (1891-1976) PONCELET, Jean Victor (1788-1867) POPE, Sir William Jackson (1870-1939) POPOV, Aleksander Stepanovich (1859-1905) PORTA, Giovanni Battista delta (1535-1615) PORTER, George, Baron Porter of Luddenham (1920-) PORTER, Rondey Robert (1917-1985) POWELL, John Wesley (1834-1902) PRAIN, Sir David (1857-1944) PREGL, Fritz (1869-1944) PRELOG, Vladimir (1906-1998) PRESTWICH, Sir Joseph (1812-1896) PRIESTLEY, Joseph (1733-1804) PRINGLE, Sir John (1707-1782) PROKHOROV, Alexander Mikhailovich (1916-) PROUST, Joseph Louis (1754-1826) PTASHNE, Mark Steven (1940-) PTOLEMY, (Claudius Ptolemaeus) (c. AD 90-168) PURKINJE, or PURKYNE, Jan Evangelista (1787-1869) PYTHAGORAS (sixth century BC) QUASTEL, Juda Hirsch (1899-1987) RAINWATER, (Leo) James (1917-) RAMAN, Sir Chandrasekhara Venkata (1888-1970) RAMANUJAN, Srinivas (1887-1920) RAMON Y CAJAL, Santiago (1852-1934) RAMSAY, Sir William (1852-1916) RAMSEY, Frank Plumpton (1903-1930) RAMSEY, Norman (1915-) RANKINE, William John Macquorn (1820-1872) RAOULT, Francois Marie (1830-1901) RAPHAEL, Ralph Alexander (1921-) RAY, John (1627-1705) RAYLEIGH, John William Strutt, 3rd Baron (1842-1919) REAUMUR, Rene Antoine Ferchault de (1683-1757) RECORDE, Robert (c.151-1558) REES, Sir Martin John (1942-) REGIOMONTANUS, (originally Johannes Muller) (1436-1476) REICHENBACH, Karl, Baron von (1788-1869) REMAK, Robert (1815-1865) REYNOLDS, Osborne (1842-1912) RICHARDS, Dickinson Woodruff (1895-1973) RICHARDS, Theodore William (1868-1928) RICHET, Charles Robert (1850-1935) RICHTER, Charles Francis (1900-1985) RICHTER, Jeremias Beniamin (1762-1807) RIEMANN, (George Friedrich) Bernhard (1826-1866) RIESZ, Frigyes (Frederic) (1880-1956) RIGHI, Augusto (1850-1920) RITTER, Johann Wilhelm (1776-1810) ROBBINS, Frederick Chapman (1916-) ROBERTS, Richard (1943-) ROBERTSON, Howard Percy (1903 -1961) ROBIN, Gordon de Quetteville (1921) ROBINS, Benjamin (1707-1751) ROBINSON, Sir Robert (1886-1975) ROEMER, Olaus (1644-1710) ROHRER, Heinrich (1933-) ROME DE L'ISLE , Jean-Baptise Louis (1736-1790) ROMER, Alfred Sherwood (1894-1973) RONALDS, Sir Francis (1788-1873) RONTGEN, Wilhelm Konrad von (1845-1923) ROSCOE, Sir Henry Enfield (1833-1915) ROSE, William Cumming (1887-1984) ROSKY, Herbert (1935-) ROSS, Sir Ronald (1857-1932) ROSSE, William Parsons, 3rd Earl of (1800-1867) ROSSI, Bruno (1905-) ROTHLISBERGER, Hans (1923-) ROUS, (Francis) Peyton (1879-1970) ROUX, (Pierre Paul) Emile (1853-1933) ROUX, Wilhelm (1850-1924) ROXBURGH, William (1751-1815) RUBBIA, Carlo (1934-) RUBIN, Gerald Mayer (1950-) RUBNER, Max (1854-1932) RUDBECK, Olof (1630-172) RUMFORD, Benjamin Thompson, Count (1753-1814) RUNGE, Friedlieb Ferdinand (1975-1867) RUSKA, Ernst August Friedrich (1906-1988) RUSSEL, Bertrand Arthur William, 3rd Earl Russell (1872-1970) RUSSELL, Sir Frederick Stratten (1807-1984) RUSSELL, Henry Norris (1877-1957) RUSSELL, John Scott (1802-1882) RUTHERFORD, Ernest, 1st Baron Rutherford of Nelson (1871-1937) RUZICKA, Leopold (1887-1976) RYDBERG, Johannes Robert (1854-1919) RYLE, Sir Martin (1918-1984) SABATIER, Paul (1854-1941) SABIN, Albert Bruce (1906-1993) SABINE, Sir Edward (1788-1883) SABINE, Wallace Clement Ware (1868-1919) SACHS, Julius von (1832-1897) SAGAN, Carl Edward (1934-) SAHA, Meghnad (1894-1956) SAINTE-CLAIRE DEVILLE, Hanri Etienne (1818-1881) SAKHAROV, Andrei Dimitrievich (1921-1989) SAKMANN, Bert (1942-) SALAM, Abdus (1926-1998) SALISBURY, Edward James (1886-1978) SALIBURY, originally MARKHAM, Richard Anthony (1761-1819) SALK, Jonas Edward (1914-) SAMUELSSON, Benqt Ingemar (1934-) SANDAGE, Allan Rex (1926-) SANDERS, Howard Lawrence (1921-) SANGER, Frederick (1918-) SARS, Michael (1805-1869) SAUSSURE, Horace Benedict de (1740-1799) SAVART, Felix (1791-1841) SAYERS, James (1912-) SCHALLY, Andrew Victor (1926-) SCHAUDINN, Fritz Richard (1871-1906) SCHAWLOW, Arthur Leonard (1921-) SCHEELE, Carl Wilhelm (1742-1786) SCHEUTZ, Pehr George (1785-1873) SCHIAPARELLI, Giovanni Virginio (1835-1910) SCHIKARD, Wilhelm (1592-1635) SCHIMPER, Andreas Franz Wilhelm (1856-1901) SCHIMPER, Karl (or Carl) Friedrich (1803-1867) SCHIMPER, Wilhelm Philipp (1808-1880) SCHMIDT, Bernhard Voldemar (1879-1935) SCHMIDT, Jonannes (1877-1933) SCHMIDT, Maarten (1929-) SCHOENHEIEMER, Rudolf (1898-1941) SCHONBEIN, Christian Friedrich (1799-1868) SCHRIEFFER, John Robert (1931-) SCHROCK, Richard (1942-) SCHRODINGER, Erwin (1887-1961) SCHULTZE, Max Johann Sigismund (1825-1874) SCHUSTER, Sir Arthur (1851-1934) SCHWANN, Theodor (1810-1882) SCHWARTZ, Melvin (1932-) SCHWARZ, Harvey Fisher (1905-1988) SCHWARSCHILD, Karl (1873-1916) SCHWEIGGER, Johann Salomo Christoph (1779-1857) SCHWINGER, Julian (1918-) SCORESBY, William (1789-1857) SEABORG, Glen Theodore (1912-) SECHHI, Angelo (1818-1878) SEDGWICK, Adam (1785-1873) SEEBECK, Thomas Johann (1770-1831) SEFSTROM, Nils Gabriel (1765-1829) SEGRE, Emilio (1905-1989) SELYE, Hans Hugo Bruno (1907-1982) SEMENOV, Nikolai Nikolaevich (1896-1986) SEMMELWEIS, Ignaz Philipp (1818-1865) SENEBIER, Jean (1742-1809) SERRE, Jean-Pierre (1926-) SERVETUS, Michael (1511-1553) SEWARD, Sir Albert Charles (1863-1941) SEYFERT, Carl Keenan (1911-) SHANNON, Claude Elwood (1916-) SHAPLEY, Harlow (1885-1972) SHARP, Phillip Allen (1944-) SHARPEY-SCHAFER, Sir Edward (1850-1935) SHARPLESS, (Karl) Barry (1941-) SHEN KUA (1031-1095) SHEPARD, Francis Parker (1897-1985) SHEPPARD, Philip Macdonald(1921-1976) SHERMAN, Henry Clapp (1875-1955) SHERRINGTON, Sir Charles Scott (1857-1952) SHKLOVSKY, Josef Samuilovich (1916-1985) SHOCKLEY, William Bradford (1910-1989) SIBTHORP, John (1758-1796) SIDGWICK, Nevil Vincent (1873-1951) SIEGBAHN, kai (1918-) SIEGBAHN, Karl Manne Georg (1886-1978) SIEMENS, (Ernst) Werner von (1816-1892) SIEMENS, Sir (Charles ) William, originally (Karl) Wilhelm (1823-1883) SIMPSON, George Gaylord(1902-1984) SIMPSON, Sir James Young (1811-1870) SIMSON, Robert (1687-1768) SLIPHER, Vesto Melvin (1875-1969) SMAGORINSKY, Joseph (1924-) SMITH, Sir Grafton Elliot (1871-1937) SMITH, Hamilton othanel (1931-) SMITH, Henry John Stephen (1826-1883) SMITH, Sir James Edward (1759-1828) SMITH, (Ernst) Lester (1904-1992) SMITH, Michael (1932-) SMITH,Theobald (1859-1934) SMITH, William (1769-1939) SMITHSON , James Louis Macie (1765-1829) SMYTH, Charles Piazzi (1819-1900) SNELL, George Davis (1903-) SNELL, Willebrod van Rolien, (Latin Snellius) (1580-1626) SNOW, John (1813-1858) SNYDER, Solomon Halbert (1938-) SOBRERO, Ascanio (1812-1888) SODDY, Frederick (1877-1965) SOKAL, Robert Reuven (1926-) SOMERVILLE, Mary Greig, nee Fairfax (1780-1872) SOMMERFELD, Arnold (1868-1851) SONDHEIMER, Franz (1926-1981) SORBY, Henry Clifton (1826-1908) SORENSEN, Soren Peter Lauritz (1868-1939) SOSIGENES (fl.c.40 bc) SOUTHWOOD, Sir (Thomas) Richard (Edmund) (1931-) SPALLANZANI, Lazaro (1729-1799) SPEDDING, Frank Harold (1902-1984) SPEMANN, Hans (1869-1941) SPENCER , Sir (Walter) Baldwin (1860-1929) SPENCER, Herbert (1820-1903) SPERRY, Roger Wolcott (1913-) SPITZER, Lymal Jr (1914-) SPOTTISWOODE, William (1825-1883) SPRENGEL, Christian Konrad (1750-1816) SPRENGEL, Hermann Johann Philipp (1834-1906) SPRUCE, Richard (1817-1893) SPAHN, Franklin William (1929-) STAHL, Georg Ernst (1610-1734) STANIER, Roger Yate (1916-) STANLEY, Wandell Meredith (1904-1971) STANLEY, William (1858-1916) STARK, Johannes (1874-1957) STARLING, Ernst Henry (1866-1927) STAS, Jean Servais (1813-1891) STAUDINGER, Hermann (1881-1965) STEARN, William Thomas (1911-) STEBBINS, George Ledyard (1906-) STEBBINS, Joel (1878-1966) STEENSTRUP, Johannes Iapetus Smith (1813-1897) STEFAN, Josef (1835-1893) STEIN, Willaim Howard (1911-1980) STEINBERGER, Jack (1921-) STEINER, Jakob (1796-1863) STEINMETZ, Charles Proteus, originally Kari August Rudolf (1865-1923) STENO, Nicolaus (also known as Niels Stensen ) (1638-1686) STEPTOE, Patrick Christopher (1913-1988) STERN, Otto (1888-1969) STEVENS, Nettie Maria (1861-1912) STEVIN, Simon (1548-1620) STEWART, Balfour (1828-1887) STEWART, Sir Frederick Henry (1916-) STEWART, Ralph Randles (1890-) STIBITZ, George Robert (1904-) STIRLING, James, known as the Venetian (1692-1770) STOCK, Alferd (1876-1946) STOKES, Sir George Gabriel (1819-1903) STOMMEL, Hank (Henry Melson ) (1920-1922) STONE, Francis Gordon Albert (1925-) STORK, Gilbert (1921-) STRACHEY, Christopher (1916-1975) STRASBURGER, Eduard Adolf (1844-1912) STRATO, or STRATON, of Lampsacus (d.c.269 bc) STROMEYER, Friedrich (1776-1835) STROMGREN, Bengt (1908-1987) STRUVE, Otto (1897-1963) STRUVE, Otto Wilhelm (1819-1905) STRUVE, (Friedrich Georg) Wilhelm (1793-1864) STURGEON, William (1783-1850) STURM, Jacques Charles Francois (1803-1855) STURTEVANT, Alfred Henry (1891-1970) SUESS, Eduard (1831-1914) SUGDEN, Samuel (1892-1950) SUMNER, James Batcheller (1887-1955) SUOMI, Verner (1915-) SUTCLIFFE, Reginald Cockroft (1904-1991) SUTHERLAND, Earl Wilbur Jr (1915-1974) SUTHERLAND, Sir Gordon Brims Black McIvor (1907-1980) SVEDBERG, Theodor (1884-1971) SVERDRUP, Haraid Uirik (1888-1957) SWALLOW, John Crossley (1923-) SWAMMERDAM, Jan (1637-1680) SWAN, Sir Joseph Wilson (1828-1914) SWEDENBORG, Emanuel (1688-1772) SWINBURNE, Sir James, 9th Baronet (1858-1958) SWINGS, Pol (1906-1983) SWINTON, Alan Archibald Campbell (1863-1930) SYDENHAM, Thomas (1624-1689) SYLVESTER, James Joseph (1814-1897) SYLVESTER-BRADLEY, Peter (1913-1978) SYMONS, George James (1838-1900) SYNGE, Richard Laurence Millington (1914-) SZENT-GYORHYI, Albert von Nagyrapolt (1893-1986) SZILARD, Leo (1898-1964) TAIT, Peter Guthrie (1831-1901) TAKAMINE, Jokichi (1834-1922) TAKHTMAN, Armen Leonovich (1910-) TAMM, Igor Yevgenyevich (1895-1971) TANSLEY, Sir Arthur George (1871-1955) TARSKI, Alfred (1902-1983) TARTAGLIA, (originally FONTANA, Niccolo)(c.1500-1557) TATUM, Edward Lawrie (1909-1975) TAUBE, Henry(1915-) TAUSSIG, Helen Brooke (1898-1986) TAYLOR, Brook (1685-1731) TAYLOR, Sir Geoffrey Ingram (1886-1975) TAYLOR, Sir Hugh Stott(1890-1974) TAYLOR, Joseph Hooton Jr (1941-) TAYLOR, Richard Edward (1919-) TAZIEFF, Haroun (1914-) TEILHARD DE CHARDIN, Pierre (1881-1955) TEISSERENCE DE BORT, Leon Philippe (1855-1913) TELLER, Edward (1908-) TEMIN, Howard Martin (1934-) TEMMINCK, Coenraad Jacob (1778-1858) TENNANT, Charles (1768-1838) TENNANT, Smithson (1761-1815) TESLA, Nikola (1856-1943) THALES (c.624-545 BC ) THEAETETUS (c.414-369 BC ) THEILER, Max (1899-1972) THENARD, Louis Jacques (1777-1857) THEOPHRASTUS (c.372-c.287 BC ) THEORELL, (Axel) Hugo Theodor (1903-1982) THOM, Rene Frederic (1923-) THOMAS, (Edward) Donnall (1920- ) THOMAS, Sir John Meurig (1923-) THOMAS, Sidney Gilchrist (1850-1885) THOMPSON, Sir D' Arcy Wentworth (1860-1948) THOMPSON, Silvanus Phillips (1851-1916) THOMSON, Elihu (1853-1937) THOMSON, Sir George Paget (1892-1975) THOMSON, James (1822-1892) THOMSON, Sir J(oseph) J(ohn) (1856-1940) THOOFT, Gerard (1947- ) THORARINSSON, Sigurdur (1912-1983) THORPE, Sir (Thomas) Edward (1845-1925) THORPE, William Homan (1902-1986) THORSON, Gunnar Axel (1906-1971) THUNBERG, Carl Per (1743-1828) TILDEN, Sir William Augustus (1842-1926) TIMOSHENKO, Stephen (Stepan Prokofyevich) (1878-1972) TINBERGEN, Nikolaas (1907-1988) TING, Samuel Chao Chung (1936- ) TISELIUS, Arne Wilhelm Kaurin (1902-1971) TITTERTON, Sir Ernest William (1916-1990) TIZARD, Sir Henry Thomas (1885-1959) TOBIAS, Phillip Vallentine (1925- ) TODD, Alexander Robertus, Boron of Trumpington (1907- ) TOLANSKY, Samuel (1907-1973) TOMBAUGH, Clyde William (1906- ) TOMONAGA, Sin-Itiro (1906-1979) TONEGAWA, Susumu (1939- ) TORREY, John (1796-1873) TORRICELLI, Evangelista (1608-1647) TOURNEFORT, Joseph Pitton de (1656-1708) TOWNES, Charles Hard (1915- ) TOWNSEND, Sir John Sealy Edward (1868-1957) TRAUBE, Ludwig (1818-1876) TRAUBE, Moritz (1826-1894) TRAVERS, Morris William (1872-1961) TREVIRANUS, Gittfried Reinhold (1776-1837) TRUMPLER, Robert Julius (1886-1956) TSIOLKOVSKY, Konstantin Eduardovich (1857-1935) TSWETT, or TSVETT, Mikhail Semenovich (1872-1919) TULASNE, Louis Rene (1815-1885) and Charles (1816-1884) TURING, Alan Mathison (1912-1954) TURNER, James Johnson (1935- ) TURNER, William (c.1510-1568) TWORT, Frederick William (1877-1950) TYNDALL, John (1820-1893) TYRRELL, George Walter (1883-1961) TYSON, Edward (1651-1708) UHLENBECK, George Eugene (1900-1988) ULAM, Stanislav Marcin (1909- ) ULUGH-BEG (1394-1449) UNSOLD, Albrecht Otto Johannes (1905- ) UNVERDORBEN, Otto (1806-1873) URBAIN, Georges (1872-1938) UREY, Harold Clayton (1893-1981) USSING, Hans Henrikson (1911- ) VAN ALLEN, James Alfred (1914-) VAN ANDEL, Tjeerd Handrik (1923-) VAN DE GRAAFF, Robert Jernison (1901-1967) VAN DE HULST, Hendrik Christoffell (1918-) VAN DER MEER, Simon (1925-) VAN DER WAALS, Johannes Diderik (1837-1923) VANE, Sir John Robert (1927-) VAN NIEL, Cornelis Bernardus Kees (1898-) VAN'T HOFF, Jacobus Henricus (1852-1911) VAN TIEGHEM, Philippe (1839-1914) VAN VLECK, John Hasbrouck (1899-1980) VARMUS, Harold Elliot (1939-) VASKA, Lauri (1928-) VAVILOV, Nikolai Ivanovich (1887-1943) VENING MEINESZ, Felix Andries (1887-1966) VENN, John (1834-1923) VENTURI, Giovanni Battista (1746-1822) VERNADSKY, Vladimir Ivanovich (1863-1945) VERNON HARCOURT, Augustus George (1834-1919) VERNON HARCOURT, William Venables (1789-1871) VESALIUS, Andreas (1514-1564) VIETA, Franciscus, or VIETE, Francois (1540-1603) VILLEMIN, Jean-Antoine (1827-1892) VINE, Frederick John (1939-1988) VIRCHOW, Rudolf (1821-1902) VIRTANEN, Artturi Ilmari (1895-1973) VOGEL, Hermann Carl (1841-1907) VOGEL, Hermann Wilhelm (1834-1898) VOGT, Peter (1923-) VOLTA, Alessandro Giuseppe Anastasio, Count (1745-1827) VOLTERRA, Vito (1860-1940) VON BRAUN, Wernher (1912-1977) VON KLITZING, Klaus (1943-) VON LAUE, Max Theodor Felix (1879-1960) VON MISES, Richard (1883-1935) VONNEGUT, Bernard (1914-) VON NEUMANN, John (Johann) (1903-1957) VORONOFF, Serge (1866-1951) WADATI, Kiyoo (1902-) WADDINGTON, Conrad Hal (1905-1975) WAERDEN, Bartel Leendert van der (1903-) WAGER, Lawrence Rickard (1904-1965) WAGNER-JAUREGG, or WAGNER VON JAUREGG, Julius (1857-1940) WAKSMAN, Selman Abraham (1888-1973) WALD, George (1906-) WALDEN, Paul (1863-1957) WALDEVER-HARTZ, Wilhelm (1839-1921) WALKER, Sir James (1863-1935) WALLACE, Alfred Russel (1823-1913) WALLACH, Otto (1847-1931) WALLER, Augustus Voiney (1816-1870) WALLICH, Nathaniel (1786-1854) WALLIS, Sir Barnes Neville (1887-1979) WALLIS, John (1616-1703) WALTON, Ernest Thomas Sinton (1903-) WANG, An (1920-1990) WARBURG, Otto Heinrich (1883-1970) WARD, Nathaniel Bagshaw (1791-1868) WARMING, (Johannes) Eugenius Bulow (1841-1924) WASSERMAN, August Paul von (1866-1925) WALTERSTON, John James (1811-1883) WATSON, David Meredith Seares (1886-1973) WATSON, James Dewey (1928-) WATSON, Sir William (1715-1787) WATT, James (1736-1819) WEATHERALL, Sir David John (1933-) WEBER, Ernst Heinrich (1795-1878) WEBER, Wilhelm Eduard (1804-1891) WEDDERBURN, Joseph Henery Maclagan (1882-1948) WEEKS, Willy (Wilford Frank)(1929-) WEGENER, Alfred Lothar (1880-1930) WEIDENREICH, Franz (1873-1948) WEIERSTRASS, Karl Theodor Wilhelm (1815-1897) WEIL, Andre (1906-) WEINBERG, Robert Allan (1942-) WEINBERG, Steven (1933-) WEISMANN, August Friedrich Leopolan (1834-1914) WEISS, Robin (Robert Anthony)(1940-) WEIZSACKER, Baron Carl Friedrich von (1912-) WELCH, William Henry Havard (1850-1934) WELLER, Thomas Huckle (1915-) WERNER, Abraham Gottlob (1749-1817) WERNER, Alfred (1866-1919) WERNICKE, Carl (1848-1905) WESTINGHOUSE, George (1846-1914) WEYL, Hermann (1885-1955) WHEATSTONE, Sir Charles (1802-1875) WHEELER, David John (1927-) WHEELER, John Archibald (1911-) WHIPPLE, Fred Lawrence (1906-) WHIPPLE, George Hoyt (1878-1976) WHITEHEAD, ALFRED North (1861-1947) WHITNEY, JOSIAH DWIGHT (1819-1896) WHITTAKER, Sir Admund Taylor (1873-1956) WHITTIINGTON, Harry Blockmore (1916-) WHITTLE, Sir Frank (1907-) WIELAND, Heinrich Otto (1877-1957) WICEN, Willhem Carl Werner Otto Fritz Franz (1864-1928) WIENER, Norbert (1894-1964) WIESEL, Torspen Nils (1924-) WIGGLESWORTH, Sir Vincent Biran (1899-) WIGNER, Eugene Saul (1902-) WILCKE, Johan Carl (1732-1796) WILKWES , Maurice Vincent (1913-) WILKINS, Maurice Hugh Frederick (1916-) WILKINSON, Sir Geoffrey (1921-) WILKINSON, James Hardy (1919-1986) WILNIAMS, Sir Alwyn (1921-) WILNIAMS, Sir Frederic Calland (1911-1977) WILLIAMS, Robert Joseth Paton (1926-) WILLIAMSON, Alexander, William(1824-1904) WILLIAMSON, William Crawford (1816-1895) WILLIS , John Christopher, (1868-1958) WILLIS, Thomas (1621-1673) WILLSTATTER, Richard (1872-1942) WILSON, Charles Thomosan Rees (1869-1959) WILSON, Edmund Beecher (1856-1939) WILSON, Edward Osborne (1929-) WILSON, Kenneth Geddes (1936) WILSON, Robert Woodro(1936-) WILSON, (John ) Tuzo (1908-1993) WINDAUS, Adolf (1876-1959) WINKLER, Clemens Alexander (1838-1904) WINSTEIN , Saul (1912-1969) WISLICENUS, Johannes Adolf (1835-1902) WITHERING, William (1741-1799) WITTIG, Georg (1897-1987) WOHLER, Friedrich(1800-1882) WOLF, Emil (1922-) WOLF, Maximalian Franz Joseph Cornelius (1863-1932) WOLLASTON, William Hyde (1766-1828) WOOD, Robert Williams (1868-1955) WOODS, Donald Devereux (1912-1964) WOODWARD, Sir Arthur Smith (1864-1944) WOODWARD, Robert Burns (1917-1979) WOOLLEY, Sir Richard van der Riet (1906-1986) WRIGHT, Sir Almroth Edward (1861-1947) WRIGHT, Orville (1871-1948) WRIGHT, Sewall (1889-1988) WRIGHT, Thomas(1711-1786) WROBLEWSKI, Zygmunt Florenty von (1845-1888) WU, Chien-Shiung (1912-) WYOCKOFF, Ralph Walter Graystone (1897-) WYNNE-EDWARDS, Vero Copner (1906-) XENOCRATES (c.395-314 bc) YALOW, Rosalyn, nee Sussman (1921-) YANG, Chen Ning (1922-) YANOFSKY, Charles (1925-) YERSIN, Alexander Emile John (1863-1943) YODER, Hatten Schuyler Jr (1921-) YONGE, Charles Maurice (1899-1986) YOUNG, John Zachary (1907-) YOUNG, Thomas (1773-1829) YUKAWA, Hideki, Originally Hideki Ogawi (1907-1981) ZEEMAN, Pieter (1865-1943) ZEL'DOVICH, Yokov Borisovich (1914-) ZONO OF ELEA (c.430-c.490 BC) ZERMELO, Ernst Friedrich Fredinand (1871-1953) ZERNIKE, Frits (1888-1966) ZINDER, Norton David (1928-) ZINSSER, Hans (1878-1940) ZITTEL, Karl Alfred von (1839-1904) ZOHARY, Michael (1898-1983) ZONDEK, Bernhard (1891-1967) ZOTTERMAN, Yvnge (1898-1982) ZSIGMONDY, Richard Adolf (1865-1929) ZUCKERMAN, Solly, Baron (1904-1993) ZUSE, Konrad (1910-) ZWEIG, George (1937-) ZWICKY, Fritz (1898-1974) ZWORYKIN, Vladimir Kosma (1889-1982) Retrieved from "http://en.wikibooks.org/wiki/Top_1000_Scientists_from_the_beginning_of_time_to_2000AD" f9rg5l487crcjs4mdlituhn3gsp8bgx 14915 14914 2009-02-04T06:20:47Z He!ko 3646 template for stored collections 14915 wikitext text/x-wiki {| cellspacing="8" cellpadding="0" class="{{{class|}}}" style="font-size: 100%; border-style: solid; margin-top: 2px; margin-bottom: 2px; position:relative;{{{1|}}}" | rowspan=2 |[[Image:Book_icoline.svg|100px]] | style="width: 100%; font-size: 190%;" | This is a stored collection<sup style="font-size:50%;">[[Help:Collections|Help]]</sup> |- | style="font-size: 120%;" | [ [{{fullurl:Special:Collection/load_collection/|colltitle={{FULLPAGENAMEE}}}} load collection] ] [ [{{fullurl:Special:Collection/render_collection/|colltitle={{FULLPAGENAMEE}}|writer=rl}} PDF] ] |} <noinclude> This template is automatically included at the start of every new stored collection </noinclude> 1wkibdn8bwhwd6dpsy34vzbuuol1o35 14916 14915 2009-02-22T22:16:09Z Erik Baas 2757 +nl: 14916 wikitext text/x-wiki {| cellspacing="8" cellpadding="0" class="{{{class|}}}" style="font-size: 100%; border-style: solid; margin-top: 2px; margin-bottom: 2px; position:relative;{{{1|}}}" | rowspan=2 |[[Image:Book_icoline.svg|100px]] | style="width: 100%; font-size: 190%;" | This is a stored collection<sup style="font-size:50%;">[[Help:Collections|Help]]</sup> |- | style="font-size: 120%;" | [ [{{fullurl:Special:Collection/load_collection/|colltitle={{FULLPAGENAMEE}}}} load collection] ] [ [{{fullurl:Special:Collection/render_collection/|colltitle={{FULLPAGENAMEE}}|writer=rl}} PDF] ] |} <noinclude> This template is automatically included at the start of every new stored collection [[nl:Sjabloon:Opgeslagen boek]] </noinclude> sqnz5hk1minb9xg8zukgm8ih2wghzr1 14917 14916 2009-02-23T00:53:48Z Erik Baas 2757 +de: 14917 wikitext text/x-wiki {| cellspacing="8" cellpadding="0" class="{{{class|}}}" style="font-size: 100%; border-style: solid; margin-top: 2px; margin-bottom: 2px; position:relative;{{{1|}}}" | rowspan=2 |[[Image:Book_icoline.svg|100px]] | style="width: 100%; font-size: 190%;" | This is a stored collection<sup style="font-size:50%;">[[Help:Collections|Help]]</sup> |- | style="font-size: 120%;" | [ [{{fullurl:Special:Collection/load_collection/|colltitle={{FULLPAGENAMEE}}}} load collection] ] [ [{{fullurl:Special:Collection/render_collection/|colltitle={{FULLPAGENAMEE}}|writer=rl}} PDF] ] |} <noinclude> This template is automatically included at the start of every new stored collection [[de:Template:Gespeicherte Sammlung]] [[nl:Sjabloon:Opgeslagen boek]] </noinclude> qs1d2s723j9kghunenqb3nn0en8ffgt 14918 14917 2009-03-03T01:14:40Z Erik Baas 2757 layout / fix HTML 14918 wikitext text/x-wiki {| cellspacing="8" cellpadding="0" class="{{{class|}}}" style="font-size: 100%; border-style: solid; margin-top: 2px; margin-bottom: 2px; position:relative;{{{1|}}}" | rowspan="2" |[[Image:Book_icoline.svg|100px]] | style="width: 100%; font-size: 190%;" | This is a stored collection |- | style="font-size: 120%;" | [ [{{fullurl:Special:Collection/load_collection/|colltitle={{FULLPAGENAMEE}}}} Load collection] ] [ [{{fullurl:Special:Collection/render_collection/|colltitle={{FULLPAGENAMEE}}|writer=rl}} PDF] ] [ [[Help:Collections|Help]] ] |} <noinclude> This template is automatically included at the start of every new stored collection [[de:Template:Gespeicherte Sammlung]] [[nl:Sjabloon:Opgeslagen boek]] </noinclude> oozorj5j5kphqakoxn6xov7v8o6ua4k 14919 14918 2009-04-16T20:20:14Z MonteChristof 715 14919 wikitext text/x-wiki {| cellspacing="8" cellpadding="0" class="{{{class|}}}" style="font-size: 100%; border-style: solid; margin-top: 2px; margin-bottom: 2px; position:relative;{{{1|}}}" | rowspan="2" |[[Image:Book_icoline.svg|100px]] | style="width: 100%; font-size: 190%;" | This is a stored collection |- | style="font-size: 120%;" | [ [{{fullurl:Special:Collection/load_collection/|colltitle={{FULLPAGENAMEE}}}} Load collection] ] [ [{{fullurl:Special:Collection/render_collection/|colltitle={{FULLPAGENAMEE}}|writer=rl}} PDF] ] [ [[Help:Collections|Help]] ] |} <noinclude> This template is automatically included at the start of every new stored collection [[de:Template:Gespeicherte Sammlung]] [[nl:Sjabloon:Opgeslagen boek]] [[pl:Szablon:Zapisane książki]] </noinclude> ejtzts01dujqf58jje24xxyldkxrjqe 14920 14919 2009-04-29T00:56:21Z Mattwj2002 3647 14920 wikitext text/x-wiki {| cellspacing="8" cellpadding="0" class="{{{class|}}}" style="font-size: 100%; border-style: solid; margin-top: 2px; margin-bottom: 2px; position:relative;{{{1|}}}" | rowspan="2" |[[Image:Book_icoline.svg|100px]] | style="width: 100%; font-size: 190%;" | This is a stored collection |- | style="font-size: 120%;" | [ [{{fullurl:Special:Collection/load_collection/|colltitle={{FULLPAGENAMEE}}}} Load collection] ] [ [{{fullurl:Special:Collection/render_collection/|colltitle={{FULLPAGENAMEE}}|writer=rl}} PDF] ] [ [[Help:Collections|Help]] ]&nbsp;&nbsp;[ [{{fullurl:Special:Book/order_collection/|colltitle={{FULLPAGENAMEE}}|partner=pediapress}}</span> order as printed book]<!-- include this if external links are not marked by an icon [[Image:Icon_External_Link.png]]--> ] |} <noinclude> This template is automatically included at the start of every new stored collection [[de:Template:Gespeicherte Sammlung]] [[nl:Sjabloon:Opgeslagen boek]] [[pl:Szablon:Zapisane książki]] </noinclude> qr384olxoiaurvhnup2c5gg1bksfv19 14921 14920 2009-04-29T01:03:16Z Mattwj2002 3647 14921 wikitext text/x-wiki {| cellspacing="8" cellpadding="0" class="{{{class|}}}" style="font-size: 100%; border-style: solid; margin-top: 2px; margin-bottom: 2px; position:relative;{{{1|}}}" | rowspan="2" |[[Image:Book_icoline.svg|100px]] | style="width: 100%; font-size: 190%;" | This is a Wikibooks collection |- | style="font-size: 120%;" | [ [{{fullurl:Special:Collection/load_collection/|colltitle={{FULLPAGENAMEE}}}} Load collection] ] [ [{{fullurl:Special:Collection/render_collection/|colltitle={{FULLPAGENAMEE}}|writer=rl}} PDF] ] [ [[Help:Collections|Help]] ]&nbsp;&nbsp;[ [{{fullurl:Special:Book/order_collection/|colltitle={{FULLPAGENAMEE}}|partner=pediapress}}</span> order as printed book]<!-- include this if external links are not marked by an icon [[Image:Icon_External_Link.png]]--> ] |} <noinclude> This template is automatically included at the start of every new stored collection [[de:Template:Gespeicherte Sammlung]] [[nl:Sjabloon:Opgeslagen boek]] [[pl:Szablon:Zapisane książki]] </noinclude> t7dra2p14neqdc7qhpwk7ht3enpkzhn 14922 14921 2009-04-29T01:03:53Z Mattwj2002 3647 14922 wikitext text/x-wiki {| cellspacing="8" cellpadding="0" class="{{{class|}}}" style="font-size: 100%; border-style: solid; margin-top: 2px; margin-bottom: 2px; position:relative;{{{1|}}}" | rowspan="2" |[[Image:Book_icoline.svg|100px]] | style="width: 100%; font-size: 190%;" | This is a Wikibooks collection |- | style="font-size: 120%;" | [ [{{fullurl:Special:Collection/load_collection/|colltitle={{FULLPAGENAMEE}}}} Load collection] ] [ [{{fullurl:Special:Collection/render_collection/|colltitle={{FULLPAGENAMEE}}|writer=rl}} PDF] ] [ [{{fullurl:Special:Book/order_collection/|colltitle={{FULLPAGENAMEE}}|partner=pediapress}}</span> order as printed book]<!-- include this if external links are not marked by an icon [[Image:Icon_External_Link.png]]--> ] [ [[Help:Collections|Help]] ] |} <noinclude> This template is automatically included at the start of every new stored collection [[de:Template:Gespeicherte Sammlung]] [[nl:Sjabloon:Opgeslagen boek]] [[pl:Szablon:Zapisane książki]] </noinclude> 3dqfj2heu4wedbv4j4aw63sprzx856n 14923 14922 2009-04-29T01:07:42Z Mike.lifeguard 117 slightly less bad 14923 wikitext text/x-wiki {{mbox|image=Book_icoline.svg |'''This is a Wikibooks collection''' [ [{{fullurl:Special:Collection/load_collection/|colltitle={{FULLPAGENAMEE}}}} Load collection] ] [ [{{fullurl:Special:Collection/render_collection/|colltitle={{FULLPAGENAMEE}}|writer=rl}} PDF] ] [ [{{fullurl:Special:Book/order_collection/|colltitle={{FULLPAGENAMEE}}|partner=pediapress}}</span> order as printed book]<!-- include this if external links are not marked by an icon [[Image:Icon_External_Link.png]]--> ] [ [[Help:Collections|Help]] ] }} <noinclude> This template is automatically included at the start of every new stored collection [[de:Template:Gespeicherte Sammlung]] [[nl:Sjabloon:Opgeslagen boek]] [[pl:Szablon:Zapisane książki]] </noinclude> 61bft73jv6q3db0rfc37h736i11mnyh 14924 14923 2009-10-28T10:39:35Z He7d3r 2069 wrong syntax? 14924 wikitext text/x-wiki {{mbox|image=Book_icoline.svg |'''This is a Wikibooks collection''' [ [{{fullurl:Special:Collection/load_collection/|colltitle={{FULLPAGENAMEE}}}} Load collection] ] [ [{{fullurl:Special:Collection/render_collection/|colltitle={{FULLPAGENAMEE}}&writer=rl}} PDF] ] [ [{{fullurl:Special:Book/order_collection/|colltitle={{FULLPAGENAMEE}}|partner=pediapress}}</span> order as printed book]<!-- include this if external links are not marked by an icon [[Image:Icon_External_Link.png]]--> ] [ [[Help:Collections|Help]] ] }} <noinclude> This template is automatically included at the start of every new stored collection [[de:Template:Gespeicherte Sammlung]] [[nl:Sjabloon:Opgeslagen boek]] [[pl:Szablon:Zapisane książki]] </noinclude> gggxgw40vqp1yh7kpo1hcgkucvvnl4j 14925 14924 2009-11-20T14:47:32Z Adrignola 502 +category 14925 wikitext text/x-wiki {{mbox|image=Book_icoline.svg |'''This is a Wikibooks collection''' [ [{{fullurl:Special:Collection/load_collection/|colltitle={{FULLPAGENAMEE}}}} Load collection] ] [ [{{fullurl:Special:Collection/render_collection/|colltitle={{FULLPAGENAMEE}}&writer=rl}} PDF] ] [ [{{fullurl:Special:Book/order_collection/|colltitle={{FULLPAGENAMEE}}|partner=pediapress}}</span> order as printed book]<!-- include this if external links are not marked by an icon [[Image:Icon_External_Link.png]]--> ] [ [[Help:Collections|Help]] ] }} <noinclude> This template is automatically included at the start of every new stored collection [[Category:Information templates|{{PAGENAME}}]] [[de:Template:Gespeicherte Sammlung]] [[nl:Sjabloon:Opgeslagen boek]] [[pl:Szablon:Zapisane książki]] </noinclude> lb9e2jk7qbbvn22bja8yn18sfhm2rok 14926 14925 2009-11-20T14:47:57Z Adrignola 502 Protected "[[Template:Saved book]]": High-impact page ([edit=autoconfirmed] (indefinite) [move=autoconfirmed] (indefinite)) 14925 wikitext text/x-wiki {{mbox|image=Book_icoline.svg |'''This is a Wikibooks collection''' [ [{{fullurl:Special:Collection/load_collection/|colltitle={{FULLPAGENAMEE}}}} Load collection] ] [ [{{fullurl:Special:Collection/render_collection/|colltitle={{FULLPAGENAMEE}}&writer=rl}} PDF] ] [ [{{fullurl:Special:Book/order_collection/|colltitle={{FULLPAGENAMEE}}|partner=pediapress}}</span> order as printed book]<!-- include this if external links are not marked by an icon [[Image:Icon_External_Link.png]]--> ] [ [[Help:Collections|Help]] ] }} <noinclude> This template is automatically included at the start of every new stored collection [[Category:Information templates|{{PAGENAME}}]] [[de:Template:Gespeicherte Sammlung]] [[nl:Sjabloon:Opgeslagen boek]] [[pl:Szablon:Zapisane książki]] </noinclude> lb9e2jk7qbbvn22bja8yn18sfhm2rok 14927 14926 2010-04-24T17:29:52Z Adrignola 502 msg -> text parameter 14927 wikitext text/x-wiki {{ombox|image=[[File:Book_icoline.svg|40px]]|text='''This is a Wikibooks collection'''<br /> [ [{{fullurl:Special:Collection/load_collection/|colltitle={{FULLPAGENAMEE}}}} Load collection] ] [ [{{fullurl:Special:Collection/render_collection/|colltitle={{FULLPAGENAMEE}}&writer=rl}} PDF] ] [ [{{fullurl:Special:Book/order_collection/|colltitle={{FULLPAGENAMEE}}|partner=pediapress}}</span> order as printed book]<!-- include this if external links are not marked by an icon [[Image:Icon_External_Link.png]]--> ] [ [[Help:Collections|Help]] ] }} <noinclude> This template is automatically included at the start of every new stored collection [[Category:Information templates|{{PAGENAME}}]] [[de:Template:Gespeicherte Sammlung]] [[nl:Sjabloon:Opgeslagen boek]] [[pl:Szablon:Zapisane książki]] </noinclude> aqh498vcgrmdqubtxx6s6lll36d0yxx 14928 14927 2010-07-04T06:30:41Z Hagindaz 3648 spacing 14928 wikitext text/x-wiki {{ombox|image=[[File:Book_icoline.svg|40px]]|text='''This is a Wikibooks collection'''<br /> [ [{{fullurl:Special:Collection/load_collection/|colltitle={{FULLPAGENAMEE}}}} Load collection] ] [ [{{fullurl:Special:Collection/render_collection/|colltitle={{FULLPAGENAMEE}}&writer=rl}} PDF] ] [ [{{fullurl:Special:Book/order_collection/|colltitle={{FULLPAGENAMEE}}|partner=pediapress}}</span> order as printed book]<!-- include this if external links are not marked by an icon [[Image:Icon_External_Link.png]]--> ] [ [[Help:Collections|Help]] ] }}<noinclude> This template is automatically included at the start of every new stored collection [[Category:Information templates|{{PAGENAME}}]] [[de:Template:Gespeicherte Sammlung]] [[nl:Sjabloon:Opgeslagen boek]] [[pl:Szablon:Zapisane książki]] </noinclude> eiyk0cn0jxoru58lkfawtjykg1y8lvo 14929 14928 2011-02-24T14:05:05Z Adrignola 502 update 14929 wikitext text/x-wiki <table class="ombox" cellpadding="5%"> <tr> <td rowspan="3"> {|style="background:{{{cover-color|Lavender}}}; color:<!-- -->{{#switch:{{lc:{{{cover-color|}}}}} |black=&#32;{{{text-color|white}}} |#default=&#32;{{{text-color|black}}} }}; text-align:left; border:1px solid darkgrey; width: 130px;" |- | style="background:gray; height: 3px;" | |- | style="height: 30px; text-align: right; vertical-align: top;" |<small>{{{title|Title}}}<br /><i>{{{subtitle|Subtitle}}}</i></small> |- | style="background:gray;" | |- | colspan="5" style="height: 135px; text-align: center; vertical-align: middle;" |[[File:{{{cover-image|Wikipedia-books-missing-cover.svg}}}|125px|<!-- -->{{#switch:{{{cover-image|Wikipedia-books-missing-cover.svg}}} |Wikipedia-books-missing-cover.svg=Please select an appropriate cover image for this collection. See "Template:Saved book" for instructions." |#default= }}]] |} </td> <td><!-- -->{{#switch:{{NAMESPACE}} |{{ns:2}}|{{ns:3}}=This is a user-generated '''collection''' of Wikibooks pages that can be easily saved, rendered electronically, and ordered as a printed book. If you are the creator of this collection and need help, see '''[[Help:Collections]]'''. |{{ns:4}}|{{ns:5}}<noinclude>|{{ns:10}}</noinclude>=This is a '''collection''' of the pages in a Wikibooks book that can be easily saved, rendered electronically, and ordered as a printed book. For information and help on Wikibooks collections, see '''[[Help:Collections]]'''. [[Category:Collections|{{{sort_as|{{PAGENAME}}}}}]] |#default=This '''collection''' is not located in the correct namespace. Please move it to either [[Wikibooks:Collections/{{SUBPAGENAME}}]] or [[User:Username/Collections/{{SUBPAGENAME}}]]. For information and help on collections, see '''[[Help:Collections]]'''. }} </td> </tr> <tr style="vertical-align:center; text-align:center;"> <td><!-- -->{{nowrap|1=<!-- --><big><span class="plainlinks" title="Download a PDF version of this collection.">[ [{{fullurl:Special:Collection|bookcmd=render_collection&amp;colltitle={{FULLPAGENAMEE}}&amp;writer=rl}} Download PDF{{#ifexpr: {{{seiten|0}}}>0|&nbsp;({{{pages}}} pages)}}] ]&#32;&#32;</span></big><!-- --><big><span class="plainlinks" title="Open this collection using Wikibooks' collection editing tool. The Collection Creator allows you to easily add or remove pages, create or remove chapters, download and print PDF and ODT versions, and more.">[ [{{fullurl:Special:Book|bookcmd=load_collection&amp;colltitle={{FULLPAGENAMEE}}}} Open in Collection Creator] ]&#32;&#32;</span></big><!-- --><big><span class="plainlinks" title="Preview this collection with PediaPress, choose a cover image, pick a color for the cover, and more. The printed book has professional-quality layout and printing.">[ [{{fullurl:Special:Book|bookcmd=order_collection&amp;colltitle={{FULLPAGENAMEE}}&amp;partner=pediapress}} Order Printed Book] ]&#32;&#32;</span></big>}} </td> </tr> <tr style="vertical-align:bottom;"> <td style="text-align:right;"><small>[ [[Help:Collections/Printed books|About]] ] [ [[Help:Collections/Frequently Asked Questions|FAQ]] ] [ [[Help:Collections/Feedback|Feedback]] ] [ [[Help:Collections|Help]] ] [ <span class="plainlinks" title="See the recent edits made to the pages of this collection.">[{{fullurl:Special:RecentChangesLinked/{{FULLPAGENAMEE}}|&days=30&namespace=0&tagfilter=&hideminor=&hidebots Recent Changes}}] ]</span></small> </td> </td> </table> {{#if:{{{description|}}}{{{editor|}}} |{{mbox |text={{#if:{{{description|}}} |{{{description|}}}<p> }}As edited by {{#switch:{{NAMESPACE}} |{{ns:4}}=Wikibookians |{{ns:2}}={{{editor|[[User:{{#titleparts:{{PAGENAME}}|1}}]]}}} }} }} }}<noinclude> {{documentation}} </noinclude> inydvr5vdo5cubu24l02icmh8skgx04 14930 14929 2011-02-24T15:36:09Z Adrignola 502 includeonlys 14930 wikitext text/x-wiki <table class="ombox" cellpadding="5%"> <tr> <td rowspan="3"> {|style="background:{{{cover-color|Lavender}}}; color:<!-- -->{{#switch:{{lc:{{{cover-color|}}}}} |black=&#32;{{{text-color|white}}} |#default=&#32;{{{text-color|black}}} }}; text-align:left; border:1px solid darkgrey; width: 130px;" |- | style="background:gray; height: 3px;" | |- | style="height: 30px; text-align: right; vertical-align: top;" |<small>{{{title|Title}}}<br /><i>{{{subtitle|Subtitle}}}</i></small> |- | style="background:gray;" | |- | colspan="5" style="height: 135px; text-align: center; vertical-align: middle;" |[[File:{{{cover-image|Wikipedia-books-missing-cover.svg}}}|125px|<!-- -->{{#switch:{{{cover-image|Wikipedia-books-missing-cover.svg}}} |Wikipedia-books-missing-cover.svg=Please select an appropriate cover image for this collection. See "Template:Saved book" for instructions." |#default= }}]] |} </td> <td><!-- -->{{#switch:{{NAMESPACE}} |{{ns:2}}|{{ns:3}}=This is a user-generated '''collection''' of Wikibooks pages that can be easily saved, rendered electronically, and ordered as a printed book. If you are the creator of this collection and need help, see '''[[Help:Collections]]'''. |{{ns:4}}|{{ns:5}}<noinclude>|{{ns:10}}</noinclude>=This is a '''collection''' of the pages in a Wikibooks book that can be easily saved, rendered electronically, and ordered as a printed book. For information and help on Wikibooks collections, see '''[[Help:Collections]]'''.<includeonly>[[Category:Collections|{{{sort_as|{{PAGENAME}}}}}]]</includeonly> |#default=This '''collection''' is not located in the correct namespace. Please move it to either [[Wikibooks:Collections/{{SUBPAGENAME}}]] or [[User:Username/Collections/{{SUBPAGENAME}}]]. For information and help on collections, see '''[[Help:Collections]]'''. }} </td> </tr> <tr style="vertical-align:center; text-align:center;"> <td><!-- -->{{nowrap|1=<!-- --><big><span class="plainlinks" title="Download a PDF version of this collection.">[ [{{fullurl:Special:Collection|bookcmd=render_collection&amp;colltitle={{FULLPAGENAMEE}}&amp;writer=rl}} Download PDF{{#ifexpr: {{{seiten|0}}}>0|&nbsp;({{{pages}}} pages)}}] ]&#32;&#32;</span></big><!-- --><big><span class="plainlinks" title="Open this collection using Wikibooks' collection editing tool. The Collection Creator allows you to easily add or remove pages, create or remove chapters, download and print PDF and ODT versions, and more.">[ [{{fullurl:Special:Book|bookcmd=load_collection&amp;colltitle={{FULLPAGENAMEE}}}} Open in Collection Creator] ]&#32;&#32;</span></big><!-- --><big><span class="plainlinks" title="Preview this collection with PediaPress, choose a cover image, pick a color for the cover, and more. The printed book has professional-quality layout and printing.">[ [{{fullurl:Special:Book|bookcmd=order_collection&amp;colltitle={{FULLPAGENAMEE}}&amp;partner=pediapress}} Order Printed Book] ]&#32;&#32;</span></big>}} </td> </tr> <tr style="vertical-align:bottom;"> <td style="text-align:right;"><small>[ [[Help:Collections/Printed books|About]] ] [ [[Help:Collections/Frequently Asked Questions|FAQ]] ] [ [[Help:Collections/Feedback|Feedback]] ] [ [[Help:Collections|Help]] ] [ <span class="plainlinks" title="See the recent edits made to the pages of this collection.">[{{fullurl:Special:RecentChangesLinked/{{FULLPAGENAMEE}}|&days=30&namespace=0&tagfilter=&hideminor=&hidebots Recent Changes}}] ]</span></small> </td> </td> </table> {{#if:{{{description|}}}{{{editor|}}} |{{mbox |text={{#if:{{{description|}}} |{{{description|}}}<p> }}As edited by {{#switch:{{NAMESPACE}} |{{ns:4}}=Wikibookians |{{ns:2}}={{{editor|[[User:{{#titleparts:{{PAGENAME}}|1}}]]}}} }} }} }}<noinclude> {{documentation}} </noinclude> 0g05cnuf4l5cb6mhgy40fo3e746u4cl 14931 14930 2014-09-29T20:42:15Z Cscott 3418 Switch default PDF renderer. (See https://gerrit.wikimedia.org/r/163608 ). 14931 wikitext text/x-wiki <table class="ombox" cellpadding="5%"> <tr> <td rowspan="3"> {|style="background:{{{cover-color|Lavender}}}; color:<!-- -->{{#switch:{{lc:{{{cover-color|}}}}} |black=&#32;{{{text-color|white}}} |#default=&#32;{{{text-color|black}}} }}; text-align:left; border:1px solid darkgrey; width: 130px;" |- | style="background:gray; height: 3px;" | |- | style="height: 30px; text-align: right; vertical-align: top;" |<small>{{{title|Title}}}<br /><i>{{{subtitle|Subtitle}}}</i></small> |- | style="background:gray;" | |- | colspan="5" style="height: 135px; text-align: center; vertical-align: middle;" |[[File:{{{cover-image|Wikipedia-books-missing-cover.svg}}}|125px|<!-- -->{{#switch:{{{cover-image|Wikipedia-books-missing-cover.svg}}} |Wikipedia-books-missing-cover.svg=Please select an appropriate cover image for this collection. See "Template:Saved book" for instructions." |#default= }}]] |} </td> <td><!-- -->{{#switch:{{NAMESPACE}} |{{ns:2}}|{{ns:3}}=This is a user-generated '''collection''' of Wikibooks pages that can be easily saved, rendered electronically, and ordered as a printed book. If you are the creator of this collection and need help, see '''[[Help:Collections]]'''. |{{ns:4}}|{{ns:5}}<noinclude>|{{ns:10}}</noinclude>=This is a '''collection''' of the pages in a Wikibooks book that can be easily saved, rendered electronically, and ordered as a printed book. For information and help on Wikibooks collections, see '''[[Help:Collections]]'''.<includeonly>[[Category:Collections|{{{sort_as|{{PAGENAME}}}}}]]</includeonly> |#default=This '''collection''' is not located in the correct namespace. Please move it to either [[Wikibooks:Collections/{{SUBPAGENAME}}]] or [[User:Username/Collections/{{SUBPAGENAME}}]]. For information and help on collections, see '''[[Help:Collections]]'''. }} </td> </tr> <tr style="vertical-align:center; text-align:center;"> <td><!-- -->{{nowrap|1=<!-- --><big><span class="plainlinks" title="Download a PDF version of this collection.">[ [{{fullurl:Special:Collection|bookcmd=render_collection&amp;colltitle={{FULLPAGENAMEE}}&amp;writer=rdf2latex}} Download PDF{{#ifexpr: {{{seiten|0}}}>0|&nbsp;({{{pages}}} pages)}}] ]&#32;&#32;</span></big><!-- --><big><span class="plainlinks" title="Open this collection using Wikibooks' collection editing tool. The Collection Creator allows you to easily add or remove pages, create or remove chapters, download and print PDF and ODT versions, and more.">[ [{{fullurl:Special:Book|bookcmd=load_collection&amp;colltitle={{FULLPAGENAMEE}}}} Open in Collection Creator] ]&#32;&#32;</span></big><!-- --><big><span class="plainlinks" title="Preview this collection with PediaPress, choose a cover image, pick a color for the cover, and more. The printed book has professional-quality layout and printing.">[ [{{fullurl:Special:Book|bookcmd=order_collection&amp;colltitle={{FULLPAGENAMEE}}&amp;partner=pediapress}} Order Printed Book] ]&#32;&#32;</span></big>}} </td> </tr> <tr style="vertical-align:bottom;"> <td style="text-align:right;"><small>[ [[Help:Collections/Printed books|About]] ] [ [[Help:Collections/Frequently Asked Questions|FAQ]] ] [ [[Help:Collections/Feedback|Feedback]] ] [ [[Help:Collections|Help]] ] [ <span class="plainlinks" title="See the recent edits made to the pages of this collection.">[{{fullurl:Special:RecentChangesLinked/{{FULLPAGENAMEE}}|&days=30&namespace=0&tagfilter=&hideminor=&hidebots Recent Changes}}] ]</span></small> </td> </td> </table> {{#if:{{{description|}}}{{{editor|}}} |{{mbox |text={{#if:{{{description|}}} |{{{description|}}}<p> }}As edited by {{#switch:{{NAMESPACE}} |{{ns:4}}=Wikibookians |{{ns:2}}={{{editor|[[User:{{#titleparts:{{PAGENAME}}|1}}]]}}} }} }} }}<noinclude> {{documentation}} </noinclude> hfoekg1o5z99sb1wkt7adnpsj6b9ugy 14932 14931 2015-02-05T18:31:48Z He7d3r 2069 -invalid HTML code (http://validator.w3.org/check?uri=http%3A%2F%2Fen.wikibooks.org%2Fw%2Findex.php%3Foldid%3D2706032) 14932 wikitext text/x-wiki <table class="ombox"> <tr> <td rowspan="3" style="padding: 5px;"> {|style="background:{{{cover-color|Lavender}}}; color:<!-- -->{{#switch:{{lc:{{{cover-color|}}}}} |black=&#32;{{{text-color|white}}} |#default=&#32;{{{text-color|black}}} }}; text-align:left; border:1px solid darkgrey; width: 130px;" |- | style="background:gray; height: 3px;" | |- | style="height: 30px; text-align: right; vertical-align: top;" |<small>{{{title|Title}}}<br /><i>{{{subtitle|Subtitle}}}</i></small> |- | style="background:gray;" | |- | colspan="5" style="height: 135px; text-align: center; vertical-align: middle;" |[[File:{{{cover-image|Wikipedia-books-missing-cover.svg}}}|125px|<!-- -->{{#switch:{{{cover-image|Wikipedia-books-missing-cover.svg}}} |Wikipedia-books-missing-cover.svg=Please select an appropriate cover image for this collection. See "Template:Saved book" for instructions." |#default= }}]] |} </td> <td style="padding: 5px;"><!-- -->{{#switch:{{NAMESPACE}} |{{ns:2}}|{{ns:3}}=This is a user-generated '''collection''' of Wikibooks pages that can be easily saved, rendered electronically, and ordered as a printed book. If you are the creator of this collection and need help, see '''[[Help:Collections]]'''. |{{ns:4}}|{{ns:5}}<noinclude>|{{ns:10}}</noinclude>=This is a '''collection''' of the pages in a Wikibooks book that can be easily saved, rendered electronically, and ordered as a printed book. For information and help on Wikibooks collections, see '''[[Help:Collections]]'''.<includeonly>[[Category:Collections|{{{sort_as|{{PAGENAME}}}}}]]</includeonly> |#default=This '''collection''' is not located in the correct namespace. Please move it to either [[Wikibooks:Collections/{{SUBPAGENAME}}]] or [[User:Username/Collections/{{SUBPAGENAME}}]]. For information and help on collections, see '''[[Help:Collections]]'''. }} </td> </tr> <tr style="vertical-align:center; text-align:center;"> <td style="padding: 5px;"><!-- -->{{nowrap|1=<!-- --><div style="font-size: larger;"><span class="plainlinks" title="Download a PDF version of this collection.">[ [{{fullurl:Special:Collection|bookcmd=render_collection&amp;colltitle={{FULLPAGENAMEE}}&amp;writer=rdf2latex}} Download PDF{{#ifexpr: {{{seiten|0}}}>0|&nbsp;({{{pages}}} pages)}}] ]&#32;&#32;</span><!-- --><span class="plainlinks" title="Open this collection using Wikibooks' collection editing tool. The Collection Creator allows you to easily add or remove pages, create or remove chapters, download and print PDF and ODT versions, and more.">[ [{{fullurl:Special:Book|bookcmd=load_collection&amp;colltitle={{FULLPAGENAMEE}}}} Open in Collection Creator] ]&#32;&#32;</span><!-- --><span class="plainlinks" title="Preview this collection with PediaPress, choose a cover image, pick a color for the cover, and more. The printed book has professional-quality layout and printing.">[ [{{fullurl:Special:Book|bookcmd=order_collection&amp;colltitle={{FULLPAGENAMEE}}&amp;partner=pediapress}} Order Printed Book] ]&#32;&#32;</span></div>}} </td> </tr> <tr style="vertical-align:bottom;"> <td style="text-align:right; padding: 5px;"><small>[ [[Help:Collections/Printed books|About]] ] [ [[Help:Collections/Frequently Asked Questions|FAQ]] ] [ [[Help:Collections/Feedback|Feedback]] ] [ [[Help:Collections|Help]] ] [ <span class="plainlinks" title="See the recent edits made to the pages of this collection.">[{{fullurl:Special:RecentChangesLinked/{{FULLPAGENAMEE}}|&days=30&namespace=0&tagfilter=&hideminor=&hidebots Recent Changes}}] ]</span></small> </td> </td> </table> {{#if:{{{description|}}}{{{editor|}}} |{{mbox |text={{#if:{{{description|}}} |{{{description|}}}<p> }}As edited by {{#switch:{{NAMESPACE}} |{{ns:4}}=Wikibookians |{{ns:2}}={{{editor|[[User:{{#titleparts:{{PAGENAME}}|1}}]]}}} }} }} }}<noinclude> {{documentation}} </noinclude> taow1phkjdyjh6y7klhdlzdk5odbduc 14933 14932 2020-04-16T08:17:47Z ShakespeareFan00 2900 Nowrap is SPAN based, so a DIV can't be given as a paramater to it. 14933 wikitext text/x-wiki <table class="ombox"> <tr> <td rowspan="3" style="padding: 5px;"> {|style="background:{{{cover-color|Lavender}}}; color:<!-- -->{{#switch:{{lc:{{{cover-color|}}}}} |black=&#32;{{{text-color|white}}} |#default=&#32;{{{text-color|black}}} }}; text-align:left; border:1px solid darkgrey; width: 130px;" |- | style="background:gray; height: 3px;" | |- | style="height: 30px; text-align: right; vertical-align: top;" |<small>{{{title|Title}}}<br /><i>{{{subtitle|Subtitle}}}</i></small> |- | style="background:gray;" | |- | colspan="5" style="height: 135px; text-align: center; vertical-align: middle;" |[[File:{{{cover-image|Wikipedia-books-missing-cover.svg}}}|125px|<!-- -->{{#switch:{{{cover-image|Wikipedia-books-missing-cover.svg}}} |Wikipedia-books-missing-cover.svg=Please select an appropriate cover image for this collection. See "Template:Saved book" for instructions." |#default= }}]] |} </td> <td style="padding: 5px;"><!-- -->{{#switch:{{NAMESPACE}} |{{ns:2}}|{{ns:3}}=This is a user-generated '''collection''' of Wikibooks pages that can be easily saved, rendered electronically, and ordered as a printed book. If you are the creator of this collection and need help, see '''[[Help:Collections]]'''. |{{ns:4}}|{{ns:5}}<noinclude>|{{ns:10}}</noinclude>=This is a '''collection''' of the pages in a Wikibooks book that can be easily saved, rendered electronically, and ordered as a printed book. For information and help on Wikibooks collections, see '''[[Help:Collections]]'''.<includeonly>[[Category:Collections|{{{sort_as|{{PAGENAME}}}}}]]</includeonly> |#default=This '''collection''' is not located in the correct namespace. Please move it to either [[Wikibooks:Collections/{{SUBPAGENAME}}]] or [[User:Username/Collections/{{SUBPAGENAME}}]]. For information and help on collections, see '''[[Help:Collections]]'''. }} </td> </tr> <tr style="vertical-align:center; text-align:center;"> <td style="padding: 5px;"><!-- -->{{nowrap|1=<!-- --><span style="font-size: larger;"><span class="plainlinks" title="Download a PDF version of this collection.">[ [{{fullurl:Special:Collection|bookcmd=render_collection&amp;colltitle={{FULLPAGENAMEE}}&amp;writer=rdf2latex}} Download PDF{{#ifexpr: {{{seiten|0}}}>0|&nbsp;({{{pages}}} pages)}}] ]&#32;&#32;</span><!-- --><span class="plainlinks" title="Open this collection using Wikibooks' collection editing tool. The Collection Creator allows you to easily add or remove pages, create or remove chapters, download and print PDF and ODT versions, and more.">[ [{{fullurl:Special:Book|bookcmd=load_collection&amp;colltitle={{FULLPAGENAMEE}}}} Open in Collection Creator] ]&#32;&#32;</span><!-- --><span class="plainlinks" title="Preview this collection with PediaPress, choose a cover image, pick a color for the cover, and more. The printed book has professional-quality layout and printing.">[ [{{fullurl:Special:Book|bookcmd=order_collection&amp;colltitle={{FULLPAGENAMEE}}&amp;partner=pediapress}} Order Printed Book] ]&#32;&#32;</span></span>}} </td> </tr> <tr style="vertical-align:bottom;"> <td style="text-align:right; padding: 5px;"><small>[ [[Help:Collections/Printed books|About]] ] [ [[Help:Collections/Frequently Asked Questions|FAQ]] ] [ [[Help:Collections/Feedback|Feedback]] ] [ [[Help:Collections|Help]] ] [ <span class="plainlinks" title="See the recent edits made to the pages of this collection.">[{{fullurl:Special:RecentChangesLinked/{{FULLPAGENAMEE}}|&days=30&namespace=0&tagfilter=&hideminor=&hidebots Recent Changes}}] ]</span></small> </td> </td> </table> {{#if:{{{description|}}}{{{editor|}}} |{{mbox |text={{#if:{{{description|}}} |{{{description|}}}<p> }}As edited by {{#switch:{{NAMESPACE}} |{{ns:4}}=Wikibookians |{{ns:2}}={{{editor|[[User:{{#titleparts:{{PAGENAME}}|1}}]]}}} }} }} }}<noinclude> {{documentation}} </noinclude> dv6upgf4o7g3wuaf6t3n04286zc7stz 14934 14933 2020-04-16T08:22:36Z ShakespeareFan00 2900 Add option for blank or null value supplied from elsewhere 14934 wikitext text/x-wiki <table class="ombox"> <tr> <td rowspan="3" style="padding: 5px;"> {|style="background:{{{cover-color|Lavender}}}; color:<!-- -->{{#switch:{{lc:{{{cover-color|}}}}} |black=&#32;{{{text-color|white}}} |#default=&#32;{{{text-color|black}}} }}; text-align:left; border:1px solid darkgrey; width: 130px;" |- | style="background:gray; height: 3px;" | |- | style="height: 30px; text-align: right; vertical-align: top;" |<small>{{{title|Title}}}<br /><i>{{{subtitle|Subtitle}}}</i></small> |- | style="background:gray;" | |- | colspan="5" style="height: 135px; text-align: center; vertical-align: middle;" |[[File:{{{cover-image|Wikipedia-books-missing-cover.svg}}}|125px|<!-- -->{{#switch:{{{cover-image|Wikipedia-books-missing-cover.svg}}} | |Wikipedia-books-missing-cover.svg=Please select an appropriate cover image for this collection. See "Template:Saved book" for instructions." |#default= }}]] |} </td> <td style="padding: 5px;"><!-- -->{{#switch:{{NAMESPACE}} |{{ns:2}}|{{ns:3}}=This is a user-generated '''collection''' of Wikibooks pages that can be easily saved, rendered electronically, and ordered as a printed book. If you are the creator of this collection and need help, see '''[[Help:Collections]]'''. |{{ns:4}}|{{ns:5}}<noinclude>|{{ns:10}}</noinclude>=This is a '''collection''' of the pages in a Wikibooks book that can be easily saved, rendered electronically, and ordered as a printed book. For information and help on Wikibooks collections, see '''[[Help:Collections]]'''.<includeonly>[[Category:Collections|{{{sort_as|{{PAGENAME}}}}}]]</includeonly> |#default=This '''collection''' is not located in the correct namespace. Please move it to either [[Wikibooks:Collections/{{SUBPAGENAME}}]] or [[User:Username/Collections/{{SUBPAGENAME}}]]. For information and help on collections, see '''[[Help:Collections]]'''. }} </td> </tr> <tr style="vertical-align:center; text-align:center;"> <td style="padding: 5px;"><!-- -->{{nowrap|1=<!-- --><span style="font-size: larger;"><span class="plainlinks" title="Download a PDF version of this collection.">[ [{{fullurl:Special:Collection|bookcmd=render_collection&amp;colltitle={{FULLPAGENAMEE}}&amp;writer=rdf2latex}} Download PDF{{#ifexpr: {{{seiten|0}}}>0|&nbsp;({{{pages}}} pages)}}] ]&#32;&#32;</span><!-- --><span class="plainlinks" title="Open this collection using Wikibooks' collection editing tool. The Collection Creator allows you to easily add or remove pages, create or remove chapters, download and print PDF and ODT versions, and more.">[ [{{fullurl:Special:Book|bookcmd=load_collection&amp;colltitle={{FULLPAGENAMEE}}}} Open in Collection Creator] ]&#32;&#32;</span><!-- --><span class="plainlinks" title="Preview this collection with PediaPress, choose a cover image, pick a color for the cover, and more. The printed book has professional-quality layout and printing.">[ [{{fullurl:Special:Book|bookcmd=order_collection&amp;colltitle={{FULLPAGENAMEE}}&amp;partner=pediapress}} Order Printed Book] ]&#32;&#32;</span></span>}} </td> </tr> <tr style="vertical-align:bottom;"> <td style="text-align:right; padding: 5px;"><small>[ [[Help:Collections/Printed books|About]] ] [ [[Help:Collections/Frequently Asked Questions|FAQ]] ] [ [[Help:Collections/Feedback|Feedback]] ] [ [[Help:Collections|Help]] ] [ <span class="plainlinks" title="See the recent edits made to the pages of this collection.">[{{fullurl:Special:RecentChangesLinked/{{FULLPAGENAMEE}}|&days=30&namespace=0&tagfilter=&hideminor=&hidebots Recent Changes}}] ]</span></small> </td> </td> </table> {{#if:{{{description|}}}{{{editor|}}} |{{mbox |text={{#if:{{{description|}}} |{{{description|}}}<p> }}As edited by {{#switch:{{NAMESPACE}} |{{ns:4}}=Wikibookians |{{ns:2}}={{{editor|[[User:{{#titleparts:{{PAGENAME}}|1}}]]}}} }} }} }}<noinclude> {{documentation}} </noinclude> ivars4982fg7rfxd5v37h7nk4dctqpi 14935 14934 2020-04-16T08:55:57Z ShakespeareFan00 2900 Modify handling to cope with a BLANK but supplied value for cover image 14935 wikitext text/x-wiki <table class="ombox"> <tr> <td rowspan="3" style="padding: 5px;"> {|style="background:{{{cover-color|Lavender}}}; color:<!-- -->{{#switch:{{lc:{{{cover-color|}}}}} |black=&#32;{{{text-color|white}}} |#default=&#32;{{{text-color|black}}} }}; text-align:left; border:1px solid darkgrey; width: 130px;" |- | style="background:gray; height: 3px;" | |- | style="height: 30px; text-align: right; vertical-align: top;" |<small>{{{title|Title}}}<br /><i>{{{subtitle|Subtitle}}}</i></small> |- | style="background:gray;" | |- |colspan="5" style="height: 135px; text-align: center; vertical-align: middle;"| {{#switch:{{sane|{{{cover-image|}}}}} |@@empty@@=[[File:Wikipedia-books-missing-cover.svg{{!}}125px{{!}}Please select an appropriate cover image for this collection. See "Template:Saved book" for instructions."]] |{{{coverimage}}}=[[File:{{{cover-image|}}}{{!}}125px]] |#default=[[File:Wikipedia-books-missing-cover.svg{{!}}125px{{!}}Please select an appropriate cover image for this collection. See "Template:Saved book" for instructions."]] }} |} </td> <td style="padding: 5px;"><!-- -->{{#switch:{{NAMESPACE}} |{{ns:2}}|{{ns:3}}=This is a user-generated '''collection''' of Wikibooks pages that can be easily saved, rendered electronically, and ordered as a printed book. If you are the creator of this collection and need help, see '''[[Help:Collections]]'''. |{{ns:4}}|{{ns:5}}<noinclude>|{{ns:10}}</noinclude>=This is a '''collection''' of the pages in a Wikibooks book that can be easily saved, rendered electronically, and ordered as a printed book. For information and help on Wikibooks collections, see '''[[Help:Collections]]'''.<includeonly>[[Category:Collections|{{{sort_as|{{PAGENAME}}}}}]]</includeonly> |#default=This '''collection''' is not located in the correct namespace. Please move it to either [[Wikibooks:Collections/{{SUBPAGENAME}}]] or [[User:Username/Collections/{{SUBPAGENAME}}]]. For information and help on collections, see '''[[Help:Collections]]'''. }} </td> </tr> <tr style="vertical-align:center; text-align:center;"> <td style="padding: 5px;"><!-- -->{{nowrap|1=<!-- --><span style="font-size: larger;"><span class="plainlinks" title="Download a PDF version of this collection.">[ [{{fullurl:Special:Collection|bookcmd=render_collection&amp;colltitle={{FULLPAGENAMEE}}&amp;writer=rdf2latex}} Download PDF{{#ifexpr: {{{seiten|0}}}>0|&nbsp;({{{pages}}} pages)}}] ]&#32;&#32;</span><!-- --><span class="plainlinks" title="Open this collection using Wikibooks' collection editing tool. The Collection Creator allows you to easily add or remove pages, create or remove chapters, download and print PDF and ODT versions, and more.">[ [{{fullurl:Special:Book|bookcmd=load_collection&amp;colltitle={{FULLPAGENAMEE}}}} Open in Collection Creator] ]&#32;&#32;</span><!-- --><span class="plainlinks" title="Preview this collection with PediaPress, choose a cover image, pick a color for the cover, and more. The printed book has professional-quality layout and printing.">[ [{{fullurl:Special:Book|bookcmd=order_collection&amp;colltitle={{FULLPAGENAMEE}}&amp;partner=pediapress}} Order Printed Book] ]&#32;&#32;</span></span>}} </td> </tr> <tr style="vertical-align:bottom;"> <td style="text-align:right; padding: 5px;"><small>[ [[Help:Collections/Printed books|About]] ] [ [[Help:Collections/Frequently Asked Questions|FAQ]] ] [ [[Help:Collections/Feedback|Feedback]] ] [ [[Help:Collections|Help]] ] [ <span class="plainlinks" title="See the recent edits made to the pages of this collection.">[{{fullurl:Special:RecentChangesLinked/{{FULLPAGENAMEE}}|&days=30&namespace=0&tagfilter=&hideminor=&hidebots Recent Changes}}] ]</span></small> </td> </td> </table> {{#if:{{{description|}}}{{{editor|}}} |{{mbox |text={{#if:{{{description|}}} |{{{description|}}}<p> }}As edited by {{#switch:{{NAMESPACE}} |{{ns:4}}=Wikibookians |{{ns:2}}={{{editor|[[User:{{#titleparts:{{PAGENAME}}|1}}]]}}} }} }} }}<noinclude> {{documentation}} </noinclude> 092hyizbovsjlvo0wy90jj5xqvkgkj9 14936 14935 2023-11-26T17:25:14Z ShakespeareFan00 2900 14936 wikitext text/x-wiki <table class="ombox"> <tr> <td rowspan="3" style="padding: 5px;"> {|style="background:{{{cover-color|Lavender}}}; color:<!-- -->{{#switch:{{lc:{{{cover-color|}}}}} |black=&#32;{{{text-color|white}}} |#default=&#32;{{{text-color|black}}} }}; text-align:left; border:1px solid darkgrey; width: 130px;" |- | style="background:gray; height: 3px;" | |- | style="height: 30px; text-align: right; vertical-align: top;" |<small>{{{title|Title}}}<br /><i>{{{subtitle|Subtitle}}}</i></small> |- | style="background:gray;" | |- |colspan="5" style="height: 135px; text-align: center; vertical-align: middle;"| {{#switch:{{sane|{{{cover-image|}}}}} |@@empty@@=[[File:Wikipedia-books-missing-cover.svg{{!}}125px{{!}}Please select an appropriate cover image for this collection. See "Template:Saved book" for instructions."]] |{{{coverimage}}}=[[File:{{{cover-image|}}}{{!}}125px]] |#default=[[File:Wikipedia-books-missing-cover.svg{{!}}125px{{!}}Please select an appropriate cover image for this collection. See "Template:Saved book" for instructions."]] }} |} </td> <td style="padding: 5px;"><!-- -->{{#switch:{{NAMESPACE}} |{{ns:2}}|{{ns:3}}=This is a user-generated '''collection''' of Wikibooks pages that can be easily saved, rendered electronically, and ordered as a printed book. If you are the creator of this collection and need help, see '''[[Help:Collections]]'''. |{{ns:4}}|{{ns:5}}<noinclude>|{{ns:10}}</noinclude>=This is a '''collection''' of the pages in a Wikibooks book that can be easily saved, rendered electronically, and ordered as a printed book. For information and help on Wikibooks collections, see '''[[Help:Collections]]'''.<includeonly>[[Category:Collections|{{{sort_as|{{PAGENAME}}}}}]]</includeonly> |#default=This '''collection''' is not located in the correct namespace. Please move it to either [[Wikibooks:Collections/{{SUBPAGENAME}}]] or [[User:Username/Collections/{{SUBPAGENAME}}]]. For information and help on collections, see '''[[Help:Collections]]'''. }} </td> </tr> <tr style="vertical-align:center; text-align:center;"> <td style="padding: 5px;"><!-- -->{{nowrap|1=<!-- --><span style="font-size: larger;"><span class="plainlinks" title="Download a PDF version of this collection.">[ [{{fullurl:Special:Collection|bookcmd=render_collection&amp;colltitle={{FULLPAGENAMEE}}&amp;writer=rdf2latex}} Download PDF{{#ifexpr: {{{seiten|0}}}>0|&nbsp;({{{pages}}} pages)}}] ]&#32;&#32;</span><!-- --><span class="plainlinks" title="Open this collection using Wikibooks' collection editing tool. The Collection Creator allows you to easily add or remove pages, create or remove chapters, download and print PDF and ODT versions, and more.">[ [{{fullurl:Special:Book|bookcmd=load_collection&amp;colltitle={{FULLPAGENAMEE}}}} Open in Collection Creator] ]&#32;&#32;</span><!-- --><span class="plainlinks" title="Preview this collection with PediaPress, choose a cover image, pick a color for the cover, and more. The printed book has professional-quality layout and printing.">[ [{{fullurl:Special:Book|bookcmd=order_collection&amp;colltitle={{FULLPAGENAMEE}}&amp;partner=pediapress}} Order Printed Book] ]&#32;&#32;</span></span>}} </td> </tr> <tr style="vertical-align:bottom;"> <td style="text-align:right; padding: 5px;"><small>[ [[Help:Collections/Printed books|About]] ] [ [[Help:Collections/Frequently Asked Questions|FAQ]] ] [ [[Help:Collections/Feedback|Feedback]] ] [ [[Help:Collections|Help]] ] [ <span class="plainlinks" title="See the recent edits made to the pages of this collection.">[{{fullurl:Special:RecentChangesLinked/{{FULLPAGENAMEE}}|&days=30&namespace=0&tagfilter=&hideminor=&hidebots Recent Changes}}] ]</span></small> </td> </td> </table> {{#if:{{{description|}}}{{{editor|}}} |{{mbox |text={{#if:{{{description|}}} |{{{description|}}} }}As edited by {{#switch:{{NAMESPACE}} |{{ns:4}}=Wikibookians |{{ns:2}}={{{editor|[[User:{{#titleparts:{{PAGENAME}}|1}}]]}}} }} }} }}<noinclude> {{documentation}} </noinclude> ipckvi1nmmx3mfyojw4s5dyj5uqhq2u 14937 14936 2024-06-05T05:13:04Z ShakespeareFan00 2900 [[WB:REVERT|Reverted]] edits by [[Special:Contributions/ShakespeareFan00|ShakespeareFan00]] ([[User talk:ShakespeareFan00|talk]]) to last version by He7d3r 14937 wikitext text/x-wiki <table class="ombox"> <tr> <td rowspan="3" style="padding: 5px;"> {|style="background:{{{cover-color|Lavender}}}; color:<!-- -->{{#switch:{{lc:{{{cover-color|}}}}} |black=&#32;{{{text-color|white}}} |#default=&#32;{{{text-color|black}}} }}; text-align:left; border:1px solid darkgrey; width: 130px;" |- | style="background:gray; height: 3px;" | |- | style="height: 30px; text-align: right; vertical-align: top;" |<small>{{{title|Title}}}<br /><i>{{{subtitle|Subtitle}}}</i></small> |- | style="background:gray;" | |- | colspan="5" style="height: 135px; text-align: center; vertical-align: middle;" |[[File:{{{cover-image|Wikipedia-books-missing-cover.svg}}}|125px|<!-- -->{{#switch:{{{cover-image|Wikipedia-books-missing-cover.svg}}} |Wikipedia-books-missing-cover.svg=Please select an appropriate cover image for this collection. See "Template:Saved book" for instructions." |#default= }}]] |} </td> <td style="padding: 5px;"><!-- -->{{#switch:{{NAMESPACE}} |{{ns:2}}|{{ns:3}}=This is a user-generated '''collection''' of Wikibooks pages that can be easily saved, rendered electronically, and ordered as a printed book. If you are the creator of this collection and need help, see '''[[Help:Collections]]'''. |{{ns:4}}|{{ns:5}}<noinclude>|{{ns:10}}</noinclude>=This is a '''collection''' of the pages in a Wikibooks book that can be easily saved, rendered electronically, and ordered as a printed book. For information and help on Wikibooks collections, see '''[[Help:Collections]]'''.<includeonly>[[Category:Collections|{{{sort_as|{{PAGENAME}}}}}]]</includeonly> |#default=This '''collection''' is not located in the correct namespace. Please move it to either [[Wikibooks:Collections/{{SUBPAGENAME}}]] or [[User:Username/Collections/{{SUBPAGENAME}}]]. For information and help on collections, see '''[[Help:Collections]]'''. }} </td> </tr> <tr style="vertical-align:center; text-align:center;"> <td style="padding: 5px;"><!-- -->{{nowrap|1=<!-- --><div style="font-size: larger;"><span class="plainlinks" title="Download a PDF version of this collection.">[ [{{fullurl:Special:Collection|bookcmd=render_collection&amp;colltitle={{FULLPAGENAMEE}}&amp;writer=rdf2latex}} Download PDF{{#ifexpr: {{{seiten|0}}}>0|&nbsp;({{{pages}}} pages)}}] ]&#32;&#32;</span><!-- --><span class="plainlinks" title="Open this collection using Wikibooks' collection editing tool. The Collection Creator allows you to easily add or remove pages, create or remove chapters, download and print PDF and ODT versions, and more.">[ [{{fullurl:Special:Book|bookcmd=load_collection&amp;colltitle={{FULLPAGENAMEE}}}} Open in Collection Creator] ]&#32;&#32;</span><!-- --><span class="plainlinks" title="Preview this collection with PediaPress, choose a cover image, pick a color for the cover, and more. The printed book has professional-quality layout and printing.">[ [{{fullurl:Special:Book|bookcmd=order_collection&amp;colltitle={{FULLPAGENAMEE}}&amp;partner=pediapress}} Order Printed Book] ]&#32;&#32;</span></div>}} </td> </tr> <tr style="vertical-align:bottom;"> <td style="text-align:right; padding: 5px;"><small>[ [[Help:Collections/Printed books|About]] ] [ [[Help:Collections/Frequently Asked Questions|FAQ]] ] [ [[Help:Collections/Feedback|Feedback]] ] [ [[Help:Collections|Help]] ] [ <span class="plainlinks" title="See the recent edits made to the pages of this collection.">[{{fullurl:Special:RecentChangesLinked/{{FULLPAGENAMEE}}|&days=30&namespace=0&tagfilter=&hideminor=&hidebots Recent Changes}}] ]</span></small> </td> </td> </table> {{#if:{{{description|}}}{{{editor|}}} |{{mbox |text={{#if:{{{description|}}} |{{{description|}}}<p> }}As edited by {{#switch:{{NAMESPACE}} |{{ns:4}}=Wikibookians |{{ns:2}}={{{editor|[[User:{{#titleparts:{{PAGENAME}}|1}}]]}}} }} }} }}<noinclude> {{documentation}} </noinclude> taow1phkjdyjh6y7klhdlzdk5odbduc 14938 14937 2024-06-05T08:22:47Z ShakespeareFan00 2900 Reinstate previous repair 14938 wikitext text/x-wiki <table class="ombox"> <tr> <td rowspan="3" style="padding: 5px;"> {|style="background:{{{cover-color|Lavender}}}; color:<!-- -->{{#switch:{{lc:{{{cover-color|}}}}} |black=&#32;{{{text-color|white}}} |#default=&#32;{{{text-color|black}}} }}; text-align:left; border:1px solid darkgrey; width: 130px;" |- | style="background:gray; height: 3px;" | |- | style="height: 30px; text-align: right; vertical-align: top;" |<small>{{{title|Title}}}<br /><i>{{{subtitle|Subtitle}}}</i></small> |- | style="background:gray;" | |- |colspan="5" style="height: 135px; text-align: center; vertical-align: middle;"| {{#switch:{{sane|{{{cover-image|}}}}} |@@empty@@=[[File:Wikipedia-books-missing-cover.svg{{!}}125px{{!}}Please select an appropriate cover image for this collection. See "Template:Saved book" for instructions."]] |{{{coverimage}}}=[[File:{{{cover-image|}}}{{!}}125px]] |#default=[[File:Wikipedia-books-missing-cover.svg{{!}}125px{{!}}Please select an appropriate cover image for this collection. See "Template:Saved book" for instructions."]] }} |} </td> <td style="padding: 5px;"><!-- -->{{#switch:{{NAMESPACE}} |{{ns:2}}|{{ns:3}}=This is a user-generated '''collection''' of Wikibooks pages that can be easily saved, rendered electronically, and ordered as a printed book. If you are the creator of this collection and need help, see '''[[Help:Collections]]'''. |{{ns:4}}|{{ns:5}}<noinclude>|{{ns:10}}</noinclude>=This is a '''collection''' of the pages in a Wikibooks book that can be easily saved, rendered electronically, and ordered as a printed book. For information and help on Wikibooks collections, see '''[[Help:Collections]]'''.<includeonly>[[Category:Collections|{{{sort_as|{{PAGENAME}}}}}]]</includeonly> |#default=This '''collection''' is not located in the correct namespace. Please move it to either [[Wikibooks:Collections/{{SUBPAGENAME}}]] or [[User:Username/Collections/{{SUBPAGENAME}}]]. For information and help on collections, see '''[[Help:Collections]]'''. }} </td> </tr> <tr style="vertical-align:center; text-align:center;"> <td style="padding: 5px;"><!-- -->{{nowrap|1=<!-- --><span style="font-size: larger;"><span class="plainlinks" title="Download a PDF version of this collection.">[ [{{fullurl:Special:Collection|bookcmd=render_collection&amp;colltitle={{FULLPAGENAMEE}}&amp;writer=rdf2latex}} Download PDF{{#ifexpr: {{{seiten|0}}}>0|&nbsp;({{{pages}}} pages)}}] ]&#32;&#32;</span><!-- --><span class="plainlinks" title="Open this collection using Wikibooks' collection editing tool. The Collection Creator allows you to easily add or remove pages, create or remove chapters, download and print PDF and ODT versions, and more.">[ [{{fullurl:Special:Book|bookcmd=load_collection&amp;colltitle={{FULLPAGENAMEE}}}} Open in Collection Creator] ]&#32;&#32;</span><!-- --><span class="plainlinks" title="Preview this collection with PediaPress, choose a cover image, pick a color for the cover, and more. The printed book has professional-quality layout and printing.">[ [{{fullurl:Special:Book|bookcmd=order_collection&amp;colltitle={{FULLPAGENAMEE}}&amp;partner=pediapress}} Order Printed Book] ]&#32;&#32;</span></span>}} </td> </tr> <tr style="vertical-align:bottom;"> <td style="text-align:right; padding: 5px;"><small>[ [[Help:Collections/Printed books|About]] ] [ [[Help:Collections/Frequently Asked Questions|FAQ]] ] [ [[Help:Collections/Feedback|Feedback]] ] [ [[Help:Collections|Help]] ] [ <span class="plainlinks" title="See the recent edits made to the pages of this collection.">[{{fullurl:Special:RecentChangesLinked/{{FULLPAGENAMEE}}|&days=30&namespace=0&tagfilter=&hideminor=&hidebots Recent Changes}}] ]</span></small> </td> </td> </table> {{#if:{{{description|}}}{{{editor|}}} |{{mbox |text={{#if:{{{description|}}} |{{{description|}}} }}As edited by {{#switch:{{NAMESPACE}} |{{ns:4}}=Wikibookians |{{ns:2}}={{{editor|[[User:{{#titleparts:{{PAGENAME}}|1}}]]}}} }} }} }}<noinclude> {{documentation}} </noinclude> ipckvi1nmmx3mfyojw4s5dyj5uqhq2u 14939 14938 2025-11-09T02:51:59Z Erik Baas 2757 -"Download PDF"; (error: "Unknown subpage") 14939 wikitext text/x-wiki <table class="ombox"> <tr> <td rowspan="3" style="padding: 5px;"> {|style="background:{{{cover-color|Lavender}}}; color:<!-- -->{{#switch:{{lc:{{{cover-color|}}}}} |black=&#32;{{{text-color|white}}} |#default=&#32;{{{text-color|black}}} }}; text-align:left; border:1px solid darkgrey; width: 130px;" |- | style="background:gray; height: 3px;" | |- | style="height: 30px; text-align: right; vertical-align: top;" |<small>{{{title|Title}}}<br /><i>{{{subtitle|Subtitle}}}</i></small> |- | style="background:gray;" | |- |colspan="5" style="height: 135px; text-align: center; vertical-align: middle;"| {{#switch:{{sane|{{{cover-image|}}}}} |@@empty@@=[[File:Wikipedia-books-missing-cover.svg{{!}}125px{{!}}Please select an appropriate cover image for this collection. See "Template:Saved book" for instructions."]] |{{{coverimage}}}=[[File:{{{cover-image|}}}{{!}}125px]] |#default=[[File:Wikipedia-books-missing-cover.svg{{!}}125px{{!}}Please select an appropriate cover image for this collection. See "Template:Saved book" for instructions."]] }} |} </td> <td style="padding: 5px;"><!-- -->{{#switch:{{NAMESPACE}} |{{ns:2}}|{{ns:3}}=This is a user-generated '''collection''' of Wikibooks pages that can be easily saved, rendered electronically, and ordered as a printed book. If you are the creator of this collection and need help, see '''[[Help:Collections]]'''. |{{ns:4}}|{{ns:5}}<noinclude>|{{ns:10}}</noinclude>=This is a '''collection''' of the pages in a Wikibooks book that can be easily saved, rendered electronically, and ordered as a printed book. For information and help on Wikibooks collections, see '''[[Help:Collections]]'''.<includeonly>[[Category:Collections|{{{sort_as|{{PAGENAME}}}}}]]</includeonly> |#default=This '''collection''' is not located in the correct namespace. Please move it to either [[Wikibooks:Collections/{{SUBPAGENAME}}]] or [[User:Username/Collections/{{SUBPAGENAME}}]]. For information and help on collections, see '''[[Help:Collections]]'''. }} </td> </tr> <tr style="vertical-align:center; text-align:center;"> <td style="padding: 5px;"><!-- -->{{nowrap|1=<!-- --><!--span style="font-size: larger;"><span class="plainlinks" title="Download a PDF version of this collection.">[ [{{fullurl:Special:Collection|bookcmd=render_collection&amp;colltitle={{FULLPAGENAMEE}}&amp;writer=rdf2latex}} Download PDF{{#ifexpr: {{{seiten|0}}}>0|&nbsp;({{{pages}}} pages)}}] ]&#32;&#32;</span --><!-- --><span class="plainlinks" title="Open this collection using Wikibooks' collection editing tool. The Collection Creator allows you to easily add or remove pages, create or remove chapters, download and print PDF and ODT versions, and more.">[ [{{fullurl:Special:Book|bookcmd=load_collection&amp;colltitle={{FULLPAGENAMEE}}}} Open in Collection Creator] ]&#32;&#32;</span><!-- --><span class="plainlinks" title="Preview this collection with PediaPress, choose a cover image, pick a color for the cover, and more. The printed book has professional-quality layout and printing.">[ [{{fullurl:Special:Book|bookcmd=order_collection&amp;colltitle={{FULLPAGENAMEE}}&amp;partner=pediapress}} Order Printed Book] ]&#32;&#32;</span></span>}} </td> </tr> <tr style="vertical-align:bottom;"> <td style="text-align:right; padding: 5px;"><small>[ [[Help:Collections/Printed books|About]] ] [ [[Help:Collections/Frequently Asked Questions|FAQ]] ] [ [[Help:Collections/Feedback|Feedback]] ] [ [[Help:Collections|Help]] ] [ <span class="plainlinks" title="See the recent edits made to the pages of this collection.">[{{fullurl:Special:RecentChangesLinked/{{FULLPAGENAMEE}}|&days=30&namespace=0&tagfilter=&hideminor=&hidebots Recent Changes}}] ]</span></small> </td> </td> </table> {{#if:{{{description|}}}{{{editor|}}} |{{mbox |text={{#if:{{{description|}}} |{{{description|}}} }}As edited by {{#switch:{{NAMESPACE}} |{{ns:4}}=Wikibookians |{{ns:2}}={{{editor|[[User:{{#titleparts:{{PAGENAME}}|1}}]]}}} }} }} }}<noinclude> {{documentation}} </noinclude> h92u1qblt0zdseqpentb2j1ay7l0xqf 14940 14939 2026-01-17T13:18:32Z ShakespeareFan00 2900 14940 wikitext text/x-wiki <table class="ombox"> <tr> <td rowspan="3" style="padding: 5px;"> {|style="background:{{{cover-color|Lavender}}}; color:<!-- -->{{#switch:{{lc:{{{cover-color|}}}}} |black=&#32;{{{text-color|white}}} |#default=&#32;{{{text-color|black}}} }}; text-align:left; border:1px solid darkgrey; width: 130px;" |- | style="background:gray; height: 3px;" | |- | style="height: 30px; text-align: right; vertical-align: top;" |<small>{{{title|Title}}}<br /><i>{{{subtitle|Subtitle}}}</i></small> |- | style="background:gray;" | |- |colspan="5" style="height: 135px; text-align: center; vertical-align: middle;"| {{#switch:{{sane|{{{cover-image|}}}}} |@@empty@@=[[File:Wikipedia-books-missing-cover.svg{{!}}125px{{!}}Please select an appropriate cover image for this collection. See "Template:Saved book" for instructions."]] |{{{coverimage}}}=[[File:{{{cover-image|}}}{{!}}125px]] |#default=[[File:Wikipedia-books-missing-cover.svg{{!}}125px{{!}}Please select an appropriate cover image for this collection. See "Template:Saved book" for instructions."]] }} |} </td> <td style="padding: 5px;"><!-- -->{{#switch:{{NAMESPACE}} |{{ns:2}}|{{ns:3}}=This is a user-generated '''collection''' of Wikibooks pages that can be easily saved, rendered electronically, and ordered as a printed book. If you are the creator of this collection and need help, see '''[[Help:Collections]]'''. |{{ns:4}}|{{ns:5}}<noinclude>|{{ns:10}}</noinclude>=This is a '''collection''' of the pages in a Wikibooks book that can be easily saved, rendered electronically, and ordered as a printed book. For information and help on Wikibooks collections, see '''[[Help:Collections]]'''.<includeonly>[[Category:Collections|{{{sort_as|{{PAGENAME}}}}}]]</includeonly> |#default=This '''collection''' is not located in the correct namespace. Please move it to either [[Wikibooks:Collections/{{SUBPAGENAME}}]] or [[User:Username/Collections/{{SUBPAGENAME}}]]. For information and help on collections, see '''[[Help:Collections]]'''. }} </td> </tr> <tr style="vertical-align:center; text-align:center;"> <td style="padding: 5px;"><!-- -->{{nowrap|1=<!-- --><!--span style="font-size: larger;"><span class="plainlinks" title="Download a PDF version of this collection.">[ [{{fullurl:Special:Collection|bookcmd=render_collection&amp;colltitle={{FULLPAGENAMEE}}&amp;writer=rdf2latex}} Download PDF{{#ifexpr: {{{seiten|0}}}>0|&nbsp;({{{pages}}} pages)}}] ]&#32;&#32;</span --><!-- --><span class="plainlinks" title="Open this collection using Wikibooks' collection editing tool. The Collection Creator allows you to easily add or remove pages, create or remove chapters, download and print PDF and ODT versions, and more.">[ [{{fullurl:Special:Book|bookcmd=load_collection&amp;colltitle={{FULLPAGENAMEE}}}} Open in Collection Creator] ]&#32;&#32;</span><!-- --><span class="plainlinks" title="Preview this collection with PediaPress, choose a cover image, pick a color for the cover, and more. The printed book has professional-quality layout and printing.">[ [{{fullurl:Special:Book|bookcmd=order_collection&amp;colltitle={{FULLPAGENAMEE}}&amp;partner=pediapress}} Order Printed Book] ]&#32;&#32;</span><!--</span>-->}} </td> </tr> <tr style="vertical-align:bottom;"> <td style="text-align:right; padding: 5px;"><small>[ [[Help:Collections/Printed books|About]] ] [ [[Help:Collections/Frequently Asked Questions|FAQ]] ] [ [[Help:Collections/Feedback|Feedback]] ] [ [[Help:Collections|Help]] ] [ <span class="plainlinks" title="See the recent edits made to the pages of this collection.">[{{fullurl:Special:RecentChangesLinked/{{FULLPAGENAMEE}}|&days=30&namespace=0&tagfilter=&hideminor=&hidebots Recent Changes}}] ]</span></small> </td> </td> </table> {{#if:{{{description|}}}{{{editor|}}} |{{mbox |text={{#if:{{{description|}}} |{{{description|}}} }}As edited by {{#switch:{{NAMESPACE}} |{{ns:4}}=Wikibookians |{{ns:2}}={{{editor|[[User:{{#titleparts:{{PAGENAME}}|1}}]]}}} }} }} }}<noinclude> {{documentation}} </noinclude> tw5cf4d9meqie3fsv3c8yy4k1o118j1 14941 14940 2026-03-22T13:32:41Z ShakespeareFan00 2900 Attempting to solve lints. Please ignore the notification this edit generated unless you have a more stable repair 14941 wikitext text/x-wiki <table class="ombox"> <tr> <td rowspan="3" style="padding: 5px;"> {|style="background:{{{cover-color|Lavender}}}; color:<!-- -->{{#switch:{{lc:{{{cover-color|}}}}} |black=&#32;{{{text-color|white}}} |#default=&#32;{{{text-color|black}}} }}; text-align:left; border:1px solid darkgrey; width: 130px;" |- | style="background:gray;{{Text default color}}; height: 3px;" | |- | style="height: 30px; text-align: right; vertical-align: top;" |<small>{{{title|Title}}}<br /><i>{{{subtitle|Subtitle}}}</i></small> |- | style="background:gray;{{Text default color}};" | |- |colspan="5" style="height: 135px; text-align: center; vertical-align: middle;"| {{#switch:{{sane|{{{cover-image|}}}}} |@@empty@@=[[File:Wikipedia-books-missing-cover.svg{{!}}125px{{!}}Please select an appropriate cover image for this collection. See "Template:Saved book" for instructions."]] |{{{coverimage}}}=[[File:{{{cover-image|}}}{{!}}125px]] |#default=[[File:Wikipedia-books-missing-cover.svg{{!}}125px{{!}}Please select an appropriate cover image for this collection. See "Template:Saved book" for instructions."]] }} |} </td> <td style="padding: 5px;"><!-- -->{{#switch:{{NAMESPACE}} |{{ns:2}}|{{ns:3}}=This is a user-generated '''collection''' of Wikibooks pages that can be easily saved, rendered electronically, and ordered as a printed book. If you are the creator of this collection and need help, see '''[[Help:Collections]]'''. |{{ns:4}}|{{ns:5}}<noinclude>|{{ns:10}}</noinclude>=This is a '''collection''' of the pages in a Wikibooks book that can be easily saved, rendered electronically, and ordered as a printed book. For information and help on Wikibooks collections, see '''[[Help:Collections]]'''.<includeonly>[[Category:Collections|{{{sort_as|{{PAGENAME}}}}}]]</includeonly> |#default=This '''collection''' is not located in the correct namespace. Please move it to either [[Wikibooks:Collections/{{SUBPAGENAME}}]] or [[User:Username/Collections/{{SUBPAGENAME}}]]. For information and help on collections, see '''[[Help:Collections]]'''. }} </td> </tr> <tr style="vertical-align:center; text-align:center;"> <td style="padding: 5px;"><!-- -->{{nowrap|1=<!-- --><!--span style="font-size: larger;"><span class="plainlinks" title="Download a PDF version of this collection.">[ [{{fullurl:Special:Collection|bookcmd=render_collection&amp;colltitle={{FULLPAGENAMEE}}&amp;writer=rdf2latex}} Download PDF{{#ifexpr: {{{seiten|0}}}>0|&nbsp;({{{pages}}} pages)}}] ]&#32;&#32;</span --><!-- --><span class="plainlinks" title="Open this collection using Wikibooks' collection editing tool. The Collection Creator allows you to easily add or remove pages, create or remove chapters, download and print PDF and ODT versions, and more.">[ [{{fullurl:Special:Book|bookcmd=load_collection&amp;colltitle={{FULLPAGENAMEE}}}} Open in Collection Creator] ]&#32;&#32;</span><!-- --><span class="plainlinks" title="Preview this collection with PediaPress, choose a cover image, pick a color for the cover, and more. The printed book has professional-quality layout and printing.">[ [{{fullurl:Special:Book|bookcmd=order_collection&amp;colltitle={{FULLPAGENAMEE}}&amp;partner=pediapress}} Order Printed Book] ]&#32;&#32;</span><!--</span>-->}} </td> </tr> <tr style="vertical-align:bottom;"> <td style="text-align:right; padding: 5px;"><small>[ [[Help:Collections/Printed books|About]] ] [ [[Help:Collections/Frequently Asked Questions|FAQ]] ] [ [[Help:Collections/Feedback|Feedback]] ] [ [[Help:Collections|Help]] ] [ <span class="plainlinks" title="See the recent edits made to the pages of this collection.">[{{fullurl:Special:RecentChangesLinked/{{FULLPAGENAMEE}}|&days=30&namespace=0&tagfilter=&hideminor=&hidebots Recent Changes}}] ]</span></small> </td> </td> </table> {{#if:{{{description|}}}{{{editor|}}} |{{mbox |text={{#if:{{{description|}}} |{{{description|}}} }}As edited by {{#switch:{{NAMESPACE}} |{{ns:4}}=Wikibookians |{{ns:2}}={{{editor|[[User:{{#titleparts:{{PAGENAME}}|1}}]]}}} }} }} }}<noinclude> {{documentation}} </noinclude> p0e3m5vfajtdz6oovo6zc5wkghu3mg7 14942 14941 2026-08-01T17:28:40Z QueerEcofeminist 1879 [[:en:Template:Saved_book]] पासून २८ आवर्तने आयात केलीत 14941 wikitext text/x-wiki <table class="ombox"> <tr> <td rowspan="3" style="padding: 5px;"> {|style="background:{{{cover-color|Lavender}}}; color:<!-- -->{{#switch:{{lc:{{{cover-color|}}}}} |black=&#32;{{{text-color|white}}} |#default=&#32;{{{text-color|black}}} }}; text-align:left; border:1px solid darkgrey; width: 130px;" |- | style="background:gray;{{Text default color}}; height: 3px;" | |- | style="height: 30px; text-align: right; vertical-align: top;" |<small>{{{title|Title}}}<br /><i>{{{subtitle|Subtitle}}}</i></small> |- | style="background:gray;{{Text default color}};" | |- |colspan="5" style="height: 135px; text-align: center; vertical-align: middle;"| {{#switch:{{sane|{{{cover-image|}}}}} |@@empty@@=[[File:Wikipedia-books-missing-cover.svg{{!}}125px{{!}}Please select an appropriate cover image for this collection. See "Template:Saved book" for instructions."]] |{{{coverimage}}}=[[File:{{{cover-image|}}}{{!}}125px]] |#default=[[File:Wikipedia-books-missing-cover.svg{{!}}125px{{!}}Please select an appropriate cover image for this collection. See "Template:Saved book" for instructions."]] }} |} </td> <td style="padding: 5px;"><!-- -->{{#switch:{{NAMESPACE}} |{{ns:2}}|{{ns:3}}=This is a user-generated '''collection''' of Wikibooks pages that can be easily saved, rendered electronically, and ordered as a printed book. If you are the creator of this collection and need help, see '''[[Help:Collections]]'''. |{{ns:4}}|{{ns:5}}<noinclude>|{{ns:10}}</noinclude>=This is a '''collection''' of the pages in a Wikibooks book that can be easily saved, rendered electronically, and ordered as a printed book. For information and help on Wikibooks collections, see '''[[Help:Collections]]'''.<includeonly>[[Category:Collections|{{{sort_as|{{PAGENAME}}}}}]]</includeonly> |#default=This '''collection''' is not located in the correct namespace. Please move it to either [[Wikibooks:Collections/{{SUBPAGENAME}}]] or [[User:Username/Collections/{{SUBPAGENAME}}]]. For information and help on collections, see '''[[Help:Collections]]'''. }} </td> </tr> <tr style="vertical-align:center; text-align:center;"> <td style="padding: 5px;"><!-- -->{{nowrap|1=<!-- --><!--span style="font-size: larger;"><span class="plainlinks" title="Download a PDF version of this collection.">[ [{{fullurl:Special:Collection|bookcmd=render_collection&amp;colltitle={{FULLPAGENAMEE}}&amp;writer=rdf2latex}} Download PDF{{#ifexpr: {{{seiten|0}}}>0|&nbsp;({{{pages}}} pages)}}] ]&#32;&#32;</span --><!-- --><span class="plainlinks" title="Open this collection using Wikibooks' collection editing tool. The Collection Creator allows you to easily add or remove pages, create or remove chapters, download and print PDF and ODT versions, and more.">[ [{{fullurl:Special:Book|bookcmd=load_collection&amp;colltitle={{FULLPAGENAMEE}}}} Open in Collection Creator] ]&#32;&#32;</span><!-- --><span class="plainlinks" title="Preview this collection with PediaPress, choose a cover image, pick a color for the cover, and more. The printed book has professional-quality layout and printing.">[ [{{fullurl:Special:Book|bookcmd=order_collection&amp;colltitle={{FULLPAGENAMEE}}&amp;partner=pediapress}} Order Printed Book] ]&#32;&#32;</span><!--</span>-->}} </td> </tr> <tr style="vertical-align:bottom;"> <td style="text-align:right; padding: 5px;"><small>[ [[Help:Collections/Printed books|About]] ] [ [[Help:Collections/Frequently Asked Questions|FAQ]] ] [ [[Help:Collections/Feedback|Feedback]] ] [ [[Help:Collections|Help]] ] [ <span class="plainlinks" title="See the recent edits made to the pages of this collection.">[{{fullurl:Special:RecentChangesLinked/{{FULLPAGENAMEE}}|&days=30&namespace=0&tagfilter=&hideminor=&hidebots Recent Changes}}] ]</span></small> </td> </td> </table> {{#if:{{{description|}}}{{{editor|}}} |{{mbox |text={{#if:{{{description|}}} |{{{description|}}} }}As edited by {{#switch:{{NAMESPACE}} |{{ns:4}}=Wikibookians |{{ns:2}}={{{editor|[[User:{{#titleparts:{{PAGENAME}}|1}}]]}}} }} }} }}<noinclude> {{documentation}} </noinclude> p0e3m5vfajtdz6oovo6zc5wkghu3mg7 साचा:Nowrap/styles.css 10 4171 14943 2025-01-25T21:41:09Z ExE Boss 2914 Copied from [[mw:Template:Nowrap/styles.css]] 14943 sanitized-css text/css .nowrap, .nowrap a:before, .nowrap .selflink:before { white-space: nowrap; } mac6w7xrwsyyjl059kvsin0tuz2yqbc 14944 14943 2026-08-01T17:28:40Z QueerEcofeminist 1879 [[:en:Template:Nowrap/styles.css]] पासून १ आवर्तन आयात केलीत 14943 sanitized-css text/css .nowrap, .nowrap a:before, .nowrap .selflink:before { white-space: nowrap; } mac6w7xrwsyyjl059kvsin0tuz2yqbc साचा:Text default color 10 4172 14945 2026-03-21T21:37:31Z ShakespeareFan00 2900 Created page with "color:{{{override|var:(--color-base-fixed,#202122)}}};" 14945 wikitext text/x-wiki color:{{{override|var:(--color-base-fixed,#202122)}}}; fpm8c3dy2vhc4gaibyvusd8dstx9iur 14946 14945 2026-08-01T17:28:40Z QueerEcofeminist 1879 [[:en:Template:Text_default_color]] पासून १ आवर्तन आयात केलीत 14945 wikitext text/x-wiki color:{{{override|var:(--color-base-fixed,#202122)}}}; fpm8c3dy2vhc4gaibyvusd8dstx9iur मिडियाविकी:Gadget-Subpages.js 8 4173 14947 2026-07-22T21:34:21Z Codename Noreste 3207 Per [[Wikibooks:Reading room/Proposals#New gadget to browse subpages]]. 14947 javascript text/javascript mw.loader.load( '//www.mediawiki.org/w/load.php?modules=ext.gadget.Global-Subpages' ); t2j11579dyvpseoqlu91fx9uz0ak5z7 14948 14947 2026-07-22T22:34:55Z Codename Noreste 3207 Fixing an issue. 14948 javascript text/javascript mw.loader.load( 'https://www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-Global-Subpages.js&action=raw&ctype=text/javascript' ); tirmu2hrclyhhfciqu2jlyepmfcofwu 14949 14948 2026-07-22T22:45:28Z Codename Noreste 3207 Restoring revision 4655376 by [[Special:Contributions/Codename Noreste|Codename Noreste]] 14949 javascript text/javascript mw.loader.load( '//www.mediawiki.org/w/load.php?modules=ext.gadget.Global-Subpages' ); t2j11579dyvpseoqlu91fx9uz0ak5z7 14950 14949 2026-07-23T12:24:10Z Sophivorus 3088 Sophivorus moved page [[MediaWiki:Gadget-Global-Subpages.js]] to [[MediaWiki:Gadget-Subpages.js]] without leaving a redirect: Fix gadget name 14949 javascript text/javascript mw.loader.load( '//www.mediawiki.org/w/load.php?modules=ext.gadget.Global-Subpages' ); t2j11579dyvpseoqlu91fx9uz0ak5z7 14951 14950 2026-08-01T17:29:02Z QueerEcofeminist 1879 [[:en:MediaWiki:Gadget-Subpages.js]] पासून ४ आवर्तने आयात केलीत 14949 javascript text/javascript mw.loader.load( '//www.mediawiki.org/w/load.php?modules=ext.gadget.Global-Subpages' ); t2j11579dyvpseoqlu91fx9uz0ak5z7 मिडियाविकी:Gadget-BookCat.js 8 4174 14952 2021-06-29T11:55:32Z Leaderboard 2891 Created page with "// based on https://en.wikipedia.org/wiki/User:DannyS712/Draft_no_cat.js and https://en.wikibooks.org/wiki/User:1234qwer1234qwer4/BookCat.js // Set `var bookCatAJAX = true;` t..." 14952 javascript text/javascript // based on https://en.wikipedia.org/wiki/User:DannyS712/Draft_no_cat.js and https://en.wikibooks.org/wiki/User:1234qwer1234qwer4/BookCat.js // Set `var bookCatAJAX = true;` to add BookCat without reloading the page ( function () { function bookCat(){ var send_req = { action: 'query', titles: mw.config.get( 'wgPageName' ), prop: 'revisions', intoken: 'edit', rvprop: 'content', indexpageids: 1, dataType: 'xml', format: 'xml' }; $.get( mw.config.get( 'wgScriptPath' ) + '/api.php', send_req, function( response ) { var text = $( response ).find( 'rev' ).text(); if(text.match(/\{\{\s*Bookcat\s*\}\}/i)){ return mw.notify("BookCat already present."); } text += '\n\n{{BookCat}}'; var submit = { action: 'edit', pageid: mw.config.get( 'wgArticleId' ), text: text, summary: "Added {{[[Template:BookCat|BookCat]]}} using [[User:1234qwer1234qwer4/BookCat.js|BookCat.js]]", minor: true, token: mw.user.tokens.get( 'csrfToken' ) }; $.when( $.post( mw.config.get( 'wgScriptPath' ) + '/api.php', submit, function( response ){ } ) ).done( function() { if(bookCatAJAX === undefined || bookCatAJAX == false){ location.reload(); } else mw.notify("BookCat successfully added."); } ); } ); } if ( mw.config.get( 'wgNamespaceNumber' ) === 0 && mw.config.get('wgAction') === 'view' && mw.config.get('wgCategories').every(e => !e.includes("Book:")) ) { mw.loader.using( 'mediawiki.util', function () { $(document).ready( function () { var link = mw.util.addPortletLink( 'p-cactions', '#', 'BookCat', 'ca-bookcat', 'Add BookCat'); $( link ).click( function ( event ) { event.preventDefault(); bookCat(); } ); } ); } ); } }() ); oa4a5woylwr1kt9aw15dqbjxlq2u01i 14953 14952 2021-06-29T11:56:42Z Leaderboard 2891 Leaderboard moved page [[MediaWiki:BookCat.js]] to [[MediaWiki:Gadget-BookCat.js]] without leaving a redirect: gadget 14952 javascript text/javascript // based on https://en.wikipedia.org/wiki/User:DannyS712/Draft_no_cat.js and https://en.wikibooks.org/wiki/User:1234qwer1234qwer4/BookCat.js // Set `var bookCatAJAX = true;` to add BookCat without reloading the page ( function () { function bookCat(){ var send_req = { action: 'query', titles: mw.config.get( 'wgPageName' ), prop: 'revisions', intoken: 'edit', rvprop: 'content', indexpageids: 1, dataType: 'xml', format: 'xml' }; $.get( mw.config.get( 'wgScriptPath' ) + '/api.php', send_req, function( response ) { var text = $( response ).find( 'rev' ).text(); if(text.match(/\{\{\s*Bookcat\s*\}\}/i)){ return mw.notify("BookCat already present."); } text += '\n\n{{BookCat}}'; var submit = { action: 'edit', pageid: mw.config.get( 'wgArticleId' ), text: text, summary: "Added {{[[Template:BookCat|BookCat]]}} using [[User:1234qwer1234qwer4/BookCat.js|BookCat.js]]", minor: true, token: mw.user.tokens.get( 'csrfToken' ) }; $.when( $.post( mw.config.get( 'wgScriptPath' ) + '/api.php', submit, function( response ){ } ) ).done( function() { if(bookCatAJAX === undefined || bookCatAJAX == false){ location.reload(); } else mw.notify("BookCat successfully added."); } ); } ); } if ( mw.config.get( 'wgNamespaceNumber' ) === 0 && mw.config.get('wgAction') === 'view' && mw.config.get('wgCategories').every(e => !e.includes("Book:")) ) { mw.loader.using( 'mediawiki.util', function () { $(document).ready( function () { var link = mw.util.addPortletLink( 'p-cactions', '#', 'BookCat', 'ca-bookcat', 'Add BookCat'); $( link ).click( function ( event ) { event.preventDefault(); bookCat(); } ); } ); } ); } }() ); oa4a5woylwr1kt9aw15dqbjxlq2u01i 14954 14953 2021-09-29T10:53:52Z Leaderboard 2891 from Discord 14954 javascript text/javascript // based on https://en.wikipedia.org/wiki/User:DannyS712/Draft_no_cat.js // Set `var bookCatAJAX = true;` to add BookCat without reloading the page $(() => { const bookCat = {}; window.bookCat = bookCat; bookCat.config = { name: '[[User:1234qwer1234qwer4/BookCat.js|BookCat.js]]', debug: false }; bookCat.summary = "Added {{[[Template:BookCat|BookCat]]}} using " + bookCat.config.name; bookCat.run = function () { var editSummary = bookCat.summary; if ( bookCat.config.debug ) { console.log ( editSummary ); } var api = new mw.Api(); api.get( { action: 'query', titles: mw.config.get( 'wgPageName' ), prop: 'revisions', rvprop: 'content', rvslots: 'main', formatversion: 2 } ).done( function ( response ) { console.log( response ); var text = response.query.pages[0].revisions[0].slots.main.content; if(text.match(/\{\{\s*Bookcat\s*\}\}/i)){ return mw.notify("BookCat already present."); } text += '\n\n{{BookCat}}'; api.postWithEditToken( { action: 'edit', minor: true, title: mw.config.get( 'wgPageName' ), text: text, summary: editSummary } ).done( function() { if(bookCatAJAX === undefined || bookCatAJAX == false){ location.reload(); } else mw.notify("BookCat successfully added."); } ); } ); }; }); $( document ).ready( () => { if ( mw.config.get( 'wgNamespaceNumber' ) === 0 && mw.config.get('wgAction') === 'view' && mw.config.get('wgCategories').every(e => !e.includes("Book:")) ) { mw.loader.using( [ 'mediawiki.util' ], function () { var link = mw.util.addPortletLink( 'p-cactions', '#', 'BookCat', 'ca-bookcat', 'Add BookCat'); $( link ).click( function ( event ) { event.preventDefault(); mw.loader.using( 'mediawiki.api', window.bookCat.run ); } ); } ); } } ); 8imcnbuzqjlesp5b47ghamq7c8ztj6t 14955 14954 2024-12-28T03:11:13Z Leaderboard 2891 https://en.wikibooks.org/wiki/Wikibooks:Reading_room/Technical_Assistance#BookCat_edit_request 14955 javascript text/javascript // based on https://en.wikipedia.org/wiki/User:DannyS712/Draft_no_cat.js // Set `var bookCatAJAX = true;` to add BookCat without reloading the page $(() => { const bookCat = {}; window.bookCat = bookCat; bookCat.config = { name: '[[User:1234qwer1234qwer4/BookCat.js|BookCat.js]]', debug: false }; bookCat.summary = "Added {{[[Template:BookCat|BookCat]]}} using " + bookCat.config.name; bookCat.run = function () { var editSummary = bookCat.summary; if ( bookCat.config.debug ) { console.log ( editSummary ); } var api = new mw.Api(); api.get( { action: 'query', titles: mw.config.get( 'wgPageName' ), prop: 'revisions', rvprop: 'content', rvslots: 'main', formatversion: 2 } ).done( function ( response ) { console.log( response ); var text = response.query.pages[0].revisions[0].slots.main.content; if(text.match(/\{\{\s*Bookcat\s*\}\}/i)){ return mw.notify("BookCat already present."); } text += '\n\n{{BookCat}}'; api.postWithEditToken( { action: 'edit', minor: true, title: mw.config.get( 'wgPageName' ), text: text, summary: editSummary } ).done( function() { if(typeof bookCatAJAX == "undefined" || bookCatAJAX == false){ location.reload(); } else mw.notify("BookCat successfully added."); } ); } ); }; }); $( document ).ready( () => { if ( mw.config.get( 'wgNamespaceNumber' ) === 0 && mw.config.get('wgAction') === 'view' && mw.config.get('wgCategories').every(e => !e.includes("Book:")) ) { mw.loader.using( [ 'mediawiki.util' ], function () { var link = mw.util.addPortletLink( 'p-cactions', '#', 'BookCat', 'ca-bookcat', 'Add BookCat'); $( link ).click( function ( event ) { event.preventDefault(); mw.loader.using( 'mediawiki.api', window.bookCat.run ); } ); } ); } } ); mok8cchtbdwda4z2s0f96m869l4052h 14956 14955 2026-08-01T17:29:24Z QueerEcofeminist 1879 [[:en:MediaWiki:Gadget-BookCat.js]] पासून ४ आवर्तने आयात केलीत 14955 javascript text/javascript // based on https://en.wikipedia.org/wiki/User:DannyS712/Draft_no_cat.js // Set `var bookCatAJAX = true;` to add BookCat without reloading the page $(() => { const bookCat = {}; window.bookCat = bookCat; bookCat.config = { name: '[[User:1234qwer1234qwer4/BookCat.js|BookCat.js]]', debug: false }; bookCat.summary = "Added {{[[Template:BookCat|BookCat]]}} using " + bookCat.config.name; bookCat.run = function () { var editSummary = bookCat.summary; if ( bookCat.config.debug ) { console.log ( editSummary ); } var api = new mw.Api(); api.get( { action: 'query', titles: mw.config.get( 'wgPageName' ), prop: 'revisions', rvprop: 'content', rvslots: 'main', formatversion: 2 } ).done( function ( response ) { console.log( response ); var text = response.query.pages[0].revisions[0].slots.main.content; if(text.match(/\{\{\s*Bookcat\s*\}\}/i)){ return mw.notify("BookCat already present."); } text += '\n\n{{BookCat}}'; api.postWithEditToken( { action: 'edit', minor: true, title: mw.config.get( 'wgPageName' ), text: text, summary: editSummary } ).done( function() { if(typeof bookCatAJAX == "undefined" || bookCatAJAX == false){ location.reload(); } else mw.notify("BookCat successfully added."); } ); } ); }; }); $( document ).ready( () => { if ( mw.config.get( 'wgNamespaceNumber' ) === 0 && mw.config.get('wgAction') === 'view' && mw.config.get('wgCategories').every(e => !e.includes("Book:")) ) { mw.loader.using( [ 'mediawiki.util' ], function () { var link = mw.util.addPortletLink( 'p-cactions', '#', 'BookCat', 'ca-bookcat', 'Add BookCat'); $( link ).click( function ( event ) { event.preventDefault(); mw.loader.using( 'mediawiki.api', window.bookCat.run ); } ); } ); } } ); mok8cchtbdwda4z2s0f96m869l4052h साचा:BookCat/default 10 4175 15004 2016-10-31T19:18:35Z Pi zero 2546 mv from parent template 15004 wikitext text/x-wiki <includeonly>{{#ifeq: {{{filing|}}} | deep |[[Category:{{#if:{{CHAPTERNAME}}|{{#titleparts:{{FULLPAGENAME}}|-1}}|{{FULLPAGENAME}}}}|{{{1|{{#if:{{CHAPTERNAME}}|{{#titleparts:{{PAGENAME}}||-1}}}}}}} ]][[Category:Pages with deep filing]] |[[Category:{{FULLBOOKNAME}}|{{{1|{{#titleparts:{{FULLPAGENAME}}||2}}}}} ]] }}</includeonly><noinclude> {{documentation}} </noinclude> hlg52lfn0i9cchcrka2jm2ot52j8z3j 15005 15004 2016-10-31T19:18:55Z Pi zero 2546 Protected "[[Template:BookCat/default]]": High-impact page: Matching protection on parent ([Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite)) 15004 wikitext text/x-wiki <includeonly>{{#ifeq: {{{filing|}}} | deep |[[Category:{{#if:{{CHAPTERNAME}}|{{#titleparts:{{FULLPAGENAME}}|-1}}|{{FULLPAGENAME}}}}|{{{1|{{#if:{{CHAPTERNAME}}|{{#titleparts:{{PAGENAME}}||-1}}}}}}} ]][[Category:Pages with deep filing]] |[[Category:{{FULLBOOKNAME}}|{{{1|{{#titleparts:{{FULLPAGENAME}}||2}}}}} ]] }}</includeonly><noinclude> {{documentation}} </noinclude> hlg52lfn0i9cchcrka2jm2ot52j8z3j 15006 15005 2016-11-07T23:11:01Z Pi zero 2546 {{{1}}} 15006 wikitext text/x-wiki <includeonly>{{#ifeq: {{{filing|}}} | deep |[[Category:{{#if:{{CHAPTERNAME}}|{{#titleparts:{{FULLPAGENAME}}|-1}}|{{FULLPAGENAME}}}}|{{#if:{{{1|}}}|{{{1}}}|{{#if:{{CHAPTERNAME}}|{{#titleparts:{{PAGENAME}}||-1}}}}}} ]][[Category:Pages with deep filing]] |[[Category:{{FULLBOOKNAME}}|{{#if:{{{1|}}}|{{{1}}}|{{#titleparts:{{FULLPAGENAME}}||2}}}} ]] }}</includeonly><noinclude> {{documentation}} </noinclude> 3rjjt5exf4h03j4dfe7fciwdiogk7so 15007 15006 2016-12-11T19:49:57Z Pi zero 2546 eliminate uses of CHAPTERNAME 15007 wikitext text/x-wiki <includeonly>{{#ifeq: {{{filing|}}} | deep |[[Category:{{#if:{{#titleparts:{{FULLPAGENAME}}||2}}|{{#titleparts:{{FULLPAGENAME}}|-1}}|{{FULLPAGENAME}}}}|{{#if:{{{1|}}}|{{{1}}}|{{#if:{{#titleparts:{{FULLPAGENAME}}||2}}|{{#titleparts:{{PAGENAME}}||-1}}}}}} ]][[Category:Pages with deep filing]] |[[Category:{{FULLBOOKNAME}}|{{#if:{{{1|}}}|{{{1}}}|{{#titleparts:{{FULLPAGENAME}}||2}}}} ]] }}</includeonly><noinclude> {{documentation}} </noinclude> 4h2k1jfvu3ekgp20bjda5oa8txaofo2 15008 15007 2017-04-19T03:41:12Z Pi zero 2546 use {{[[Template:BOOKCATEGORY|BOOKCATEGORY]]}} 15008 wikitext text/x-wiki <includeonly>{{#ifeq: {{{filing|}}} | deep |[[{{BOOKCATEGORY|book={{#if:{{#titleparts:{{FULLPAGENAME}}||2}}|{{#titleparts:{{FULLPAGENAME}}|-1}}|{{FULLPAGENAME}}}}|{{#if:{{{1|}}}|{{{1}}}|{{#if:{{#titleparts:{{FULLPAGENAME}}||2}}|{{#titleparts:{{PAGENAME}}||-1}}}}}}}} ]][[Category:Pages with deep filing]] |[[{{BOOKCATEGORY|book={{FULLBOOKNAME}}|{{#if:{{{1|}}}|{{{1}}}|{{#titleparts:{{FULLPAGENAME}}||2}}}}}} ]] }}</includeonly><noinclude> {{documentation}} </noinclude> om5w28ygq8a86glxkn9nxr3qt0camwd 15009 15008 2017-09-14T18:45:45Z Pi zero 2546 attempted bug fix 15009 wikitext text/x-wiki <includeonly>{{#ifeq: {{{filing|}}} | deep |[[{{BOOKCATEGORY|book={{#if:{{#titleparts:{{FULLPAGENAME}}||2}}|{{#titleparts:{{FULLPAGENAME}}|-1}}|{{FULLPAGENAME}}}}}}|{{#if:{{{1|}}}|{{{1}}}|{{#if:{{#titleparts:{{FULLPAGENAME}}||2}}|{{#titleparts:{{PAGENAME}}||-1}}}}}} ]][[Category:Pages with deep filing]] |[[{{BOOKCATEGORY|book={{FULLBOOKNAME}}|{{#if:{{{1|}}}|{{{1}}}|{{#titleparts:{{FULLPAGENAME}}||2}}}}}} ]] }}</includeonly><noinclude> {{documentation}} </noinclude> hwt4yb662k7ojdz6widv6j49c21xflt 15010 15009 2017-09-14T18:47:47Z Pi zero 2546 alas! second bug fix 15010 wikitext text/x-wiki <includeonly>{{#ifeq: {{{filing|}}} | deep |[[{{BOOKCATEGORY|book={{#if:{{#titleparts:{{FULLPAGENAME}}||2}}|{{#titleparts:{{FULLPAGENAME}}|-1}}|{{FULLPAGENAME}}}}}}|{{#if:{{{1|}}}|{{{1}}}|{{#if:{{#titleparts:{{FULLPAGENAME}}||2}}|{{#titleparts:{{PAGENAME}}||-1}}}}}} ]][[Category:Pages with deep filing]] |[[{{BOOKCATEGORY|book={{FULLBOOKNAME}}}}|{{#if:{{{1|}}}|{{{1}}}|{{#titleparts:{{FULLPAGENAME}}||2}}}} ]] }}</includeonly><noinclude> {{documentation}} </noinclude> m8azzk0x4amhswoc7dmh9tsf3y85zvz 15011 15010 2018-01-22T19:34:17Z Pi zero 2546 template mv 15011 wikitext text/x-wiki <includeonly>{{#ifeq: {{{filing|}}} | deep |[[{{BOOKCATEGORY|book={{#if:{{#titleparts:{{FULLPAGENAME}}||2}}|{{#titleparts:{{FULLPAGENAME}}|-1}}|{{FULLPAGENAME}}}}}}|{{#if:{{{1|}}}|{{{1}}}|{{#if:{{#titleparts:{{FULLPAGENAME}}||2}}|{{#titleparts:{{PAGENAME}}||-1}}}}}} ]][[Category:Pages with deep filing]] |[[{{BOOKCATEGORY|book={{NAIVEBOOKNAME}}}}|{{#if:{{{1|}}}|{{{1}}}|{{#titleparts:{{FULLPAGENAME}}||2}}}} ]] }}</includeonly><noinclude> {{documentation}} </noinclude> jw1s56j9o7drryc56op88nyxeob16sr 15012 15011 2018-01-29T21:02:08Z Pi zero 2546 15012 wikitext text/x-wiki <includeonly>{{#ifeq: {{{filing|}}} | deep |[[{{BOOKCATEGORY|{{{fullpagename}}}|book={{#if:{{#titleparts:{{{fullpagename}}}||2}}|{{#titleparts:{{{fullpagename}}}|-1}}|{{{fullpagename}}}}}}}|{{#if:{{{sortkey|}}}|{{{sortkey}}}|{{#if:{{#titleparts:{{{fullpagename}}}||2}}|{{#titleparts:{{{pagename}}}||-1}}}}}} ]][[Category:Pages with deep filing]] |[[{{BOOKCATEGORY|{{{fullpagename}}}|book={{NAIVEBOOKNAME|{{{fullpagename}}}}}}}|{{#if:{{{sortkey|}}}|{{{sortkey}}}|{{#titleparts:{{{fullpagename}}}||2}}}} ]] }}</includeonly><noinclude> {{documentation}} </noinclude> 19zdiuubcgqk688r91b773tk23n2n05 15013 15012 2026-08-01T17:29:27Z QueerEcofeminist 1879 [[:en:Template:BookCat/default]] पासून ९ आवर्तने आयात केलीत 15012 wikitext text/x-wiki <includeonly>{{#ifeq: {{{filing|}}} | deep |[[{{BOOKCATEGORY|{{{fullpagename}}}|book={{#if:{{#titleparts:{{{fullpagename}}}||2}}|{{#titleparts:{{{fullpagename}}}|-1}}|{{{fullpagename}}}}}}}|{{#if:{{{sortkey|}}}|{{{sortkey}}}|{{#if:{{#titleparts:{{{fullpagename}}}||2}}|{{#titleparts:{{{pagename}}}||-1}}}}}} ]][[Category:Pages with deep filing]] |[[{{BOOKCATEGORY|{{{fullpagename}}}|book={{NAIVEBOOKNAME|{{{fullpagename}}}}}}}|{{#if:{{{sortkey|}}}|{{{sortkey}}}|{{#titleparts:{{{fullpagename}}}||2}}}} ]] }}</includeonly><noinclude> {{documentation}} </noinclude> 19zdiuubcgqk688r91b773tk23n2n05 साचा:NAIVEBOOKNAME 10 4176 15014 2008-04-01T20:58:19Z Darklama 2894 returns the name of a book including the namespace 15014 wikitext text/x-wiki <includeonly>{{#titleparts:{{{1|{{FULLPAGENAME}}}}}|1}}</includeonly><noinclude>Returns the name of the book including the namespace.</noinclude> l9fpet3ftyp5b0dl2729ij0zfntbkg2 15015 15014 2008-04-01T20:58:36Z Darklama 2894 Protected "[[Template:FULLBOOKNAME]]": should never need to be changed [edit=sysop:move=sysop] 15014 wikitext text/x-wiki <includeonly>{{#titleparts:{{{1|{{FULLPAGENAME}}}}}|1}}</includeonly><noinclude>Returns the name of the book including the namespace.</noinclude> l9fpet3ftyp5b0dl2729ij0zfntbkg2 15016 15015 2009-06-27T04:12:36Z Adrignola 502 +category 15016 wikitext text/x-wiki <includeonly>{{#titleparts:{{{1|{{FULLPAGENAME}}}}}|1}}</includeonly><noinclude>Returns the name of the book including the namespace.[[Category:Magic word templates|{{PAGENAME}}]]</noinclude> 9gvp6re4oi4sy6glbk2y5am50oq7rxq 15017 15016 2010-04-21T18:51:58Z Adrignola 502 using {{documentation}} 15017 wikitext text/x-wiki <includeonly>{{#titleparts:{{{1|{{FULLPAGENAME}}}}}|1}}</includeonly><noinclude>{{documentation}}</noinclude> p6elrbww9zt8w5vven8h68v7asswoj9 15018 15017 2018-01-22T17:55:27Z Pi zero 2546 Pi zero moved page [[Template:FULLBOOKNAME]] to [[Template:NAIVEBOOKNAME]]: description 15017 wikitext text/x-wiki <includeonly>{{#titleparts:{{{1|{{FULLPAGENAME}}}}}|1}}</includeonly><noinclude>{{documentation}}</noinclude> p6elrbww9zt8w5vven8h68v7asswoj9 15019 15018 2026-08-01T17:29:27Z QueerEcofeminist 1879 [[:en:Template:NAIVEBOOKNAME]] पासून ५ आवर्तने आयात केलीत 15017 wikitext text/x-wiki <includeonly>{{#titleparts:{{{1|{{FULLPAGENAME}}}}}|1}}</includeonly><noinclude>{{documentation}}</noinclude> p6elrbww9zt8w5vven8h68v7asswoj9 मिडियाविकी:Gadget-OneClickWelcomer.js 8 4177 15048 2024-12-10T11:30:57Z Leaderboard 2891 Created page with "//<nowiki> function welcomeToWikibooks(username) { var OCWparams; var api; if (isIPwb(username)) { OCWparams = { action: 'edit', title: "User talk:" + username, appendtext: "\r\n== Welcome to Wikibooks! ==\r\n{{subst:Welcome-anon}} ~~~~", summary: "Welcomed new anonymous user with [[User:JJPMaster/OneClickWelcomer.js|OneClickWelcomer]]", format: 'json' }, api = new mw.Api(); api.postWithToken( 'csrf', OCWparams ).done( function ( data ) {..." 15048 javascript text/javascript //<nowiki> function welcomeToWikibooks(username) { var OCWparams; var api; if (isIPwb(username)) { OCWparams = { action: 'edit', title: "User talk:" + username, appendtext: "\r\n== Welcome to Wikibooks! ==\r\n{{subst:Welcome-anon}} ~~~~", summary: "Welcomed new anonymous user with [[User:JJPMaster/OneClickWelcomer.js|OneClickWelcomer]]", format: 'json' }, api = new mw.Api(); api.postWithToken( 'csrf', OCWparams ).done( function ( data ) { console.log( data ); } ); } else { OCWparams = { action: 'edit', title: "User talk:" + username, appendtext: "\r\n{{subst:Welcome}} ~~~~", summary: "Welcomed new user with [[User:JJPMaster/OneClickWelcomer.js|OneClickWelcomer]]", format: 'json' }, api = new mw.Api(); api.postWithToken( 'csrf', OCWparams ).done( function ( data ) { console.log( data ); } ); } mw.notify($(`<a target="_blank" style="color: black; text-decoration: none;" href="/wiki/User_talk:${username}">Successfully welcomed the user. Click here to redirect to the user talk page.</a>`)); } function warn(username, level) { var OCWparams; var api; if (isIPwb(username)) { OCWparams = { action: 'edit', title: "User talk:" + username, appendtext: `\r\n== {{subst:#time: F Y}} ==\r\n{{subst:TestAnon${level}}} ~~~~`, summary: "Warned anonymous user with [[User:JJPMaster/OneClickWelcomer.js|OneClickWelcomer]]", format: 'json' }, api = new mw.Api(); api.postWithToken( 'csrf', OCWparams ).done( function ( data ) { console.log( data ); } ); } else { OCWparams = { action: 'edit', title: "User talk:" + username, appendtext: `\r\n== {{subst:#time: F Y}} ==\r\n{{subst:Test${level}}} ~~~~`, summary: "Warned user with [[User:JJPMaster/OneClickWelcomer.js|OneClickWelcomer]]", format: 'json' }, api = new mw.Api(); api.postWithToken( 'csrf', OCWparams ).done( function ( data ) { console.log( data ); } ); } mw.notify($(`<a target="_blank" style="color: black; text-decoration: none;" href="/wiki/User_talk:${username}">Successfully warned the user. Click here to redirect to the user talk page.</a>`)); } function isIPwb(username) { const regex = /(?:^(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}$)|(?:^(?:(?:[a-fA-F\d]{1,4}:){7}(?:[a-fA-F\d]{1,4}|:)|(?:[a-fA-F\d]{1,4}:){6}(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|:[a-fA-F\d]{1,4}|:)|(?:[a-fA-F\d]{1,4}:){5}(?::(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,2}|:)|(?:[a-fA-F\d]{1,4}:){4}(?:(?::[a-fA-F\d]{1,4}){0,1}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,3}|:)|(?:[a-fA-F\d]{1,4}:){3}(?:(?::[a-fA-F\d]{1,4}){0,2}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,4}|:)|(?:[a-fA-F\d]{1,4}:){2}(?:(?::[a-fA-F\d]{1,4}){0,3}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,5}|:)|(?:[a-fA-F\d]{1,4}:){1}(?:(?::[a-fA-F\d]{1,4}){0,4}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,6}|:)|(?::(?:(?::[a-fA-F\d]{1,4}){0,5}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,7}|:)))(?:%[0-9a-zA-Z]{1,})?$)/gm; if (regex.test(username)) { return true; } return false; } // Adapted from [[w:en:User:BrandonXLF/Restorer.js]] $(() => { function OCWaddLink(item) { var links = item.querySelector('.mw-usertoollinks'); var parent = document.createElement('span'), el = document.createElement('a'); var parent2 = document.createElement('span'), el2 = document.createElement('a'); el.addEventListener('click', function() { el.className = 'welcomer-loading'; welcomeToWikibooks(getUser(parent)); }); el2.addEventListener('click', function() { el2.className = 'warner-loading'; var level = prompt("What level? Type '1', '2', or '3' without the quotes. Default: 1"); warn(getUser(parent), level); }); el.textContent = 'welcome'; el2.textContent = 'warn'; parent.appendChild(el); parent2.appendChild(el2); if (links !== null) links.append(parent, parent2); } var parents = document.querySelectorAll('[data-mw-revid]'); function getUser(parent) { return $(parent).closest("[data-mw-revid]").find("a.mw-userlink").find("bdi").text(); } parents.forEach((e) => OCWaddLink(e)); function OCWalternateAddLink() { mw.util.addPortletLink('p-tb', '#', 'Welcome', 'OCWwelcome-wikibooks', 'Welcome this user'); mw.util.addPortletLink('p-tb', '#', 'Warn (level 1)', 'OCWwarn1-wikibooks', 'Warn this user'); mw.util.addPortletLink('p-tb', '#', 'Warn (level 2)', 'OCWwarn2-wikibooks', 'Warn this user'); mw.util.addPortletLink('p-tb', '#', 'Warn (level 3)', 'OCWwarn3-wikibooks', 'Warn this user'); $("#OCWwelcome-wikibooks").click(() => welcomeToWikibooks(mw.config.get("wgRelevantUserName"))); $("#OCWwarn1-wikibooks").click(() => warn(mw.config.get("wgRelevantUserName"), 1)); $("#OCWwarn2-wikibooks").click(() => warn(mw.config.get("wgRelevantUserName"), 2)); $("#OCWwarn3-wikibooks").click(() => warn(mw.config.get("wgRelevantUserName"), 3)); } if(mw.config.get("wgCanonicalNamespace") == "User" || mw.config.get("wgCanonicalNamespace") == "User_talk" || mw.config.get("wgCanonicalSpecialPageName") == "Contributions") { OCWalternateAddLink(); } }); //</nowiki> 39o832eef8jmmuf156gdmb87tpvkb24 15049 15048 2024-12-14T06:34:22Z Leaderboard 2891 per request 15049 javascript text/javascript //<nowiki> function welcomeToWikibooks(username) { var OCWparams; var api; if (isIPwb(username)) { OCWparams = { action: 'edit', title: "User talk:" + username, appendtext: "\r\n== Welcome to Wikibooks! ==\r\n{{subst:Welcome-anon}} ~~~~", summary: "Welcomed new anonymous user with [[User:JJPMaster/OneClickWelcomer|OneClickWelcomer]]", format: 'json' }, api = new mw.Api(); api.postWithToken( 'csrf', OCWparams ).done( function ( data ) { console.log( data ); } ); } else { OCWparams = { action: 'edit', title: "User talk:" + username, appendtext: "\r\n{{subst:Welcome}} ~~~~", summary: "Welcomed new user with [[User:JJPMaster/OneClickWelcomer|OneClickWelcomer]]", format: 'json' }, api = new mw.Api(); api.postWithToken( 'csrf', OCWparams ).done( function ( data ) { console.log( data ); } ); } mw.notify($(`<a target="_blank" style="color: black; text-decoration: none;" href="/wiki/User_talk:${username}">Successfully welcomed the user. Click here to redirect to the user talk page.</a>`)); } function warn(username, level) { var OCWparams; var api; if (isIPwb(username)) { OCWparams = { action: 'edit', title: "User talk:" + username, appendtext: `\r\n== {{subst:#time: F Y}} ==\r\n{{subst:TestAnon${level}}} ~~~~`, summary: "Warned anonymous user with [[User:JJPMaster/OneClickWelcomer.js|OneClickWelcomer]]", format: 'json' }, api = new mw.Api(); api.postWithToken( 'csrf', OCWparams ).done( function ( data ) { console.log( data ); } ); } else { OCWparams = { action: 'edit', title: "User talk:" + username, appendtext: `\r\n== {{subst:#time: F Y}} ==\r\n{{subst:Test${level}}} ~~~~`, summary: "Warned user with [[User:JJPMaster/OneClickWelcomer.js|OneClickWelcomer]]", format: 'json' }, api = new mw.Api(); api.postWithToken( 'csrf', OCWparams ).done( function ( data ) { console.log( data ); } ); } mw.notify($(`<a target="_blank" style="color: black; text-decoration: none;" href="/wiki/User_talk:${username}">Successfully warned the user. Click here to redirect to the user talk page.</a>`)); } function isIPwb(username) { const regex = /(?:^(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}$)|(?:^(?:(?:[a-fA-F\d]{1,4}:){7}(?:[a-fA-F\d]{1,4}|:)|(?:[a-fA-F\d]{1,4}:){6}(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|:[a-fA-F\d]{1,4}|:)|(?:[a-fA-F\d]{1,4}:){5}(?::(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,2}|:)|(?:[a-fA-F\d]{1,4}:){4}(?:(?::[a-fA-F\d]{1,4}){0,1}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,3}|:)|(?:[a-fA-F\d]{1,4}:){3}(?:(?::[a-fA-F\d]{1,4}){0,2}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,4}|:)|(?:[a-fA-F\d]{1,4}:){2}(?:(?::[a-fA-F\d]{1,4}){0,3}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,5}|:)|(?:[a-fA-F\d]{1,4}:){1}(?:(?::[a-fA-F\d]{1,4}){0,4}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,6}|:)|(?::(?:(?::[a-fA-F\d]{1,4}){0,5}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,7}|:)))(?:%[0-9a-zA-Z]{1,})?$)/gm; if (regex.test(username)) { return true; } return false; } // Adapted from [[w:en:User:BrandonXLF/Restorer.js]] $(() => { function OCWaddLink(item) { var links = item.querySelector('.mw-usertoollinks'); var parent = document.createElement('span'), el = document.createElement('a'); var parent2 = document.createElement('span'), el2 = document.createElement('a'); el.addEventListener('click', function() { el.className = 'welcomer-loading'; welcomeToWikibooks(getUser(parent)); }); el2.addEventListener('click', function() { el2.className = 'warner-loading'; var level = prompt("What level? Type '1', '2', or '3' without the quotes. Default: 1"); warn(getUser(parent), level); }); el.textContent = 'welcome'; el2.textContent = 'warn'; parent.appendChild(el); parent2.appendChild(el2); if (links !== null) links.append(parent, parent2); } var parents = document.querySelectorAll('[data-mw-revid]'); function getUser(parent) { return $(parent).closest("[data-mw-revid]").find("a.mw-userlink").find("bdi").text(); } parents.forEach((e) => OCWaddLink(e)); function OCWalternateAddLink() { mw.util.addPortletLink('p-tb', '#', 'Welcome', 'OCWwelcome-wikibooks', 'Welcome this user'); mw.util.addPortletLink('p-tb', '#', 'Warn (level 1)', 'OCWwarn1-wikibooks', 'Warn this user'); mw.util.addPortletLink('p-tb', '#', 'Warn (level 2)', 'OCWwarn2-wikibooks', 'Warn this user'); mw.util.addPortletLink('p-tb', '#', 'Warn (level 3)', 'OCWwarn3-wikibooks', 'Warn this user'); $("#OCWwelcome-wikibooks").click(() => welcomeToWikibooks(mw.config.get("wgRelevantUserName"))); $("#OCWwarn1-wikibooks").click(() => warn(mw.config.get("wgRelevantUserName"), 1)); $("#OCWwarn2-wikibooks").click(() => warn(mw.config.get("wgRelevantUserName"), 2)); $("#OCWwarn3-wikibooks").click(() => warn(mw.config.get("wgRelevantUserName"), 3)); } if(mw.config.get("wgCanonicalNamespace") == "User" || mw.config.get("wgCanonicalNamespace") == "User_talk" || mw.config.get("wgCanonicalSpecialPageName") == "Contributions") { OCWalternateAddLink(); } }); //</nowiki> 6ov54q7xpdt2yv5ib7nplzxi1pi4q25 15050 15049 2024-12-14T07:24:15Z Leaderboard 2891 15050 javascript text/javascript //<nowiki> function welcomeToWikibooks(username) { var OCWparams; var api; if (isIPwb(username)) { OCWparams = { action: 'edit', title: "User talk:" + username, appendtext: "\r\n== Welcome to Wikibooks! ==\r\n{{subst:Welcome-anon}} ~~~~", summary: "Welcomed new anonymous user with [[User:JJPMaster/OneClickWelcomer|OneClickWelcomer]]", format: 'json' }, api = new mw.Api(); api.postWithToken( 'csrf', OCWparams ).done( function ( data ) { console.log( data ); } ); } else { OCWparams = { action: 'edit', title: "User talk:" + username, appendtext: "\r\n{{subst:Welcome}} ~~~~", summary: "Welcomed new user with [[User:JJPMaster/OneClickWelcomer|OneClickWelcomer]]", format: 'json' }, api = new mw.Api(); api.postWithToken( 'csrf', OCWparams ).done( function ( data ) { console.log( data ); } ); } mw.notify($(`<a target="_blank" style="color: black; text-decoration: none;" href="/wiki/User_talk:${username}">Successfully welcomed the user. Click here to redirect to the user talk page.</a>`)); } function warn(username, level) { var OCWparams; var api; if (isIPwb(username)) { OCWparams = { action: 'edit', title: "User talk:" + username, appendtext: `\r\n== {{subst:#time: F Y}} ==\r\n{{subst:TestAnon${level}}} ~~~~`, summary: "Warned anonymous user with [[User:JJPMaster/OneClickWelcomer|OneClickWelcomer]]", format: 'json' }, api = new mw.Api(); api.postWithToken( 'csrf', OCWparams ).done( function ( data ) { console.log( data ); } ); } else { OCWparams = { action: 'edit', title: "User talk:" + username, appendtext: `\r\n== {{subst:#time: F Y}} ==\r\n{{subst:Test${level}}} ~~~~`, summary: "Warned user with [[User:JJPMaster/OneClickWelcomer|OneClickWelcomer]]", format: 'json' }, api = new mw.Api(); api.postWithToken( 'csrf', OCWparams ).done( function ( data ) { console.log( data ); } ); } mw.notify($(`<a target="_blank" style="color: black; text-decoration: none;" href="/wiki/User_talk:${username}">Successfully warned the user. Click here to redirect to the user talk page.</a>`)); } function isIPwb(username) { const regex = /(?:^(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}$)|(?:^(?:(?:[a-fA-F\d]{1,4}:){7}(?:[a-fA-F\d]{1,4}|:)|(?:[a-fA-F\d]{1,4}:){6}(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|:[a-fA-F\d]{1,4}|:)|(?:[a-fA-F\d]{1,4}:){5}(?::(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,2}|:)|(?:[a-fA-F\d]{1,4}:){4}(?:(?::[a-fA-F\d]{1,4}){0,1}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,3}|:)|(?:[a-fA-F\d]{1,4}:){3}(?:(?::[a-fA-F\d]{1,4}){0,2}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,4}|:)|(?:[a-fA-F\d]{1,4}:){2}(?:(?::[a-fA-F\d]{1,4}){0,3}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,5}|:)|(?:[a-fA-F\d]{1,4}:){1}(?:(?::[a-fA-F\d]{1,4}){0,4}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,6}|:)|(?::(?:(?::[a-fA-F\d]{1,4}){0,5}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,7}|:)))(?:%[0-9a-zA-Z]{1,})?$)/gm; if (regex.test(username)) { return true; } return false; } // Adapted from [[w:en:User:BrandonXLF/Restorer.js]] $(() => { function OCWaddLink(item) { var links = item.querySelector('.mw-usertoollinks'); var parent = document.createElement('span'), el = document.createElement('a'); var parent2 = document.createElement('span'), el2 = document.createElement('a'); el.addEventListener('click', function() { el.className = 'welcomer-loading'; welcomeToWikibooks(getUser(parent)); }); el2.addEventListener('click', function() { el2.className = 'warner-loading'; var level = prompt("What level? Type '1', '2', or '3' without the quotes. Default: 1"); warn(getUser(parent), level); }); el.textContent = 'welcome'; el2.textContent = 'warn'; parent.appendChild(el); parent2.appendChild(el2); if (links !== null) links.append(parent, parent2); } var parents = document.querySelectorAll('[data-mw-revid]'); function getUser(parent) { return $(parent).closest("[data-mw-revid]").find("a.mw-userlink").find("bdi").text(); } parents.forEach((e) => OCWaddLink(e)); function OCWalternateAddLink() { mw.util.addPortletLink('p-tb', '#', 'Welcome', 'OCWwelcome-wikibooks', 'Welcome this user'); mw.util.addPortletLink('p-tb', '#', 'Warn (level 1)', 'OCWwarn1-wikibooks', 'Warn this user'); mw.util.addPortletLink('p-tb', '#', 'Warn (level 2)', 'OCWwarn2-wikibooks', 'Warn this user'); mw.util.addPortletLink('p-tb', '#', 'Warn (level 3)', 'OCWwarn3-wikibooks', 'Warn this user'); $("#OCWwelcome-wikibooks").click(() => welcomeToWikibooks(mw.config.get("wgRelevantUserName"))); $("#OCWwarn1-wikibooks").click(() => warn(mw.config.get("wgRelevantUserName"), 1)); $("#OCWwarn2-wikibooks").click(() => warn(mw.config.get("wgRelevantUserName"), 2)); $("#OCWwarn3-wikibooks").click(() => warn(mw.config.get("wgRelevantUserName"), 3)); } if(mw.config.get("wgCanonicalNamespace") == "User" || mw.config.get("wgCanonicalNamespace") == "User_talk" || mw.config.get("wgCanonicalSpecialPageName") == "Contributions") { OCWalternateAddLink(); } }); //</nowiki> 6jmfqj7rztec98ueubjjka5u9nnq7lk 15051 15050 2024-12-21T03:13:27Z Leaderboard 2891 https://en.wikibooks.org/wiki/Wikibooks:Reading_room/Technical_Assistance#c-JJPMaster-20241221022600-JJPMaster-20241221022600 15051 javascript text/javascript //<nowiki> function welcomeToWikibooks(username) { var OCWparams; var api; if (isIPwb(username)) { OCWparams = { action: 'edit', title: "User talk:" + username, appendtext: "\r\n== Welcome to Wikibooks! ==\r\n{{subst:Welcome-anon}} ~~~~", summary: "Welcomed new anonymous user with [[User:JJPMaster/OneClickWelcomer.js|OneClickWelcomer]]", format: 'json' }, api = new mw.Api(); api.postWithToken( 'csrf', OCWparams ).done( function ( data ) { console.log( data ); } ); } else { OCWparams = { action: 'edit', title: "User talk:" + username, appendtext: "\r\n{{subst:Welcome}} ~~~~", summary: "Welcomed new user with [[User:JJPMaster/OneClickWelcomer.js|OneClickWelcomer]]", format: 'json' }, api = new mw.Api(); api.postWithToken( 'csrf', OCWparams ).done( function ( data ) { console.log( data ); } ); } mw.notify($(`<a target="_blank" style="color: black; text-decoration: none;" href="/wiki/User_talk:${username}">Successfully welcomed the user. Click here to redirect to the user talk page.</a>`)); } function warn(username, level) { var OCWparams; var api; if (isIPwb(username)) { OCWparams = { action: 'edit', title: "User talk:" + username, appendtext: `\r\n== {{subst:#time: F Y}} ==\r\n{{subst:TestAnon${level}}} ~~~~`, summary: "Warned anonymous user with [[User:JJPMaster/OneClickWelcomer.js|OneClickWelcomer]]", format: 'json' }, api = new mw.Api(); api.postWithToken( 'csrf', OCWparams ).done( function ( data ) { console.log( data ); } ); } else { OCWparams = { action: 'edit', title: "User talk:" + username, appendtext: `\r\n== {{subst:#time: F Y}} ==\r\n{{subst:Test${level}}} ~~~~`, summary: "Warned user with [[User:JJPMaster/OneClickWelcomer.js|OneClickWelcomer]]", format: 'json' }, api = new mw.Api(); api.postWithToken( 'csrf', OCWparams ).done( function ( data ) { console.log( data ); } ); } mw.notify($(`<a target="_blank" style="color: black; text-decoration: none;" href="/wiki/User_talk:${username}">Successfully warned the user. Click here to redirect to the user talk page.</a>`)); } function isIPwb(username) { const regex = /(?:^(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}$)|(?:^(?:(?:[a-fA-F\d]{1,4}:){7}(?:[a-fA-F\d]{1,4}|:)|(?:[a-fA-F\d]{1,4}:){6}(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|:[a-fA-F\d]{1,4}|:)|(?:[a-fA-F\d]{1,4}:){5}(?::(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,2}|:)|(?:[a-fA-F\d]{1,4}:){4}(?:(?::[a-fA-F\d]{1,4}){0,1}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,3}|:)|(?:[a-fA-F\d]{1,4}:){3}(?:(?::[a-fA-F\d]{1,4}){0,2}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,4}|:)|(?:[a-fA-F\d]{1,4}:){2}(?:(?::[a-fA-F\d]{1,4}){0,3}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,5}|:)|(?:[a-fA-F\d]{1,4}:){1}(?:(?::[a-fA-F\d]{1,4}){0,4}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,6}|:)|(?::(?:(?::[a-fA-F\d]{1,4}){0,5}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,7}|:)))(?:%[0-9a-zA-Z]{1,})?$)/gm; if (regex.test(username)) { return true; } return false; } // Adapted from [[w:en:User:BrandonXLF/Restorer.js]] $(() => { function getUser(parent) { return $(parent).closest("[data-mw-revid]").find("a.mw-userlink").find("bdi").text(); } function OCWaddLink(item) { var links = item.querySelector('.mw-usertoollinks'); var parent = document.createElement('span'), el = document.createElement('a'); var parent2 = document.createElement('span'), el2 = document.createElement('a'); el.addEventListener('click', function() { el.className = 'welcomer-loading'; welcomeToWikibooks(getUser(parent)); }); el2.addEventListener('click', function() { el2.className = 'warner-loading'; var level = prompt("What level? Type '1', '2', or '3' without the quotes. Default: 1"); warn(getUser(parent), level); }); el.textContent = 'welcome'; el2.textContent = 'warn'; parent.appendChild(el); parent2.appendChild(el2); if (links !== null) links.append(parent, parent2); } var parents = document.querySelectorAll('[data-mw-revid]'); parents.forEach((e) => OCWaddLink(e)); function callback(mutationsList, observer) { mutationsList.forEach((mutation) => { if (mutation.type === 'childList') { mutation.addedNodes.forEach((node) => { if (node.nodeType === Node.ELEMENT_NODE && node.hasAttribute('data-mw-revid')) { console.log('Element added:', node); } if (node.nodeType === Node.ELEMENT_NODE) { const matchingDescendants = node.querySelectorAll('[data-mw-revid]'); matchingDescendants.forEach((descendant) => { OCWaddLink(descendant) }); } }); } }); } const mo = new MutationObserver(callback); mo.observe(document.getElementsByClassName("mw-changeslist")[0], { childList: true, attributes: true, subtree: true, characterData: true }); function OCWalternateAddLink() { mw.util.addPortletLink('p-tb', '#', 'Welcome', 'OCWwelcome-wikibooks', 'Welcome this user'); mw.util.addPortletLink('p-tb', '#', 'Warn (level 1)', 'OCWwarn1-wikibooks', 'Warn this user'); mw.util.addPortletLink('p-tb', '#', 'Warn (level 2)', 'OCWwarn2-wikibooks', 'Warn this user'); mw.util.addPortletLink('p-tb', '#', 'Warn (level 3)', 'OCWwarn3-wikibooks', 'Warn this user'); $("#OCWwelcome-wikibooks").click(() => welcomeToWikibooks(mw.config.get("wgRelevantUserName"))); $("#OCWwarn1-wikibooks").click(() => warn(mw.config.get("wgRelevantUserName"), 1)); $("#OCWwarn2-wikibooks").click(() => warn(mw.config.get("wgRelevantUserName"), 2)); $("#OCWwarn3-wikibooks").click(() => warn(mw.config.get("wgRelevantUserName"), 3)); } if(mw.config.get("wgCanonicalNamespace") == "User" || mw.config.get("wgCanonicalNamespace") == "User_talk" || mw.config.get("wgCanonicalSpecialPageName") == "Contributions") { OCWalternateAddLink(); } }); //</nowiki> dnj57wfoszgsc61h6rwrqfxzregqoty 15052 15051 2024-12-23T02:58:55Z Leaderboard 2891 https://en.wikibooks.org/wiki/Wikibooks:Reading_room/Technical_Assistance#c-JJPMaster-20241222195700-Leaderboard-20241221031400 15052 javascript text/javascript //<nowiki> function welcomeToWikibooks(username) { var OCWparams; var api; if (isIPwb(username)) { OCWparams = { action: 'edit', title: "User talk:" + username, appendtext: "\r\n== Welcome to Wikibooks! ==\r\n{{subst:Welcome-anon}} ~~~~", summary: "Welcomed new anonymous user with [[User:JJPMaster/OneClickWelcomer.js|OneClickWelcomer]]", format: 'json' }, api = new mw.Api(); api.postWithToken( 'csrf', OCWparams ).done( function ( data ) { console.log( data ); } ); } else { OCWparams = { action: 'edit', title: "User talk:" + username, appendtext: "\r\n{{subst:Welcome}} ~~~~", summary: "Welcomed new user with [[User:JJPMaster/OneClickWelcomer.js|OneClickWelcomer]]", format: 'json' }, api = new mw.Api(); api.postWithToken( 'csrf', OCWparams ).done( function ( data ) { console.log( data ); } ); } mw.notify($(`<a target="_blank" style="color: black; text-decoration: none;" href="/wiki/User_talk:${username}">Successfully welcomed the user. Click here to redirect to the user talk page.</a>`)); } function warn(username, level) { var OCWparams; var api; if (isIPwb(username)) { OCWparams = { action: 'edit', title: "User talk:" + username, appendtext: `\r\n== {{subst:#time: F Y}} ==\r\n{{subst:TestAnon${level}}} ~~~~`, summary: "Warned anonymous user with [[User:JJPMaster/OneClickWelcomer.js|OneClickWelcomer]]", format: 'json' }, api = new mw.Api(); api.postWithToken( 'csrf', OCWparams ).done( function ( data ) { console.log( data ); } ); } else { OCWparams = { action: 'edit', title: "User talk:" + username, appendtext: `\r\n== {{subst:#time: F Y}} ==\r\n{{subst:Test${level}}} ~~~~`, summary: "Warned user with [[User:JJPMaster/OneClickWelcomer.js|OneClickWelcomer]]", format: 'json' }, api = new mw.Api(); api.postWithToken( 'csrf', OCWparams ).done( function ( data ) { console.log( data ); } ); } mw.notify($(`<a target="_blank" style="color: black; text-decoration: none;" href="/wiki/User_talk:${username}">Successfully warned the user. Click here to redirect to the user talk page.</a>`)); } function isIPwb(username) { const regex = /(?:^(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}$)|(?:^(?:(?:[a-fA-F\d]{1,4}:){7}(?:[a-fA-F\d]{1,4}|:)|(?:[a-fA-F\d]{1,4}:){6}(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|:[a-fA-F\d]{1,4}|:)|(?:[a-fA-F\d]{1,4}:){5}(?::(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,2}|:)|(?:[a-fA-F\d]{1,4}:){4}(?:(?::[a-fA-F\d]{1,4}){0,1}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,3}|:)|(?:[a-fA-F\d]{1,4}:){3}(?:(?::[a-fA-F\d]{1,4}){0,2}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,4}|:)|(?:[a-fA-F\d]{1,4}:){2}(?:(?::[a-fA-F\d]{1,4}){0,3}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,5}|:)|(?:[a-fA-F\d]{1,4}:){1}(?:(?::[a-fA-F\d]{1,4}){0,4}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,6}|:)|(?::(?:(?::[a-fA-F\d]{1,4}){0,5}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,7}|:)))(?:%[0-9a-zA-Z]{1,})?$)/gm; if (regex.test(username)) { return true; } return false; } // Adapted from [[w:en:User:BrandonXLF/Restorer.js]] $(() => { function getUser(parent) { return $(parent).closest("[data-mw-revid]").find("a.mw-userlink").find("bdi").text(); } function OCWaddLink(item) { var links = item.querySelector('.mw-usertoollinks'); var parent = document.createElement('span'), el = document.createElement('a'); var parent2 = document.createElement('span'), el2 = document.createElement('a'); el.addEventListener('click', function() { el.className = 'welcomer-loading'; welcomeToWikibooks(getUser(parent)); }); el2.addEventListener('click', function(e) { el2.className = 'warner-loading'; var level = prompt("What level? Type '1', '2', or '3' without the quotes. Default: 1", "1"); if (!level) return; warn(getUser(parent), level); }); el.textContent = 'welcome'; el2.textContent = 'warn'; parent.appendChild(el); parent2.appendChild(el2); if (links !== null) links.append(parent, parent2); } var parents = document.querySelectorAll('[data-mw-revid]'); parents.forEach((e) => OCWaddLink(e)); function callback(mutationsList, observer) { mutationsList.forEach((mutation) => { if (mutation.type === 'childList') { mutation.addedNodes.forEach((node) => { if (node.nodeType === Node.ELEMENT_NODE && node.hasAttribute('data-mw-revid')) { console.log('Element added:', node); } if (node.nodeType === Node.ELEMENT_NODE) { const matchingDescendants = node.querySelectorAll('[data-mw-revid]'); matchingDescendants.forEach((descendant) => { OCWaddLink(descendant) }); } }); } }); } if (mw.config.get("wgCanonicalSpecialPageName") == "Recentchanges" || mw.config.get("wgCanonicalSpecialPageName") == "Relatedchanges" || mw.config.get("wgCanonicalSpecialPageName") == "Watchlist") { const mo = new MutationObserver(callback); mo.observe(document.getElementsByClassName("mw-changeslist")[0], { childList: true, attributes: true, subtree: true, characterData: true }); } function OCWalternateAddLink() { mw.util.addPortletLink('p-tb', '#', 'Welcome', 'OCWwelcome-wikibooks', 'Welcome this user'); mw.util.addPortletLink('p-tb', '#', 'Warn (level 1)', 'OCWwarn1-wikibooks', 'Warn this user'); mw.util.addPortletLink('p-tb', '#', 'Warn (level 2)', 'OCWwarn2-wikibooks', 'Warn this user'); mw.util.addPortletLink('p-tb', '#', 'Warn (level 3)', 'OCWwarn3-wikibooks', 'Warn this user'); $("#OCWwelcome-wikibooks").click(() => welcomeToWikibooks(mw.config.get("wgRelevantUserName"))); $("#OCWwarn1-wikibooks").click(() => warn(mw.config.get("wgRelevantUserName"), 1)); $("#OCWwarn2-wikibooks").click(() => warn(mw.config.get("wgRelevantUserName"), 2)); $("#OCWwarn3-wikibooks").click(() => warn(mw.config.get("wgRelevantUserName"), 3)); } if(mw.config.get("wgCanonicalNamespace") == "User" || mw.config.get("wgCanonicalNamespace") == "User_talk" || mw.config.get("wgCanonicalSpecialPageName") == "Contributions") { OCWalternateAddLink(); } }); //</nowiki> b2ykjroz3dxl1fgs894zpmhmig7al3k 15053 15052 2026-01-12T16:42:04Z JJPMaster 3394 temporary accounts 15053 javascript text/javascript //<nowiki> function welcomeToWikibooks(username) { var OCWparams; var api; if (isUnregisteredWb(username)) { OCWparams = { action: 'edit', title: "User talk:" + username, appendtext: "\r\n== Welcome to Wikibooks! ==\r\n{{subst:Welcome-anon}} ~~~~", summary: "Welcomed new anonymous user with [[User:JJPMaster/OneClickWelcomer.js|OneClickWelcomer]]", format: 'json' }, api = new mw.Api(); api.postWithToken( 'csrf', OCWparams ).done( function ( data ) { console.log( data ); } ); } else { OCWparams = { action: 'edit', title: "User talk:" + username, appendtext: "\r\n{{subst:Welcome}} ~~~~", summary: "Welcomed new user with [[User:JJPMaster/OneClickWelcomer.js|OneClickWelcomer]]", format: 'json' }, api = new mw.Api(); api.postWithToken( 'csrf', OCWparams ).done( function ( data ) { console.log( data ); } ); } mw.notify($(`<a target="_blank" style="color: black; text-decoration: none;" href="/wiki/User_talk:${username}">Successfully welcomed the user. Click here to redirect to the user talk page.</a>`)); } function warn(username, level) { var OCWparams; var api; if (isUnregisteredWb(username)) { OCWparams = { action: 'edit', title: "User talk:" + username, appendtext: `\r\n== {{subst:#time: F Y}} ==\r\n{{subst:TestAnon${level}}} ~~~~`, summary: "Warned anonymous user with [[User:JJPMaster/OneClickWelcomer.js|OneClickWelcomer]]", format: 'json' }, api = new mw.Api(); api.postWithToken( 'csrf', OCWparams ).done( function ( data ) { console.log( data ); } ); } else { OCWparams = { action: 'edit', title: "User talk:" + username, appendtext: `\r\n== {{subst:#time: F Y}} ==\r\n{{subst:Test${level}}} ~~~~`, summary: "Warned user with [[User:JJPMaster/OneClickWelcomer.js|OneClickWelcomer]]", format: 'json' }, api = new mw.Api(); api.postWithToken( 'csrf', OCWparams ).done( function ( data ) { console.log( data ); } ); } mw.notify($(`<a target="_blank" style="color: black; text-decoration: none;" href="/wiki/User_talk:${username}">Successfully warned the user. Click here to redirect to the user talk page.</a>`)); } function isUnregisteredWb(username) { const regex = /^~2.+\d$/gm; if (.test(username)) { return true; } return false; } // Adapted from [[w:en:User:BrandonXLF/Restorer.js]] $(() => { function getUser(parent) { return $(parent).closest("[data-mw-revid]").find("a.mw-userlink").find("bdi").text(); } function OCWaddLink(item) { var links = item.querySelector('.mw-usertoollinks'); var parent = document.createElement('span'), el = document.createElement('a'); var parent2 = document.createElement('span'), el2 = document.createElement('a'); el.addEventListener('click', function() { el.className = 'welcomer-loading'; welcomeToWikibooks(getUser(parent)); }); el2.addEventListener('click', function(e) { el2.className = 'warner-loading'; var level = prompt("What level? Type '1', '2', or '3' without the quotes. Default: 1", "1"); if (!level) return; warn(getUser(parent), level); }); el.textContent = 'welcome'; el2.textContent = 'warn'; parent.appendChild(el); parent2.appendChild(el2); if (links !== null) links.append(parent, parent2); } var parents = document.querySelectorAll('[data-mw-revid]'); parents.forEach((e) => OCWaddLink(e)); function callback(mutationsList, observer) { mutationsList.forEach((mutation) => { if (mutation.type === 'childList') { mutation.addedNodes.forEach((node) => { if (node.nodeType === Node.ELEMENT_NODE && node.hasAttribute('data-mw-revid')) { console.log('Element added:', node); } if (node.nodeType === Node.ELEMENT_NODE) { const matchingDescendants = node.querySelectorAll('[data-mw-revid]'); matchingDescendants.forEach((descendant) => { OCWaddLink(descendant) }); } }); } }); } if (mw.config.get("wgCanonicalSpecialPageName") == "Recentchanges" || mw.config.get("wgCanonicalSpecialPageName") == "Relatedchanges" || mw.config.get("wgCanonicalSpecialPageName") == "Watchlist") { const mo = new MutationObserver(callback); mo.observe(document.getElementsByClassName("mw-changeslist")[0], { childList: true, attributes: true, subtree: true, characterData: true }); } function OCWalternateAddLink() { mw.util.addPortletLink('p-tb', '#', 'Welcome', 'OCWwelcome-wikibooks', 'Welcome this user'); mw.util.addPortletLink('p-tb', '#', 'Warn (level 1)', 'OCWwarn1-wikibooks', 'Warn this user'); mw.util.addPortletLink('p-tb', '#', 'Warn (level 2)', 'OCWwarn2-wikibooks', 'Warn this user'); mw.util.addPortletLink('p-tb', '#', 'Warn (level 3)', 'OCWwarn3-wikibooks', 'Warn this user'); $("#OCWwelcome-wikibooks").click(() => welcomeToWikibooks(mw.config.get("wgRelevantUserName"))); $("#OCWwarn1-wikibooks").click(() => warn(mw.config.get("wgRelevantUserName"), 1)); $("#OCWwarn2-wikibooks").click(() => warn(mw.config.get("wgRelevantUserName"), 2)); $("#OCWwarn3-wikibooks").click(() => warn(mw.config.get("wgRelevantUserName"), 3)); } if(mw.config.get("wgCanonicalNamespace") == "User" || mw.config.get("wgCanonicalNamespace") == "User_talk" || mw.config.get("wgCanonicalSpecialPageName") == "Contributions") { OCWalternateAddLink(); } }); //</nowiki> e4b2pifvkymk5feqvupqzgm1c85s542 15054 15053 2026-01-12T16:45:34Z JJPMaster 3394 fix 15054 javascript text/javascript //<nowiki> function welcomeToWikibooks(username) { var OCWparams; var api; if (isUnregisteredWb(username)) { OCWparams = { action: 'edit', title: "User talk:" + username, appendtext: "\r\n== Welcome to Wikibooks! ==\r\n{{subst:Welcome-anon}} ~~~~", summary: "Welcomed new anonymous user with [[User:JJPMaster/OneClickWelcomer.js|OneClickWelcomer]]", format: 'json' }, api = new mw.Api(); api.postWithToken( 'csrf', OCWparams ).done( function ( data ) { console.log( data ); } ); } else { OCWparams = { action: 'edit', title: "User talk:" + username, appendtext: "\r\n{{subst:Welcome}} ~~~~", summary: "Welcomed new user with [[User:JJPMaster/OneClickWelcomer.js|OneClickWelcomer]]", format: 'json' }, api = new mw.Api(); api.postWithToken( 'csrf', OCWparams ).done( function ( data ) { console.log( data ); } ); } mw.notify($(`<a target="_blank" style="color: black; text-decoration: none;" href="/wiki/User_talk:${username}">Successfully welcomed the user. Click here to redirect to the user talk page.</a>`)); } function warn(username, level) { var OCWparams; var api; if (isUnregisteredWb(username)) { OCWparams = { action: 'edit', title: "User talk:" + username, appendtext: `\r\n== {{subst:#time: F Y}} ==\r\n{{subst:TestAnon${level}}} ~~~~`, summary: "Warned anonymous user with [[User:JJPMaster/OneClickWelcomer.js|OneClickWelcomer]]", format: 'json' }, api = new mw.Api(); api.postWithToken( 'csrf', OCWparams ).done( function ( data ) { console.log( data ); } ); } else { OCWparams = { action: 'edit', title: "User talk:" + username, appendtext: `\r\n== {{subst:#time: F Y}} ==\r\n{{subst:Test${level}}} ~~~~`, summary: "Warned user with [[User:JJPMaster/OneClickWelcomer.js|OneClickWelcomer]]", format: 'json' }, api = new mw.Api(); api.postWithToken( 'csrf', OCWparams ).done( function ( data ) { console.log( data ); } ); } mw.notify($(`<a target="_blank" style="color: black; text-decoration: none;" href="/wiki/User_talk:${username}">Successfully warned the user. Click here to redirect to the user talk page.</a>`)); } function isUnregisteredWb(username) { const regex = /^~2.+\d$/gm; if (regex.test(username)) { return true; } return false; } // Adapted from [[w:en:User:BrandonXLF/Restorer.js]] $(() => { function getUser(parent) { return $(parent).closest("[data-mw-revid]").find("a.mw-userlink").find("bdi").text(); } function OCWaddLink(item) { var links = item.querySelector('.mw-usertoollinks'); var parent = document.createElement('span'), el = document.createElement('a'); var parent2 = document.createElement('span'), el2 = document.createElement('a'); el.addEventListener('click', function() { el.className = 'welcomer-loading'; welcomeToWikibooks(getUser(parent)); }); el2.addEventListener('click', function(e) { el2.className = 'warner-loading'; var level = prompt("What level? Type '1', '2', or '3' without the quotes. Default: 1", "1"); if (!level) return; warn(getUser(parent), level); }); el.textContent = 'welcome'; el2.textContent = 'warn'; parent.appendChild(el); parent2.appendChild(el2); if (links !== null) links.append(parent, parent2); } var parents = document.querySelectorAll('[data-mw-revid]'); parents.forEach((e) => OCWaddLink(e)); function callback(mutationsList, observer) { mutationsList.forEach((mutation) => { if (mutation.type === 'childList') { mutation.addedNodes.forEach((node) => { if (node.nodeType === Node.ELEMENT_NODE && node.hasAttribute('data-mw-revid')) { console.log('Element added:', node); } if (node.nodeType === Node.ELEMENT_NODE) { const matchingDescendants = node.querySelectorAll('[data-mw-revid]'); matchingDescendants.forEach((descendant) => { OCWaddLink(descendant) }); } }); } }); } if (mw.config.get("wgCanonicalSpecialPageName") == "Recentchanges" || mw.config.get("wgCanonicalSpecialPageName") == "Relatedchanges" || mw.config.get("wgCanonicalSpecialPageName") == "Watchlist") { const mo = new MutationObserver(callback); mo.observe(document.getElementsByClassName("mw-changeslist")[0], { childList: true, attributes: true, subtree: true, characterData: true }); } function OCWalternateAddLink() { mw.util.addPortletLink('p-tb', '#', 'Welcome', 'OCWwelcome-wikibooks', 'Welcome this user'); mw.util.addPortletLink('p-tb', '#', 'Warn (level 1)', 'OCWwarn1-wikibooks', 'Warn this user'); mw.util.addPortletLink('p-tb', '#', 'Warn (level 2)', 'OCWwarn2-wikibooks', 'Warn this user'); mw.util.addPortletLink('p-tb', '#', 'Warn (level 3)', 'OCWwarn3-wikibooks', 'Warn this user'); $("#OCWwelcome-wikibooks").click(() => welcomeToWikibooks(mw.config.get("wgRelevantUserName"))); $("#OCWwarn1-wikibooks").click(() => warn(mw.config.get("wgRelevantUserName"), 1)); $("#OCWwarn2-wikibooks").click(() => warn(mw.config.get("wgRelevantUserName"), 2)); $("#OCWwarn3-wikibooks").click(() => warn(mw.config.get("wgRelevantUserName"), 3)); } if(mw.config.get("wgCanonicalNamespace") == "User" || mw.config.get("wgCanonicalNamespace") == "User_talk" || mw.config.get("wgCanonicalSpecialPageName") == "Contributions") { OCWalternateAddLink(); } }); //</nowiki> 1ss4u57xgxck9nnsmbqavm50vvkzrdh 15055 15054 2026-08-01T17:30:47Z QueerEcofeminist 1879 [[:en:MediaWiki:Gadget-OneClickWelcomer.js]] पासून ७ आवर्तने आयात केलीत 15054 javascript text/javascript //<nowiki> function welcomeToWikibooks(username) { var OCWparams; var api; if (isUnregisteredWb(username)) { OCWparams = { action: 'edit', title: "User talk:" + username, appendtext: "\r\n== Welcome to Wikibooks! ==\r\n{{subst:Welcome-anon}} ~~~~", summary: "Welcomed new anonymous user with [[User:JJPMaster/OneClickWelcomer.js|OneClickWelcomer]]", format: 'json' }, api = new mw.Api(); api.postWithToken( 'csrf', OCWparams ).done( function ( data ) { console.log( data ); } ); } else { OCWparams = { action: 'edit', title: "User talk:" + username, appendtext: "\r\n{{subst:Welcome}} ~~~~", summary: "Welcomed new user with [[User:JJPMaster/OneClickWelcomer.js|OneClickWelcomer]]", format: 'json' }, api = new mw.Api(); api.postWithToken( 'csrf', OCWparams ).done( function ( data ) { console.log( data ); } ); } mw.notify($(`<a target="_blank" style="color: black; text-decoration: none;" href="/wiki/User_talk:${username}">Successfully welcomed the user. Click here to redirect to the user talk page.</a>`)); } function warn(username, level) { var OCWparams; var api; if (isUnregisteredWb(username)) { OCWparams = { action: 'edit', title: "User talk:" + username, appendtext: `\r\n== {{subst:#time: F Y}} ==\r\n{{subst:TestAnon${level}}} ~~~~`, summary: "Warned anonymous user with [[User:JJPMaster/OneClickWelcomer.js|OneClickWelcomer]]", format: 'json' }, api = new mw.Api(); api.postWithToken( 'csrf', OCWparams ).done( function ( data ) { console.log( data ); } ); } else { OCWparams = { action: 'edit', title: "User talk:" + username, appendtext: `\r\n== {{subst:#time: F Y}} ==\r\n{{subst:Test${level}}} ~~~~`, summary: "Warned user with [[User:JJPMaster/OneClickWelcomer.js|OneClickWelcomer]]", format: 'json' }, api = new mw.Api(); api.postWithToken( 'csrf', OCWparams ).done( function ( data ) { console.log( data ); } ); } mw.notify($(`<a target="_blank" style="color: black; text-decoration: none;" href="/wiki/User_talk:${username}">Successfully warned the user. Click here to redirect to the user talk page.</a>`)); } function isUnregisteredWb(username) { const regex = /^~2.+\d$/gm; if (regex.test(username)) { return true; } return false; } // Adapted from [[w:en:User:BrandonXLF/Restorer.js]] $(() => { function getUser(parent) { return $(parent).closest("[data-mw-revid]").find("a.mw-userlink").find("bdi").text(); } function OCWaddLink(item) { var links = item.querySelector('.mw-usertoollinks'); var parent = document.createElement('span'), el = document.createElement('a'); var parent2 = document.createElement('span'), el2 = document.createElement('a'); el.addEventListener('click', function() { el.className = 'welcomer-loading'; welcomeToWikibooks(getUser(parent)); }); el2.addEventListener('click', function(e) { el2.className = 'warner-loading'; var level = prompt("What level? Type '1', '2', or '3' without the quotes. Default: 1", "1"); if (!level) return; warn(getUser(parent), level); }); el.textContent = 'welcome'; el2.textContent = 'warn'; parent.appendChild(el); parent2.appendChild(el2); if (links !== null) links.append(parent, parent2); } var parents = document.querySelectorAll('[data-mw-revid]'); parents.forEach((e) => OCWaddLink(e)); function callback(mutationsList, observer) { mutationsList.forEach((mutation) => { if (mutation.type === 'childList') { mutation.addedNodes.forEach((node) => { if (node.nodeType === Node.ELEMENT_NODE && node.hasAttribute('data-mw-revid')) { console.log('Element added:', node); } if (node.nodeType === Node.ELEMENT_NODE) { const matchingDescendants = node.querySelectorAll('[data-mw-revid]'); matchingDescendants.forEach((descendant) => { OCWaddLink(descendant) }); } }); } }); } if (mw.config.get("wgCanonicalSpecialPageName") == "Recentchanges" || mw.config.get("wgCanonicalSpecialPageName") == "Relatedchanges" || mw.config.get("wgCanonicalSpecialPageName") == "Watchlist") { const mo = new MutationObserver(callback); mo.observe(document.getElementsByClassName("mw-changeslist")[0], { childList: true, attributes: true, subtree: true, characterData: true }); } function OCWalternateAddLink() { mw.util.addPortletLink('p-tb', '#', 'Welcome', 'OCWwelcome-wikibooks', 'Welcome this user'); mw.util.addPortletLink('p-tb', '#', 'Warn (level 1)', 'OCWwarn1-wikibooks', 'Warn this user'); mw.util.addPortletLink('p-tb', '#', 'Warn (level 2)', 'OCWwarn2-wikibooks', 'Warn this user'); mw.util.addPortletLink('p-tb', '#', 'Warn (level 3)', 'OCWwarn3-wikibooks', 'Warn this user'); $("#OCWwelcome-wikibooks").click(() => welcomeToWikibooks(mw.config.get("wgRelevantUserName"))); $("#OCWwarn1-wikibooks").click(() => warn(mw.config.get("wgRelevantUserName"), 1)); $("#OCWwarn2-wikibooks").click(() => warn(mw.config.get("wgRelevantUserName"), 2)); $("#OCWwarn3-wikibooks").click(() => warn(mw.config.get("wgRelevantUserName"), 3)); } if(mw.config.get("wgCanonicalNamespace") == "User" || mw.config.get("wgCanonicalNamespace") == "User_talk" || mw.config.get("wgCanonicalSpecialPageName") == "Contributions") { OCWalternateAddLink(); } }); //</nowiki> 1ss4u57xgxck9nnsmbqavm50vvkzrdh मिडियाविकी:Gadget-bottomtabs.css 8 4178 15056 2008-01-18T03:12:01Z Mike.lifeguard 117 for better bottom tabs 15056 css text/css /* bottom tab styling (not for IE currently) */ #mytabs { margin: -0.3em 0 0 11.5em; white-space:nowrap; line-height: 1.1em; overflow: visible; border-collapse: collapse; padding: 0 0 0 1em; list-style: none; font-size: 95%; } #mytabs .hiddenStructure { display: none; } #mytabs li { display: inline; border: 1px solid #aaaaaa; border-top: none; padding: 0.1em 0 0 0; margin: 0 0.3em 0 0; overflow: visible; background: White; } #mytabs li.selected { border-color: #fabd23; padding: 0.2em 0 0 0; } #mytabs li a { background-color: White; color: #002bb8; border: none; padding: 0.3em 0.8em 0 0.8em; text-decoration: none; text-transform: lowercase; position: relative; margin: 0; } #mytabs li.selected a { z-index: 3; } #mytabs .new a { color:#ba0000; } #mytabs li a:hover { z-index: 3; text-decoration: none; } #mytabs h5 { display: none; } #mytabs li.istalk { margin-right: 0; } #mytabs li.istalk a { padding-right: 0.5em; } #mytabs-ca-addsection a { padding-left: 0.4em; padding-right: 0.4em; } /* offsets to distinguish the tab groups */ li#mytabs-ca-talk { margin-right: 1.6em; } li#mytabs-ca-watch, li#mytabs-ca-unwatch, li#mytabs-ca-varlang-0, li#mytabs-ca-print { margin-left: 1.6em; } /* remove comment tags if bottom tabs should be rounded as well in moz */ /* #mytabs li, #mytabs li a { -moz-border-radius-bottomleft: 1em; -moz-border-radius-bottomright: 1em; }*/ ewh5rzy3kqfl3nm1c5dc0r6aqtxc29g 15057 15056 2009-05-21T19:27:44Z Darklama 2894 tweaked style 15057 css text/css /* bottom tab styling (not for IE currently) */ #mytabs { margin: -0.3em 0 0 11.5em; white-space: nowrap; width: 76%; line-height: 1.1em; overflow: visible; background: none; border-collapse: collapse; padding-left: 1em; list-style: none; font-size: 95%; } #mytabs ul { list-style: none; } #mytabs li { display:inline; border:1px solid #aaa; border-bottom:0px; padding:0 0 0.1em 0; margin:0 0.3em 0 0; overflow:visible; background:white; } #mytabs li.selected { border-color:#fabd23; padding:0 0 0.2em 0; font-weight:bold; } #mytabs li a { background-color: #fbfbfb; color: #002bb8; border: none; padding:0 0.8em 0.3em; z-index:0; margin:0; text-decoration: none; } #mytabs li.selected a { z-index: 3; padding:0 1em 0.2em; background-color: white; } #mytabs .new a { color: #ba0000; } #mytabs li a:hover { z-index: 3; text-decoration: none; background-color: white; } #mytabs h5 { display: none; } #mytabs li.istalk { margin-right: 0; } #mytabs li.istalk a { padding-right:0.5em; } #mytabs-ca-addsection a { padding:0 0.4em; } #mytabs .pBody { background-color:transparent; color: inherit; border-collapse: inherit; border:0; padding:0; } #mytabs .hiddenStructure { display: none; } #mytabs li a { text-transform: lowercase; } /* offsets to distinguish the tab groups */ li#mytabs-ca-talk { margin-right: 1.6em; } li#mytabs-ca-watch, li#mytabs-ca-unwatch, li#mytabs-ca-varlang-0, li#mytabs-ca-print { margin-left: 1.6em; } /* remove comment tags if bottom tabs should be rounded as well in moz */ /* #mytabs li, #mytabs li a { -moz-border-radius-bottomleft: 1em; -moz-border-radius-bottomright: 1em; }*/ 0809fcl4y3sw4bq3d08gp4j5g5xlofk 15058 15057 2009-05-21T19:37:03Z Darklama 2894 tweaked style 15058 css text/css /* bottom tab styling (not for IE currently) */ #mytabs { margin: -0.3em 0 0 11.5em; white-space: nowrap; width: 76%; line-height: 1.1em; overflow: visible; background: none; border-collapse: collapse; padding-left: 1em; list-style: none; font-size: 95%; } #mytabs ul { list-style: none; } #mytabs li { display:inline; border:1px solid #aaa; border-top:0px; padding-left:0.1em; margin:0 0.3em 0 0; overflow:visible; background:white; } #mytabs li.selected { border-color:#fabd23; padding-left:0.2em; font-weight:bold; } #mytabs li a { background-color: #fbfbfb; color: #002bb8; border: none; padding:0.3em 0.8em 0; z-index:0; margin:0; text-decoration: none; } #mytabs li.selected a { z-index: 3; padding:0.2em 1em 0em; background-color: white; } #mytabs .new a { color: #ba0000; } #mytabs li a:hover { z-index: 3; text-decoration: none; background-color: white; } #mytabs h5 { display: none; } #mytabs li.istalk { margin-right: 0; } #mytabs li.istalk a { padding-right:0.5em; } #mytabs-ca-addsection a { padding:0 0.4em; } #mytabs .pBody { background-color:transparent; color: inherit; border-collapse: inherit; border:0; padding:0; } #mytabs .hiddenStructure { display: none; } #mytabs li a { text-transform: lowercase; } /* offsets to distinguish the tab groups */ li#mytabs-ca-talk { margin-right: 1.6em; } li#mytabs-ca-watch, li#mytabs-ca-unwatch, li#mytabs-ca-varlang-0, li#mytabs-ca-print { margin-left: 1.6em; } /* remove comment tags if bottom tabs should be rounded as well in moz */ /* #mytabs li, #mytabs li a { -moz-border-radius-bottomleft: 1em; -moz-border-radius-bottomright: 1em; }*/ 4hax7d624apok0jbr1fklbjl6dxvv41 15059 15058 2009-05-21T19:43:55Z Darklama 2894 tweaked 15059 css text/css /* bottom tab styling (not for IE currently) */ #mytabs { margin: -0.3em 0 0 11.5em; white-space: nowrap; width: 76%; line-height: 1.1em; overflow: visible; background: none; border-collapse: collapse; padding-left: 1em; list-style: none; font-size: 95%; } #mytabs ul { list-style: none; } #mytabs li { display:inline; border:1px solid #aaaaaa; border-top:0px; padding-top:0.1em; margin:0 0.3em 0 0; overflow:visible; background:white; } #mytabs li.selected { border-color:#fabd23; padding-top:0.2em; font-weight:bold; } #mytabs li a { background-color:#fbfbfb; color:#002bb8; border:0px; padding:0.3em 0.8em 0; z-index:0; margin:0; text-decoration:none; } #mytabs li.selected a { z-index:3; padding:0.2em 1em 0em; background-color:white; } #mytabs .new a { color:#ba0000; } #mytabs li a:hover { z-index:3; text-decoration:none; background-color:white; } #mytabs h5 { display:none; } #mytabs li.istalk { margin-right:0; } #mytabs li.istalk a { padding-right:0.5em; } #mytabs-ca-addsection a { padding:0 0.4em; } #mytabs .pBody { background-color:transparent; color:inherit; border-collapse:inherit; border:0; padding:0; } #mytabs .hiddenStructure { display:none; } #mytabs li a { text-transform:lowercase; } /* offsets to distinguish the tab groups */ li#mytabs-ca-talk { margin-right:1.6em; } li#mytabs-ca-watch, li#mytabs-ca-unwatch, li#mytabs-ca-varlang-0, li#mytabs-ca-print { margin-left:1.6em; } /* remove comment tags if bottom tabs should be rounded as well in moz */ /* #mytabs li, #mytabs li a { -moz-border-radius-bottomleft: 1em; -moz-border-radius-bottomright: 1em; }*/ fhuvg52axuzucd89waxprcot0c7v74m 15060 15059 2010-12-04T22:02:42Z Darklama 2894 updated to reflect changes to implementation 15060 css text/css /* bottom tab styling (not for IE currently) */ #b-p-cactions { margin: -0.3em 0 0 11.5em; white-space: nowrap; width: 76%; line-height: 1.1em; overflow: visible; background: none; border-collapse: collapse; padding-left: 1em; list-style: none; font-size: 95%; } #b-p-cactions ul { list-style: none; } #b-p-cactions li { display:inline; border:1px solid #aaaaaa; border-top:0px; padding-top:0.1em; margin:0 0.3em 0 0; overflow:visible; background:white; } #b-p-cactions li.selected { border-color:#fabd23; padding-top:0.2em; font-weight:bold; } #b-p-cactions li a { background-color:#fbfbfb; color:#002bb8; border:0px; padding:0.3em 0.8em 0; z-index:0; margin:0; text-decoration:none; } #b-p-cactions li.selected a { z-index:3; padding:0.2em 1em 0em; background-color:white; } #b-p-cactions .new a { color:#ba0000; } #b-p-cactions li a:hover { z-index:3; text-decoration:none; background-color:white; } #b-p-cactions h5 { display:none; } #b-p-cactions li.istalk { margin-right:0; } #b-p-cactions li.istalk a { padding-right:0.5em; } #b-p-cactions-ca-addsection a { padding:0 0.4em; } #b-p-cactions .pBody { background-color:transparent; color:inherit; border-collapse:inherit; border:0; padding:0; } #b-p-cactions .hiddenStructure { display:none; } #b-p-cactions li a { text-transform:lowercase; } /* offsets to distinguish the tab groups */ li#b-ca-talk { margin-right:1.6em; } li#b-ca-watch, li#mytabs-ca-unwatch, li#mytabs-ca-varlang-0, li#mytabs-ca-print { margin-left:1.6em; } qjl1ygyeyy0n780fea5pytqxsv315iq 15061 15060 2010-12-04T22:09:51Z Darklama 2894 missed some 15061 css text/css /* bottom tab styling (not for IE currently) */ #b-p-cactions { margin: -0.3em 0 0 11.5em; white-space: nowrap; width: 76%; line-height: 1.1em; overflow: visible; background: none; border-collapse: collapse; padding-left: 1em; list-style: none; font-size: 95%; } #b-p-cactions ul { list-style: none; } #b-p-cactions li { display:inline; border:1px solid #aaaaaa; border-top:0px; padding-top:0.1em; margin:0 0.3em 0 0; overflow:visible; background:white; } #b-p-cactions li.selected { border-color:#fabd23; padding-top:0.2em; font-weight:bold; } #b-p-cactions li a { background-color:#fbfbfb; color:#002bb8; border:0px; padding:0.3em 0.8em 0; z-index:0; margin:0; text-decoration:none; } #b-p-cactions li.selected a { z-index:3; padding:0.2em 1em 0em; background-color:white; } #b-p-cactions .new a { color:#ba0000; } #b-p-cactions li a:hover { z-index:3; text-decoration:none; background-color:white; } #b-p-cactions h5 { display:none; } #b-p-cactions li.istalk { margin-right:0; } #b-p-cactions li.istalk a { padding-right:0.5em; } #b-p-cactions-ca-addsection a { padding:0 0.4em; } #b-p-cactions .pBody { background-color:transparent; color:inherit; border-collapse:inherit; border:0; padding:0; } #b-p-cactions .hiddenStructure { display:none; } #b-p-cactions li a { text-transform:lowercase; } /* offsets to distinguish the tab groups */ li#b-ca-talk { margin-right:1.6em; } li#b-ca-watch, li#b-ca-unwatch, li#b-ca-varlang-0, li#b-ca-print { margin-left:1.6em; } nrop60r6qen75quo937rmhsnreelmwm 15062 15061 2011-02-27T13:59:02Z Darklama 2894 moved [[MediaWiki:Gadget-btabs.css]] to [[MediaWiki:Gadget-bottomtabs.css]]: reflects what it is used with 15061 css text/css /* bottom tab styling (not for IE currently) */ #b-p-cactions { margin: -0.3em 0 0 11.5em; white-space: nowrap; width: 76%; line-height: 1.1em; overflow: visible; background: none; border-collapse: collapse; padding-left: 1em; list-style: none; font-size: 95%; } #b-p-cactions ul { list-style: none; } #b-p-cactions li { display:inline; border:1px solid #aaaaaa; border-top:0px; padding-top:0.1em; margin:0 0.3em 0 0; overflow:visible; background:white; } #b-p-cactions li.selected { border-color:#fabd23; padding-top:0.2em; font-weight:bold; } #b-p-cactions li a { background-color:#fbfbfb; color:#002bb8; border:0px; padding:0.3em 0.8em 0; z-index:0; margin:0; text-decoration:none; } #b-p-cactions li.selected a { z-index:3; padding:0.2em 1em 0em; background-color:white; } #b-p-cactions .new a { color:#ba0000; } #b-p-cactions li a:hover { z-index:3; text-decoration:none; background-color:white; } #b-p-cactions h5 { display:none; } #b-p-cactions li.istalk { margin-right:0; } #b-p-cactions li.istalk a { padding-right:0.5em; } #b-p-cactions-ca-addsection a { padding:0 0.4em; } #b-p-cactions .pBody { background-color:transparent; color:inherit; border-collapse:inherit; border:0; padding:0; } #b-p-cactions .hiddenStructure { display:none; } #b-p-cactions li a { text-transform:lowercase; } /* offsets to distinguish the tab groups */ li#b-ca-talk { margin-right:1.6em; } li#b-ca-watch, li#b-ca-unwatch, li#b-ca-varlang-0, li#b-ca-print { margin-left:1.6em; } nrop60r6qen75quo937rmhsnreelmwm 15063 15062 2026-08-01T17:31:13Z QueerEcofeminist 1879 [[:en:MediaWiki:Gadget-bottomtabs.css]] पासून ७ आवर्तने आयात केलीत 15061 css text/css /* bottom tab styling (not for IE currently) */ #b-p-cactions { margin: -0.3em 0 0 11.5em; white-space: nowrap; width: 76%; line-height: 1.1em; overflow: visible; background: none; border-collapse: collapse; padding-left: 1em; list-style: none; font-size: 95%; } #b-p-cactions ul { list-style: none; } #b-p-cactions li { display:inline; border:1px solid #aaaaaa; border-top:0px; padding-top:0.1em; margin:0 0.3em 0 0; overflow:visible; background:white; } #b-p-cactions li.selected { border-color:#fabd23; padding-top:0.2em; font-weight:bold; } #b-p-cactions li a { background-color:#fbfbfb; color:#002bb8; border:0px; padding:0.3em 0.8em 0; z-index:0; margin:0; text-decoration:none; } #b-p-cactions li.selected a { z-index:3; padding:0.2em 1em 0em; background-color:white; } #b-p-cactions .new a { color:#ba0000; } #b-p-cactions li a:hover { z-index:3; text-decoration:none; background-color:white; } #b-p-cactions h5 { display:none; } #b-p-cactions li.istalk { margin-right:0; } #b-p-cactions li.istalk a { padding-right:0.5em; } #b-p-cactions-ca-addsection a { padding:0 0.4em; } #b-p-cactions .pBody { background-color:transparent; color:inherit; border-collapse:inherit; border:0; padding:0; } #b-p-cactions .hiddenStructure { display:none; } #b-p-cactions li a { text-transform:lowercase; } /* offsets to distinguish the tab groups */ li#b-ca-talk { margin-right:1.6em; } li#b-ca-watch, li#b-ca-unwatch, li#b-ca-varlang-0, li#b-ca-print { margin-left:1.6em; } nrop60r6qen75quo937rmhsnreelmwm मिडियाविकी:Gadget-bottomtabs.js 8 4179 15064 2007-11-20T08:58:17Z Mike.lifeguard 117 New page: function morelinks() { var tabs = document.getElementById('p-cactions').cloneNode(true); // don't use the same ids twice- replace the p-cactions id and prepend 'mytabs-' to the li's ... 15064 javascript text/javascript function morelinks() { var tabs = document.getElementById('p-cactions').cloneNode(true); // don't use the same ids twice- replace the p-cactions id and prepend 'mytabs-' to the li's tabs.id = 'mytabs'; // needs this to be set from js, it ignores the css width for some reason tabs.style.width = '100%'; var listitems = tabs.getElementsByTagName('LI'); for (i=0;i<listitems.length;i++) { if(listitems[i].id) listitems[i].id = 'mytabs-' + listitems[i].id; } // drop them at the bottom of the content area document.getElementById('content').appendChild(tabs); } if (window.addEventListener) window.addEventListener("load",morelinks,false); else if (window.attachEvent) window.attachEvent("onload",morelinks); sqmm7uyifer25kt6gfkumgmr0e9z03b 15065 15064 2007-11-20T09:12:14Z Mike.lifeguard 117 Protected "[[User:Mike.lifeguard/bottomtabs.js]]": personal js [edit=sysop:move=sysop] 15064 javascript text/javascript function morelinks() { var tabs = document.getElementById('p-cactions').cloneNode(true); // don't use the same ids twice- replace the p-cactions id and prepend 'mytabs-' to the li's tabs.id = 'mytabs'; // needs this to be set from js, it ignores the css width for some reason tabs.style.width = '100%'; var listitems = tabs.getElementsByTagName('LI'); for (i=0;i<listitems.length;i++) { if(listitems[i].id) listitems[i].id = 'mytabs-' + listitems[i].id; } // drop them at the bottom of the content area document.getElementById('content').appendChild(tabs); } if (window.addEventListener) window.addEventListener("load",morelinks,false); else if (window.attachEvent) window.attachEvent("onload",morelinks); sqmm7uyifer25kt6gfkumgmr0e9z03b 15066 15065 2007-12-18T18:10:45Z Mike.lifeguard 117 [[User:Mike.lifeguard/bottomtabs.js]] moved to [[MediaWiki:Gadget-bottomtabs.js]]: add to extension 15064 javascript text/javascript function morelinks() { var tabs = document.getElementById('p-cactions').cloneNode(true); // don't use the same ids twice- replace the p-cactions id and prepend 'mytabs-' to the li's tabs.id = 'mytabs'; // needs this to be set from js, it ignores the css width for some reason tabs.style.width = '100%'; var listitems = tabs.getElementsByTagName('LI'); for (i=0;i<listitems.length;i++) { if(listitems[i].id) listitems[i].id = 'mytabs-' + listitems[i].id; } // drop them at the bottom of the content area document.getElementById('content').appendChild(tabs); } if (window.addEventListener) window.addEventListener("load",morelinks,false); else if (window.attachEvent) window.attachEvent("onload",morelinks); sqmm7uyifer25kt6gfkumgmr0e9z03b 15067 15066 2009-05-21T18:43:07Z Darklama 2894 fix placement of tabs 15067 javascript text/javascript function morelinks() { var tabs = document.getElementById('p-cactions').cloneNode(true); tabs.id = 'mytabs'; var listitems = tabs.getElementsByTagName('LI'); for (i=0; i<listitems.length; i++) { if (listitems[i].id) listitems[i].id = 'mytabs-' + listitems[i].id; } // needs this to be set from js, it ignores the css width for some reason if (tabs.style && tabs.style.width) { tabs.style.width = '100%'; } document.getElementById('p-cactions').parentNode.appendChild(tabs); } addHandler("load", morelinks); i43vznp9391rt5hzbp4ybz3eddy4vdu 15068 15067 2009-05-21T18:45:23Z Darklama 2894 fix 15068 javascript text/javascript function morelinks() { var tabs = document.getElementById('p-cactions').cloneNode(true); tabs.id = 'mytabs'; var listitems = tabs.getElementsByTagName('LI'); for (i=0; i<listitems.length; i++) { if (listitems[i].id) listitems[i].id = 'mytabs-' + listitems[i].id; } // needs this to be set from js, it ignores the css width for some reason if (tabs.style && tabs.style.width) { tabs.style.width = '100%'; } document.getElementById('p-cactions').parentNode.appendChild(tabs); } hookEvent("load", morelinks); crmwtu1dbcw1ehew62dkwlfptht4gkq 15069 15068 2009-05-21T19:30:42Z Darklama 2894 tweak placement 15069 javascript text/javascript function morelinks() { var tabs = document.getElementById('p-cactions').cloneNode(true); tabs.id = 'mytabs'; var listitems = tabs.getElementsByTagName('LI'); for (i=0; i<listitems.length; i++) { if (listitems[i].id) listitems[i].id = 'mytabs-' + listitems[i].id; } // needs this to be set from js, it ignores the css width for some reason if (tabs.style && tabs.style.width) { tabs.style.width = '75%'; } document.getElementById('column-content').appendChild(tabs); } hookEvent("load", morelinks); ptwu0fopbk0k5c72rffjaqgijw409g7 15070 15069 2010-12-04T21:52:03Z Darklama 2894 make it work with vector 15070 javascript text/javascript // <source lang="javascript"> $j(document).ready( function() { var find_ids = [ 'left-navigation', 'right-navigation', 'p-cactions' ], tabs, li; var content = document.getElementById('bodyContent') || document.getElementById('article') || document.getElementById('content'); if ( !content ) { return true; } for (var i = 0; i < finds_ids.length; ++i) { tabs = document.getElementById(find_ids[i]); if ( !tabs ) { continue; } tabs = tabs.cloneNode(true); tabs.id = 'b-' + tabs.id; li = tabs.getElementsByTagName('li'); for (var j = 0; j < li.length; ++j) { if ( li[j].id ) { li[j].id = 'b-' . li[j].id; } } content.appendChild(tabs); } }); // </source> 5eyb5cx9xvs5nnjnxqmem5n9aofi2qp 15071 15070 2010-12-04T21:55:21Z Darklama 2894 typo 15071 javascript text/javascript // <source lang="javascript"> $j(document).ready( function() { var find_ids = [ 'left-navigation', 'right-navigation', 'p-cactions' ], tabs, li; var content = document.getElementById('bodyContent') || document.getElementById('article') || document.getElementById('content'); if ( !content ) { return true; } for (var i = 0; i < find_ids.length; ++i) { tabs = document.getElementById(find_ids[i]); if ( !tabs ) { continue; } tabs = tabs.cloneNode(true); tabs.id = 'b-' + tabs.id; li = tabs.getElementsByTagName('li'); for (var j = 0; j < li.length; ++j) { if ( li[j].id ) { li[j].id = 'b-' . li[j].id; } } content.appendChild(tabs); } }); // </source> n9upmiola489ze1ti6eed8aoa9qyad6 15072 15071 2010-12-04T21:56:09Z Darklama 2894 typo 15072 javascript text/javascript // <source lang="javascript"> $j(document).ready( function() { var find_ids = [ 'left-navigation', 'right-navigation', 'p-cactions' ], tabs, li; var content = document.getElementById('bodyContent') || document.getElementById('article') || document.getElementById('content'); if ( !content ) { return true; } for (var i = 0; i < find_ids.length; ++i) { tabs = document.getElementById(find_ids[i]); if ( !tabs ) { continue; } tabs = tabs.cloneNode(true); tabs.id = 'b-' + tabs.id; li = tabs.getElementsByTagName('li'); for (var j = 0; j < li.length; ++j) { if ( li[j].id ) { li[j].id = 'b-' + li[j].id; } } content.appendChild(tabs); } }); // </source> 934c4g65mclklvpmlw8j8hju63krg92 15073 15072 2011-02-26T20:12:30Z Darklama 2894 more jquery, and using mw.util.$content 15073 javascript text/javascript $(document).ready( function() { var find_ids = [ '#left-navigation', '#right-navigation', '#p-cactions' ], tabs; for (var i = 0; i < find_ids.length; ++i) { tabs = $(find_ids[i]) .clone(true) .attr('id', function(i, a) { return 'b-' + a; }) .find('li') .attr('id', function(i, a) { return 'b-' + a; }); mw.util.$content.append(tabs); } }); ksvkx0s70w0ac339xhegw0278kc9v2p 15074 15073 2011-02-26T20:28:07Z Darklama 2894 15074 javascript text/javascript $(document).ready( function() { var find_ids = [ '#left-navigation', '#right-navigation', '#p-cactions' ], tabs; for (var i = 0; i < find_ids.length; ++i) { tabs = $(find_ids[i]).clone(true).attr('id', function(i, a) { return 'b-' + a; }); tabs.find('li').attr('id', function(i, a) { return 'b-' + a; }); mw.util.$content.append(tabs); } }); 10zij0z2kb8lte6j953lbqwhxjrvi0p 15075 15074 2026-08-01T17:31:22Z QueerEcofeminist 1879 [[:en:MediaWiki:Gadget-bottomtabs.js]] पासून ११ आवर्तने आयात केलीत 15074 javascript text/javascript $(document).ready( function() { var find_ids = [ '#left-navigation', '#right-navigation', '#p-cactions' ], tabs; for (var i = 0; i < find_ids.length; ++i) { tabs = $(find_ids[i]).clone(true).attr('id', function(i, a) { return 'b-' + a; }); tabs.find('li').attr('id', function(i, a) { return 'b-' + a; }); mw.util.$content.append(tabs); } }); 10zij0z2kb8lte6j953lbqwhxjrvi0p मिडियाविकी:Gadget-sixtabs.js 8 4180 15076 2007-11-20T08:40:07Z Mike.lifeguard 117 New page: if (wgNamespaceNumber >= 0) addOnloadHook(function(){ var pCactions = document.getElementById('p-cactions'); if (!pCactions) return; var caMain = pCactions.getElementsByTagName('li')[0]... 15076 javascript text/javascript if (wgNamespaceNumber >= 0) addOnloadHook(function(){ var pCactions = document.getElementById('p-cactions'); if (!pCactions) return; var caMain = pCactions.getElementsByTagName('li')[0]; var caTalk = document.getElementById('ca-talk'); var caEdit = document.getElementById('ca-edit'); if (!caEdit) caEdit = document.getElementById('ca-viewsource'); var caHistory = document.getElementById('ca-history'); if (!caMain || !caTalk || !caEdit || !caHistory) return; var el_move, el_create, id2; if (wgNamespaceNumber % 2) { //talk space el_move = caTalk; el_create = caMain; id2 = ''; } else { el_move = caMain; el_create = caTalk; id2 = 'talk'; } caEdit.firstChild.innerHTML = 'edit'; caHistory.firstChild.innerHTML = 'hist'; el_move.parentNode.insertBefore(caHistory, el_move.nextSibling); el_move.parentNode.insertBefore(caEdit, el_move.nextSibling); var href = el_create.firstChild.getAttribute('href', 2); if (el_create.className.indexOf('new') < 0){ addPortletLink('p-cactions', href + '?action=history', 'hist', 'ca-history-'+id2, id2+' history', '', el_create.nextSibling); addPortletLink('p-cactions', href + '?action=edit', 'edit', 'ca-edit-'+id2, 'Edit '+id2, '', el_create.nextSibling); } caMain.style.marginRight = '0.3em'; caTalk.style.marginRight = '0.3em'; caTalk.style.marginLeft = '1.6em'; }) dp4q4u7gz10usacm0a7vl3yjkf8rt0p 15077 15076 2007-11-20T09:12:32Z Mike.lifeguard 117 Protected "[[User:Mike.lifeguard/sixtabs.js]]": personal js [edit=sysop:move=sysop] 15076 javascript text/javascript if (wgNamespaceNumber >= 0) addOnloadHook(function(){ var pCactions = document.getElementById('p-cactions'); if (!pCactions) return; var caMain = pCactions.getElementsByTagName('li')[0]; var caTalk = document.getElementById('ca-talk'); var caEdit = document.getElementById('ca-edit'); if (!caEdit) caEdit = document.getElementById('ca-viewsource'); var caHistory = document.getElementById('ca-history'); if (!caMain || !caTalk || !caEdit || !caHistory) return; var el_move, el_create, id2; if (wgNamespaceNumber % 2) { //talk space el_move = caTalk; el_create = caMain; id2 = ''; } else { el_move = caMain; el_create = caTalk; id2 = 'talk'; } caEdit.firstChild.innerHTML = 'edit'; caHistory.firstChild.innerHTML = 'hist'; el_move.parentNode.insertBefore(caHistory, el_move.nextSibling); el_move.parentNode.insertBefore(caEdit, el_move.nextSibling); var href = el_create.firstChild.getAttribute('href', 2); if (el_create.className.indexOf('new') < 0){ addPortletLink('p-cactions', href + '?action=history', 'hist', 'ca-history-'+id2, id2+' history', '', el_create.nextSibling); addPortletLink('p-cactions', href + '?action=edit', 'edit', 'ca-edit-'+id2, 'Edit '+id2, '', el_create.nextSibling); } caMain.style.marginRight = '0.3em'; caTalk.style.marginRight = '0.3em'; caTalk.style.marginLeft = '1.6em'; }) dp4q4u7gz10usacm0a7vl3yjkf8rt0p 15078 15077 2007-11-20T18:11:25Z Mike.lifeguard 117 ? 15078 javascript text/javascript if (wgNamespaceNumber >= 0) addOnloadHook(function(){ var pCactions = document.getElementById('p-cactions'); if (!pCactions) return; var caMain = pCactions.getElementsByTagName('li')[0]; var caTalk = document.getElementById('ca-talk'); var caEdit = document.getElementById('ca-edit'); if (!caEdit) caEdit = document.getElementById('ca-viewsource'); var caHistory = document.getElementById('ca-history'); if (!caMain || !caTalk || !caEdit || !caHistory) return; var el_move, el_create, id2; if (wgNamespaceNumber % 2) { //talk space el_move = caTalk; el_create = caMain; id2 = 'talk'; } else { el_move = caMain; el_create = caTalk; id2 = 'talk'; } caEdit.firstChild.innerHTML = 'edit'; caHistory.firstChild.innerHTML = 'hist'; el_move.parentNode.insertBefore(caHistory, el_move.nextSibling); el_move.parentNode.insertBefore(caEdit, el_move.nextSibling); var href = el_create.firstChild.getAttribute('href', 2); if (el_create.className.indexOf('new') < 0){ addPortletLink('p-cactions', href + '?action=history', 'hist', 'ca-history-'+id2, id2+' history', '', el_create.nextSibling); addPortletLink('p-cactions', href + '?action=edit', 'edit', 'ca-edit-'+id2, 'Edit '+id2, '', el_create.nextSibling); } caMain.style.marginRight = '0.3em'; caTalk.style.marginRight = '0.3em'; caTalk.style.marginLeft = '1.6em'; }) 0i88ynyqfv5kzm3tuxx1pe6n1n1s0qg 15079 15078 2007-11-20T18:16:41Z Mike.lifeguard 117 15079 javascript text/javascript if (wgNamespaceNumber >= 0) addOnloadHook(function(){ var pCactions = document.getElementById('p-cactions'); if (!pCactions) return; var caMain = pCactions.getElementsByTagName('li')[0]; var caTalk = document.getElementById('ca-talk'); var caEdit = document.getElementById('ca-edit'); if (!caEdit) caEdit = document.getElementById('ca-viewsource'); var caHistory = document.getElementById('ca-history'); if (!caMain || !caTalk || !caEdit || !caHistory) return; var el_move, el_create, id2; if (wgNamespaceNumber % 2) { //talk space el_move = caTalk; el_create = caMain; id2 = ''; } else { el_move = caMain; el_create = caTalk; id2 = 'talk'; } caEdit.firstChild.innerHTML = 'edit'; caHistory.firstChild.innerHTML = 'hist'; el_move.parentNode.insertBefore(caHistory, el_move.nextSibling); el_move.parentNode.insertBefore(caEdit, el_move.nextSibling); var href = el_create.firstChild.getAttribute('href', 2); if (el_create.className.indexOf('new') < 0){ addPortletLink('p-cactions', href + '?action=history', 'hist', 'ca-history-'+id2, id2+' history', '', el_create.nextSibling); addPortletLink('p-cactions', href + '?action=edit', 'edit', 'ca-edit-'+id2, 'Edit '+id2, '', el_create.nextSibling); } caMain.style.marginRight = '0.3em'; caTalk.style.marginRight = '0.3em'; caTalk.style.marginLeft = '1.6em'; }) // 85cp6xwtf49d102yz0hc3r5kkddca5v 15080 15079 2007-11-20T18:22:13Z Mike.lifeguard 117 discussion-->talk 15080 javascript text/javascript if (wgNamespaceNumber >= 0) addOnloadHook(function(){ var pCactions = document.getElementById('p-cactions'); if (!pCactions) return; var caMain = pCactions.getElementsByTagName('li')[0]; var caTalk = document.getElementById('ca-talk'); var caEdit = document.getElementById('ca-edit'); if (!caEdit) caEdit = document.getElementById('ca-viewsource'); var caHistory = document.getElementById('ca-history'); if (!caMain || !caTalk || !caEdit || !caHistory) return; var el_move, el_create, id2; if (wgNamespaceNumber % 2) { //talk space el_move = caTalk; el_create = caMain; id2 = ''; } else { el_move = caMain; el_create = caTalk; id2 = 'discussion'; } caTalk.firstChild.innerHTML = 'talk'; caEdit.firstChild.innerHTML = 'edit'; caHistory.firstChild.innerHTML = 'hist'; el_move.parentNode.insertBefore(caHistory, el_move.nextSibling); el_move.parentNode.insertBefore(caEdit, el_move.nextSibling); var href = el_create.firstChild.getAttribute('href', 2); if (el_create.className.indexOf('new') < 0){ addPortletLink('p-cactions', href + '?action=history', 'hist', 'ca-history-'+id2, id2+' history', '', el_create.nextSibling); addPortletLink('p-cactions', href + '?action=edit', 'edit', 'ca-edit-'+id2, 'Edit '+id2, '', el_create.nextSibling); } caMain.style.marginRight = '0.3em'; caTalk.style.marginRight = '0.3em'; caTalk.style.marginLeft = '1.6em'; }) // tsplzi4zyo69utork15jlc1o7n8muyc 15081 15080 2007-12-18T18:12:08Z Mike.lifeguard 117 [[User:Mike.lifeguard/sixtabs.js]] moved to [[MediaWiki:Gadget-sixtabs.js]]: add to extension 15080 javascript text/javascript if (wgNamespaceNumber >= 0) addOnloadHook(function(){ var pCactions = document.getElementById('p-cactions'); if (!pCactions) return; var caMain = pCactions.getElementsByTagName('li')[0]; var caTalk = document.getElementById('ca-talk'); var caEdit = document.getElementById('ca-edit'); if (!caEdit) caEdit = document.getElementById('ca-viewsource'); var caHistory = document.getElementById('ca-history'); if (!caMain || !caTalk || !caEdit || !caHistory) return; var el_move, el_create, id2; if (wgNamespaceNumber % 2) { //talk space el_move = caTalk; el_create = caMain; id2 = ''; } else { el_move = caMain; el_create = caTalk; id2 = 'discussion'; } caTalk.firstChild.innerHTML = 'talk'; caEdit.firstChild.innerHTML = 'edit'; caHistory.firstChild.innerHTML = 'hist'; el_move.parentNode.insertBefore(caHistory, el_move.nextSibling); el_move.parentNode.insertBefore(caEdit, el_move.nextSibling); var href = el_create.firstChild.getAttribute('href', 2); if (el_create.className.indexOf('new') < 0){ addPortletLink('p-cactions', href + '?action=history', 'hist', 'ca-history-'+id2, id2+' history', '', el_create.nextSibling); addPortletLink('p-cactions', href + '?action=edit', 'edit', 'ca-edit-'+id2, 'Edit '+id2, '', el_create.nextSibling); } caMain.style.marginRight = '0.3em'; caTalk.style.marginRight = '0.3em'; caTalk.style.marginLeft = '1.6em'; }) // tsplzi4zyo69utork15jlc1o7n8muyc 15082 15081 2011-09-03T22:50:44Z Darklama 2894 simplified using jquery 15082 javascript text/javascript $(document).ready( function() { var $action, $main, $talk, $edit, $hist, $clone, href, ns = mw.config.get( 'wgNamespaceNumber' ); if ( ns < 0 || mw.config.get('skin') !== 'monobook' ) { return } $action = $('#p-cactions').find('li'); $main = $action.eq(0); $talk = $action.find('#ca-talk'); $edit = $action.find('#ca-edit'); $hist = $action.find('#ca-history'); $clone = ns % 2 ? $main : $talk; id = ns % 2 ? 'subject' : 'talk'; if ( !$edit.length ) { $edit = $action.find('#ca-viewsource'); } if ( !$main.length || !$talk.length || !$edit.length || !$hist.length || $clone.hasClass( 'new' ) ) { return; } href = mw.util.wikiScript('index') + '?title' + mw.util.wikiUrlencode( mw.config.get( 'wgTitle' ) ) + '&action='; mw.util.addPortletLink( 'p-cactions', href + 'history', $hist.text(), 'ca-history-' + id, id + ' history', '', $clone.next().get(0) ); mw.util.addPortLetLink( 'p-cactions', href + 'edit', 'Edit', 'ca-edit-' + id, 'Edit ' + id, '', $clone.next().get(0) ); }); 2gvb5o11rlol60drxqtwfj6hvoqzghl 15083 15082 2011-09-03T22:54:30Z Darklama 2894 find -> filter 15083 javascript text/javascript $(document).ready( function() { var $action, $main, $talk, $edit, $hist, $clone, href, ns = mw.config.get( 'wgNamespaceNumber' ); if ( ns < 0 || mw.config.get('skin') !== 'monobook' ) { return } $action = $('#p-cactions').find('li'); $main = $action.eq(0); $talk = $action.filter('#ca-talk'); $edit = $action.filter('#ca-edit'); $hist = $action.filter('#ca-history'); $clone = ns % 2 ? $main : $talk; id = ns % 2 ? 'subject' : 'talk'; if ( !$edit.length ) { $edit = $action.filter('#ca-viewsource'); } if ( !$main.length || !$talk.length || !$edit.length || !$hist.length || $clone.hasClass( 'new' ) ) { return; } href = mw.util.wikiScript('index') + '?title' + mw.util.wikiUrlencode( mw.config.get( 'wgTitle' ) ) + '&action='; mw.util.addPortletLink( 'p-cactions', href + 'history', $hist.text(), 'ca-history-' + id, id + ' history', '', $clone.next().get(0) ); mw.util.addPortLetLink( 'p-cactions', href + 'edit', 'Edit', 'ca-edit-' + id, 'Edit ' + id, '', $clone.next().get(0) ); }); 8eyc9ziw42m6pbct4gtmyxaz2u27mdh 15084 15083 2011-09-03T23:03:53Z Darklama 2894 placement 15084 javascript text/javascript $(document).ready( function() { var $action, $main, $talk, $edit, $hist, $clone, href, title, ns = mw.config.get( 'wgNamespaceNumber' ); if ( ns < 0 || mw.config.get('skin') !== 'monobook' ) { return } $action = $('#p-cactions').find('li'); $main = $action.eq(0); $talk = $action.filter('#ca-talk'); $edit = $action.filter('#ca-edit'); $hist = $action.filter('#ca-history'); if ( ns % 2 ) { $clone = $main; id = 'subject'; title = ''; } else { $clone = $talk; id = 'talk'; title 'Talk:'; } if ( !$edit.length ) { $edit = $action.filter('#ca-viewsource'); } if ( !$main.length || !$talk.length || !$edit.length || !$hist.length || $clone.hasClass( 'new' ) ) { return; } $clone.after( $hist ); $clone.after( $edit ); href = mw.util.wikiScript('index') + '?title' + mw.util.wikiUrlencode( title + mw.config.get( 'wgTitle' ) ) + '&action='; mw.util.addPortletLink ( 'p-cactions', href + 'history', $hist.text(), 'ca-history-' + id, id + ' history', '', $clone.next().get(0) ); mw.util.addPortLetLink ( 'p-cactions', href + 'edit', 'Edit', 'ca-edit-' + id, 'Edit ' + id, '', $clone.next().get(0) ); }); godic67yzq2np55md0cl771qr7bpygt 15085 15084 2011-09-03T23:04:55Z Darklama 2894 typo 15085 javascript text/javascript $(document).ready( function() { var $action, $main, $talk, $edit, $hist, $clone, href, title, ns = mw.config.get( 'wgNamespaceNumber' ); if ( ns < 0 || mw.config.get('skin') !== 'monobook' ) { return } $action = $('#p-cactions').find('li'); $main = $action.eq(0); $talk = $action.filter('#ca-talk'); $edit = $action.filter('#ca-edit'); $hist = $action.filter('#ca-history'); if ( ns % 2 ) { $clone = $main; id = 'subject'; title = ''; } else { $clone = $talk; id = 'talk'; title = 'Talk:'; } if ( !$edit.length ) { $edit = $action.filter('#ca-viewsource'); } if ( !$main.length || !$talk.length || !$edit.length || !$hist.length || $clone.hasClass( 'new' ) ) { return; } $clone.after( $hist ); $clone.after( $edit ); href = mw.util.wikiScript('index') + '?title' + mw.util.wikiUrlencode( title + mw.config.get( 'wgTitle' ) ) + '&action='; mw.util.addPortletLink ( 'p-cactions', href + 'history', $hist.text(), 'ca-history-' + id, id + ' history', '', $clone.next().get(0) ); mw.util.addPortLetLink ( 'p-cactions', href + 'edit', 'Edit', 'ca-edit-' + id, 'Edit ' + id, '', $clone.next().get(0) ); }); rkxeqdr73d5huvdr2md1whf9x5jl09t 15086 15085 2011-09-03T23:12:12Z Darklama 2894 placement and typo 15086 javascript text/javascript $(document).ready( function() { var $action, $main, $talk, $edit, $hist, $move, $clone, href, title, ns = mw.config.get( 'wgNamespaceNumber' ); if ( ns < 0 || mw.config.get('skin') !== 'monobook' ) { return } $action = $('#p-cactions').find('li'); $main = $action.eq(0); $talk = $action.filter('#ca-talk'); $edit = $action.filter('#ca-edit'); $hist = $action.filter('#ca-history'); if ( ns % 2 ) { $clone = $main; $move = $talk; id = 'subject'; title = ''; } else { $clone = $talk; $move = $main; id = 'talk'; title = 'Talk:'; } if ( !$edit.length ) { $edit = $action.filter('#ca-viewsource'); } if ( !$main.length || !$talk.length || !$edit.length || !$hist.length || $clone.hasClass( 'new' ) ) { return; } $move.after( $hist ); $move.after( $edit ); href = mw.util.wikiScript('index') + '?title' + mw.util.wikiUrlencode( title + mw.config.get( 'wgTitle' ) ) + '&action='; mw.util.addPortletLink ( 'p-cactions', href + 'history', $hist.text(), 'ca-history-' + id, id + ' history', '', $clone.next().get(0) ); mw.util.addPortletLink ( 'p-cactions', href + 'edit', 'Edit', 'ca-edit-' + id, 'Edit ' + id, '', $clone.next().get(0) ); }); 15n7ca4xu8rw1kggm43nclayzlnjpu1 15087 15086 2026-08-01T17:31:38Z QueerEcofeminist 1879 [[:en:MediaWiki:Gadget-sixtabs.js]] पासून ११ आवर्तने आयात केलीत 15086 javascript text/javascript $(document).ready( function() { var $action, $main, $talk, $edit, $hist, $move, $clone, href, title, ns = mw.config.get( 'wgNamespaceNumber' ); if ( ns < 0 || mw.config.get('skin') !== 'monobook' ) { return } $action = $('#p-cactions').find('li'); $main = $action.eq(0); $talk = $action.filter('#ca-talk'); $edit = $action.filter('#ca-edit'); $hist = $action.filter('#ca-history'); if ( ns % 2 ) { $clone = $main; $move = $talk; id = 'subject'; title = ''; } else { $clone = $talk; $move = $main; id = 'talk'; title = 'Talk:'; } if ( !$edit.length ) { $edit = $action.filter('#ca-viewsource'); } if ( !$main.length || !$talk.length || !$edit.length || !$hist.length || $clone.hasClass( 'new' ) ) { return; } $move.after( $hist ); $move.after( $edit ); href = mw.util.wikiScript('index') + '?title' + mw.util.wikiUrlencode( title + mw.config.get( 'wgTitle' ) ) + '&action='; mw.util.addPortletLink ( 'p-cactions', href + 'history', $hist.text(), 'ca-history-' + id, id + ' history', '', $clone.next().get(0) ); mw.util.addPortletLink ( 'p-cactions', href + 'edit', 'Edit', 'ca-edit-' + id, 'Edit ' + id, '', $clone.next().get(0) ); }); 15n7ca4xu8rw1kggm43nclayzlnjpu1 मिडियाविकी:Gadget-markAdmins.js 8 4181 15088 2021-03-06T13:16:38Z Minorax 2634 create 15088 javascript text/javascript /** * Flag administrators and special user group members with a letter * in parenthesis behind links that go into their user namespace. * @Documentation: https://commons.wikimedia.org/wiki/MediaWiki_talk:Gadget-markAdmins.js * E.g. Didym -> Didym (A) * * @rev 2 (05:15, 20 February 2018 (UTC)) * @author Euku, 2005 * @author PDD * @author Littl * @author Guandalug * @author Didym, 2014 * @author Rillke <https://blog.rillke.com>, 2014 * from https://meta.wikimedia.org/wiki/MediaWiki:Gadget-markAdmins.js */ // <nowiki> /*global jQuery:false, mediaWiki:false*/ importScript('User:Minorax/adminlist.js'); (function( mw, $ ) { 'use strict'; var markAdmins = mw.libs.markAdmins = { nodes: [], // for reInit config: {}, defaults: { groups: { sysop: { label: 'A', legacyName: 'admins', legacyLabelId: 'atxt', enabled: true }, oversight: { label: 'OS', legacyName: 'oversight', legacyLabelId: 'oversighttxt', enabled: true }, checkuser: { label: 'CU', legacyName: 'checkuser', legacyLabelId: 'checkusertxt', enabled: true }, bureaucrat: { label: 'B', legacyName: 'bureaucrat', legacyLabelId: 'bureautxt', enabled: true }, steward: { label: 'S', legacyName: 'steward', legacyLabelId: 'stewtxt', enabled: true }, ombudsman: { label: 'Omb', legacyName: 'Ombudsman', legacyLabelId: 'ombtxt', enabled: true } }, runOn: ['Special', '', 'User', 'User_talk', 'Project', 'File', 'Help'], runOnHistory: true, runOnTalk: true, runOnDiff: true }, init: function ( users ) { markAdmins.users = users; // Wait for user configuration through their .js // Not adding as a gadget dependency because user .js // is sometimes invalid and fails loading and // gadget dependencies do not offer failed/error options mw.loader.using( 'user', markAdmins.mergeConfig, markAdmins.mergeConfig ); }, mergeConfig: function () { // Merge new configuration var optionsConfig = mw.user.options.get('markAdminCfg'); var cfg = $.extend( true, markAdmins.config, markAdmins.defaults, window.markAdminCfg || {}, optionsConfig ? JSON.parse(optionsConfig) : {} ); cfg.markSubpages = !!window.marksubpages; cfg.dontMarkMyself = window.dontmarkmyself ? mw.config.get('wgUserName') : false; // Hook-up content loading mw.hook('wikipage.content').add( function ($c) { markAdmins.addLabels($c); } ); }, destroy: function () { $.each(markAdmins.nodes, function (i, n) { $(n).remove(); }); }, reInit: function () { markAdmins.destroy(); markAdmins.mergeConfig(); }, addLabels: function ( $content ) { var content = document.getElementById('mw-content-text') || document.getElementById('bodyContent') || $content[0]; /* if ( !markAdmins.fullPageProcessed ) { $content = $(document); markAdmins.fullPageProcessed = true; } */ // Right, the configuration evaluation is here // It might be possible to use Ajax for page // navigation in future. var canNs = mw.config.get('wgCanonicalNamespace'), isSubpageL = !!({'Prefixindex': 1, 'Allpages': 1})[mw.config.get('wgCanonicalSpecialPageName')], ns = mw.config.get('wgNamespaceNumber'), isUserpage = ns === 2 || ns === 3, isHistory = mw.config.get('wgAction') === 'history', isTalk = ns % 2, isDiff = !!mw.util.getParamValue( 'diff' ), reUserpage = /^\/wiki\/User([ _]talk)?:(.+)/, cfg = this.config, nsCondition = cfg.runOn.indexOf(canNs) !== -1, enabledGroups = {}, marker = {}, previousUser, anchors; // Namespace run conditions if ( !( nsCondition || isHistory && cfg.runOnHistory || isTalk && cfg.runOnTalk || isDiff && cfg.runOnDiff ) ) return; // Filter enabled groups // Do it here and not later on each anchor $.each( cfg.groups, function( g, grpCfg ) { if ( grpCfg.enabled ) enabledGroups[g] = grpCfg; } ); if (isUserpage) { // Add also the userpage link!? anchors = $content.find('a'); anchors.push($('#ca-nstab-user').find('a')[0]); } else anchors = content.getElementsByTagName('a'); var node = document.createElement('b'); node.className = 'adminMark'; for (var i = 0, lenAnchors = anchors.length; i < lenAnchors; ++i) { var a = anchors[i]; var href = a.getAttribute( 'href' ); // Extract link if ( !href ) continue; // Extract user page ( /wiki/User_talk:Foo/subpage -> Foo/subpage ) var m = href.match( reUserpage ); if ( !m || !m[2] ) continue; var userpage = m[2]; // Extract user var user = userpage.replace( /[\/\#].*/, '' ); var isMainUserpageLink = (user === userpage); var isUsertalkLink = !!m[1]; // Polish user name user = decodeURIComponent( user ).replace( /_/g, ' ' ); // Two consecutive links to the same user? Don't mark followups! previousUser = (previousUser === user && isUsertalkLink); if (previousUser) continue;// only once var userM = marker[user]; if (userM === undefined) { // User groups of selected user userM = ''; var userGroups = this.users[user]; if ( !userGroups ) continue; for (var g = 0; g < userGroups.length; g++) { var grpCfg = enabledGroups[userGroups[g]]; if ( !grpCfg ) break; // String concatenation is oftentimes faster in modern browsers, // so using Arrays and joining them finally seems advantage. // But we would need an additional IF, so there is no gain. if ( userM ) userM += '/'; userM += grpCfg.label; } marker[user] = userM ? [userM] : userM; } // Are there markers at all? if ( !userM ) continue; // Don't mark certain pages, except link to user main page. // Does the link go to the main user page or, if linking subpages is enabled, // is it not a page that is just listing subpages? if (!(isMainUserpageLink || cfg.markSubpages && !isSubpageL)) continue; if (cfg.dontMarkMyself && user === cfg.dontMarkMyself) continue; // Check finished, now append node marker[user][1] = this.markUser(marker[user], a, node); // Required for consecutive user link check previousUser = user; } // end loop }, markUser: function (mark, a, node) { if (mark[1]) { node = mark[1].cloneNode(1); } else { node = node.cloneNode(1); node.appendChild(document.createTextNode('\u00A0(' + mark[0] + ')')); } a.appendChild(node); this.nodes.push(node); // for reInit return node; } }; mw.hook( 'userjs.script-loaded.markadmins' ).add( markAdmins.init ); }( mediaWiki, jQuery )); pgwvho2elych8zgkir44cvzui9zm1zo 15089 15088 2021-03-06T13:22:57Z Minorax 2634 + 15089 javascript text/javascript /** * Flag administrators and special user group members with a letter * in parenthesis behind links that go into their user namespace. * @Documentation: https://commons.wikimedia.org/wiki/MediaWiki_talk:Gadget-markAdmins.js * E.g. Didym -> Didym (A) * * @rev 2 (05:15, 20 February 2018 (UTC)) * @author Euku, 2005 * @author PDD * @author Littl * @author Guandalug * @author Didym, 2014 * @author Rillke <https://blog.rillke.com>, 2014 * from https://meta.wikimedia.org/wiki/MediaWiki:Gadget-markAdmins.js */ // <nowiki> /*global jQuery:false, mediaWiki:false*/ importScript('User:Minorax/adminlist.js'); (function( mw, $ ) { 'use strict'; var markAdmins = mw.libs.markAdmins = { nodes: [], // for reInit config: {}, defaults: { groups: { sysop: { label: 'A', legacyName: 'admins', legacyLabelId: 'atxt', enabled: true }, adminbot: { label: 'A-bot', legacyName: 'adminbot', legacyLabelId: 'abottxt', enabled: true }, oversight: { label: 'OS', legacyName: 'oversight', legacyLabelId: 'oversighttxt', enabled: true }, checkuser: { label: 'CU', legacyName: 'checkuser', legacyLabelId: 'checkusertxt', enabled: true }, bureaucrat: { label: 'B', legacyName: 'bureaucrat', legacyLabelId: 'bureautxt', enabled: true }, steward: { label: 'S', legacyName: 'steward', legacyLabelId: 'stewtxt', enabled: true }, global_sysop: { label: 'GS', legacyName: 'Global Sysop', legacyLabelId: 'gstxt', enabled: true }, ombudsman: { label: 'Omb', legacyName: 'Ombudsman', legacyLabelId: 'ombtxt', enabled: true } }, runOn: ['Special', '', 'User', 'User_talk', 'Project', 'File', 'Help'], runOnHistory: true, runOnTalk: true, runOnDiff: true }, init: function ( users ) { markAdmins.users = users; // Wait for user configuration through their .js // Not adding as a gadget dependency because user .js // is sometimes invalid and fails loading and // gadget dependencies do not offer failed/error options mw.loader.using( 'user', markAdmins.mergeConfig, markAdmins.mergeConfig ); }, mergeConfig: function () { // Merge new configuration var optionsConfig = mw.user.options.get('markAdminCfg'); var cfg = $.extend( true, markAdmins.config, markAdmins.defaults, window.markAdminCfg || {}, optionsConfig ? JSON.parse(optionsConfig) : {} ); cfg.markSubpages = !!window.marksubpages; cfg.dontMarkMyself = window.dontmarkmyself ? mw.config.get('wgUserName') : false; // Hook-up content loading mw.hook('wikipage.content').add( function ($c) { markAdmins.addLabels($c); } ); }, destroy: function () { $.each(markAdmins.nodes, function (i, n) { $(n).remove(); }); }, reInit: function () { markAdmins.destroy(); markAdmins.mergeConfig(); }, addLabels: function ( $content ) { var content = document.getElementById('mw-content-text') || document.getElementById('bodyContent') || $content[0]; /* if ( !markAdmins.fullPageProcessed ) { $content = $(document); markAdmins.fullPageProcessed = true; } */ // Right, the configuration evaluation is here // It might be possible to use Ajax for page // navigation in future. var canNs = mw.config.get('wgCanonicalNamespace'), isSubpageL = !!({'Prefixindex': 1, 'Allpages': 1})[mw.config.get('wgCanonicalSpecialPageName')], ns = mw.config.get('wgNamespaceNumber'), isUserpage = ns === 2 || ns === 3, isHistory = mw.config.get('wgAction') === 'history', isTalk = ns % 2, isDiff = !!mw.util.getParamValue( 'diff' ), reUserpage = /^\/wiki\/User([ _]talk)?:(.+)/, cfg = this.config, nsCondition = cfg.runOn.indexOf(canNs) !== -1, enabledGroups = {}, marker = {}, previousUser, anchors; // Namespace run conditions if ( !( nsCondition || isHistory && cfg.runOnHistory || isTalk && cfg.runOnTalk || isDiff && cfg.runOnDiff ) ) return; // Filter enabled groups // Do it here and not later on each anchor $.each( cfg.groups, function( g, grpCfg ) { if ( grpCfg.enabled ) enabledGroups[g] = grpCfg; } ); if (isUserpage) { // Add also the userpage link!? anchors = $content.find('a'); anchors.push($('#ca-nstab-user').find('a')[0]); } else anchors = content.getElementsByTagName('a'); var node = document.createElement('b'); node.className = 'adminMark'; for (var i = 0, lenAnchors = anchors.length; i < lenAnchors; ++i) { var a = anchors[i]; var href = a.getAttribute( 'href' ); // Extract link if ( !href ) continue; // Extract user page ( /wiki/User_talk:Foo/subpage -> Foo/subpage ) var m = href.match( reUserpage ); if ( !m || !m[2] ) continue; var userpage = m[2]; // Extract user var user = userpage.replace( /[\/\#].*/, '' ); var isMainUserpageLink = (user === userpage); var isUsertalkLink = !!m[1]; // Polish user name user = decodeURIComponent( user ).replace( /_/g, ' ' ); // Two consecutive links to the same user? Don't mark followups! previousUser = (previousUser === user && isUsertalkLink); if (previousUser) continue;// only once var userM = marker[user]; if (userM === undefined) { // User groups of selected user userM = ''; var userGroups = this.users[user]; if ( !userGroups ) continue; for (var g = 0; g < userGroups.length; g++) { var grpCfg = enabledGroups[userGroups[g]]; if ( !grpCfg ) break; // String concatenation is oftentimes faster in modern browsers, // so using Arrays and joining them finally seems advantage. // But we would need an additional IF, so there is no gain. if ( userM ) userM += '/'; userM += grpCfg.label; } marker[user] = userM ? [userM] : userM; } // Are there markers at all? if ( !userM ) continue; // Don't mark certain pages, except link to user main page. // Does the link go to the main user page or, if linking subpages is enabled, // is it not a page that is just listing subpages? if (!(isMainUserpageLink || cfg.markSubpages && !isSubpageL)) continue; if (cfg.dontMarkMyself && user === cfg.dontMarkMyself) continue; // Check finished, now append node marker[user][1] = this.markUser(marker[user], a, node); // Required for consecutive user link check previousUser = user; } // end loop }, markUser: function (mark, a, node) { if (mark[1]) { node = mark[1].cloneNode(1); } else { node = node.cloneNode(1); node.appendChild(document.createTextNode('\u00A0(' + mark[0] + ')')); } a.appendChild(node); this.nodes.push(node); // for reInit return node; } }; mw.hook( 'userjs.script-loaded.markadmins' ).add( markAdmins.init ); }( mediaWiki, jQuery )); 1ghji9ncqty36ndwayz8r074a2m6b01 15090 15089 2021-03-06T13:23:28Z Minorax 2634 -admin bot 15090 javascript text/javascript /** * Flag administrators and special user group members with a letter * in parenthesis behind links that go into their user namespace. * @Documentation: https://commons.wikimedia.org/wiki/MediaWiki_talk:Gadget-markAdmins.js * E.g. Didym -> Didym (A) * * @rev 2 (05:15, 20 February 2018 (UTC)) * @author Euku, 2005 * @author PDD * @author Littl * @author Guandalug * @author Didym, 2014 * @author Rillke <https://blog.rillke.com>, 2014 * from https://meta.wikimedia.org/wiki/MediaWiki:Gadget-markAdmins.js */ // <nowiki> /*global jQuery:false, mediaWiki:false*/ importScript('User:Minorax/adminlist.js'); (function( mw, $ ) { 'use strict'; var markAdmins = mw.libs.markAdmins = { nodes: [], // for reInit config: {}, defaults: { groups: { sysop: { label: 'A', legacyName: 'admins', legacyLabelId: 'atxt', enabled: true }, oversight: { label: 'OS', legacyName: 'oversight', legacyLabelId: 'oversighttxt', enabled: true }, checkuser: { label: 'CU', legacyName: 'checkuser', legacyLabelId: 'checkusertxt', enabled: true }, bureaucrat: { label: 'B', legacyName: 'bureaucrat', legacyLabelId: 'bureautxt', enabled: true }, steward: { label: 'S', legacyName: 'steward', legacyLabelId: 'stewtxt', enabled: true }, global_sysop: { label: 'GS', legacyName: 'Global Sysop', legacyLabelId: 'gstxt', enabled: true }, ombudsman: { label: 'Omb', legacyName: 'Ombudsman', legacyLabelId: 'ombtxt', enabled: true } }, runOn: ['Special', '', 'User', 'User_talk', 'Project', 'File', 'Help'], runOnHistory: true, runOnTalk: true, runOnDiff: true }, init: function ( users ) { markAdmins.users = users; // Wait for user configuration through their .js // Not adding as a gadget dependency because user .js // is sometimes invalid and fails loading and // gadget dependencies do not offer failed/error options mw.loader.using( 'user', markAdmins.mergeConfig, markAdmins.mergeConfig ); }, mergeConfig: function () { // Merge new configuration var optionsConfig = mw.user.options.get('markAdminCfg'); var cfg = $.extend( true, markAdmins.config, markAdmins.defaults, window.markAdminCfg || {}, optionsConfig ? JSON.parse(optionsConfig) : {} ); cfg.markSubpages = !!window.marksubpages; cfg.dontMarkMyself = window.dontmarkmyself ? mw.config.get('wgUserName') : false; // Hook-up content loading mw.hook('wikipage.content').add( function ($c) { markAdmins.addLabels($c); } ); }, destroy: function () { $.each(markAdmins.nodes, function (i, n) { $(n).remove(); }); }, reInit: function () { markAdmins.destroy(); markAdmins.mergeConfig(); }, addLabels: function ( $content ) { var content = document.getElementById('mw-content-text') || document.getElementById('bodyContent') || $content[0]; /* if ( !markAdmins.fullPageProcessed ) { $content = $(document); markAdmins.fullPageProcessed = true; } */ // Right, the configuration evaluation is here // It might be possible to use Ajax for page // navigation in future. var canNs = mw.config.get('wgCanonicalNamespace'), isSubpageL = !!({'Prefixindex': 1, 'Allpages': 1})[mw.config.get('wgCanonicalSpecialPageName')], ns = mw.config.get('wgNamespaceNumber'), isUserpage = ns === 2 || ns === 3, isHistory = mw.config.get('wgAction') === 'history', isTalk = ns % 2, isDiff = !!mw.util.getParamValue( 'diff' ), reUserpage = /^\/wiki\/User([ _]talk)?:(.+)/, cfg = this.config, nsCondition = cfg.runOn.indexOf(canNs) !== -1, enabledGroups = {}, marker = {}, previousUser, anchors; // Namespace run conditions if ( !( nsCondition || isHistory && cfg.runOnHistory || isTalk && cfg.runOnTalk || isDiff && cfg.runOnDiff ) ) return; // Filter enabled groups // Do it here and not later on each anchor $.each( cfg.groups, function( g, grpCfg ) { if ( grpCfg.enabled ) enabledGroups[g] = grpCfg; } ); if (isUserpage) { // Add also the userpage link!? anchors = $content.find('a'); anchors.push($('#ca-nstab-user').find('a')[0]); } else anchors = content.getElementsByTagName('a'); var node = document.createElement('b'); node.className = 'adminMark'; for (var i = 0, lenAnchors = anchors.length; i < lenAnchors; ++i) { var a = anchors[i]; var href = a.getAttribute( 'href' ); // Extract link if ( !href ) continue; // Extract user page ( /wiki/User_talk:Foo/subpage -> Foo/subpage ) var m = href.match( reUserpage ); if ( !m || !m[2] ) continue; var userpage = m[2]; // Extract user var user = userpage.replace( /[\/\#].*/, '' ); var isMainUserpageLink = (user === userpage); var isUsertalkLink = !!m[1]; // Polish user name user = decodeURIComponent( user ).replace( /_/g, ' ' ); // Two consecutive links to the same user? Don't mark followups! previousUser = (previousUser === user && isUsertalkLink); if (previousUser) continue;// only once var userM = marker[user]; if (userM === undefined) { // User groups of selected user userM = ''; var userGroups = this.users[user]; if ( !userGroups ) continue; for (var g = 0; g < userGroups.length; g++) { var grpCfg = enabledGroups[userGroups[g]]; if ( !grpCfg ) break; // String concatenation is oftentimes faster in modern browsers, // so using Arrays and joining them finally seems advantage. // But we would need an additional IF, so there is no gain. if ( userM ) userM += '/'; userM += grpCfg.label; } marker[user] = userM ? [userM] : userM; } // Are there markers at all? if ( !userM ) continue; // Don't mark certain pages, except link to user main page. // Does the link go to the main user page or, if linking subpages is enabled, // is it not a page that is just listing subpages? if (!(isMainUserpageLink || cfg.markSubpages && !isSubpageL)) continue; if (cfg.dontMarkMyself && user === cfg.dontMarkMyself) continue; // Check finished, now append node marker[user][1] = this.markUser(marker[user], a, node); // Required for consecutive user link check previousUser = user; } // end loop }, markUser: function (mark, a, node) { if (mark[1]) { node = mark[1].cloneNode(1); } else { node = node.cloneNode(1); node.appendChild(document.createTextNode('\u00A0(' + mark[0] + ')')); } a.appendChild(node); this.nodes.push(node); // for reInit return node; } }; mw.hook( 'userjs.script-loaded.markadmins' ).add( markAdmins.init ); }( mediaWiki, jQuery )); cboyqztrd647aafhux73pbsm781cj6a 15091 15090 2021-03-21T13:16:38Z Minorax 2634 Minorax moved page [[User:Minorax/markAdmin.js]] to [[MediaWiki:Gadget-markAdmins.js]]: see [[Wikibooks talk:Administrators]] 15090 javascript text/javascript /** * Flag administrators and special user group members with a letter * in parenthesis behind links that go into their user namespace. * @Documentation: https://commons.wikimedia.org/wiki/MediaWiki_talk:Gadget-markAdmins.js * E.g. Didym -> Didym (A) * * @rev 2 (05:15, 20 February 2018 (UTC)) * @author Euku, 2005 * @author PDD * @author Littl * @author Guandalug * @author Didym, 2014 * @author Rillke <https://blog.rillke.com>, 2014 * from https://meta.wikimedia.org/wiki/MediaWiki:Gadget-markAdmins.js */ // <nowiki> /*global jQuery:false, mediaWiki:false*/ importScript('User:Minorax/adminlist.js'); (function( mw, $ ) { 'use strict'; var markAdmins = mw.libs.markAdmins = { nodes: [], // for reInit config: {}, defaults: { groups: { sysop: { label: 'A', legacyName: 'admins', legacyLabelId: 'atxt', enabled: true }, oversight: { label: 'OS', legacyName: 'oversight', legacyLabelId: 'oversighttxt', enabled: true }, checkuser: { label: 'CU', legacyName: 'checkuser', legacyLabelId: 'checkusertxt', enabled: true }, bureaucrat: { label: 'B', legacyName: 'bureaucrat', legacyLabelId: 'bureautxt', enabled: true }, steward: { label: 'S', legacyName: 'steward', legacyLabelId: 'stewtxt', enabled: true }, global_sysop: { label: 'GS', legacyName: 'Global Sysop', legacyLabelId: 'gstxt', enabled: true }, ombudsman: { label: 'Omb', legacyName: 'Ombudsman', legacyLabelId: 'ombtxt', enabled: true } }, runOn: ['Special', '', 'User', 'User_talk', 'Project', 'File', 'Help'], runOnHistory: true, runOnTalk: true, runOnDiff: true }, init: function ( users ) { markAdmins.users = users; // Wait for user configuration through their .js // Not adding as a gadget dependency because user .js // is sometimes invalid and fails loading and // gadget dependencies do not offer failed/error options mw.loader.using( 'user', markAdmins.mergeConfig, markAdmins.mergeConfig ); }, mergeConfig: function () { // Merge new configuration var optionsConfig = mw.user.options.get('markAdminCfg'); var cfg = $.extend( true, markAdmins.config, markAdmins.defaults, window.markAdminCfg || {}, optionsConfig ? JSON.parse(optionsConfig) : {} ); cfg.markSubpages = !!window.marksubpages; cfg.dontMarkMyself = window.dontmarkmyself ? mw.config.get('wgUserName') : false; // Hook-up content loading mw.hook('wikipage.content').add( function ($c) { markAdmins.addLabels($c); } ); }, destroy: function () { $.each(markAdmins.nodes, function (i, n) { $(n).remove(); }); }, reInit: function () { markAdmins.destroy(); markAdmins.mergeConfig(); }, addLabels: function ( $content ) { var content = document.getElementById('mw-content-text') || document.getElementById('bodyContent') || $content[0]; /* if ( !markAdmins.fullPageProcessed ) { $content = $(document); markAdmins.fullPageProcessed = true; } */ // Right, the configuration evaluation is here // It might be possible to use Ajax for page // navigation in future. var canNs = mw.config.get('wgCanonicalNamespace'), isSubpageL = !!({'Prefixindex': 1, 'Allpages': 1})[mw.config.get('wgCanonicalSpecialPageName')], ns = mw.config.get('wgNamespaceNumber'), isUserpage = ns === 2 || ns === 3, isHistory = mw.config.get('wgAction') === 'history', isTalk = ns % 2, isDiff = !!mw.util.getParamValue( 'diff' ), reUserpage = /^\/wiki\/User([ _]talk)?:(.+)/, cfg = this.config, nsCondition = cfg.runOn.indexOf(canNs) !== -1, enabledGroups = {}, marker = {}, previousUser, anchors; // Namespace run conditions if ( !( nsCondition || isHistory && cfg.runOnHistory || isTalk && cfg.runOnTalk || isDiff && cfg.runOnDiff ) ) return; // Filter enabled groups // Do it here and not later on each anchor $.each( cfg.groups, function( g, grpCfg ) { if ( grpCfg.enabled ) enabledGroups[g] = grpCfg; } ); if (isUserpage) { // Add also the userpage link!? anchors = $content.find('a'); anchors.push($('#ca-nstab-user').find('a')[0]); } else anchors = content.getElementsByTagName('a'); var node = document.createElement('b'); node.className = 'adminMark'; for (var i = 0, lenAnchors = anchors.length; i < lenAnchors; ++i) { var a = anchors[i]; var href = a.getAttribute( 'href' ); // Extract link if ( !href ) continue; // Extract user page ( /wiki/User_talk:Foo/subpage -> Foo/subpage ) var m = href.match( reUserpage ); if ( !m || !m[2] ) continue; var userpage = m[2]; // Extract user var user = userpage.replace( /[\/\#].*/, '' ); var isMainUserpageLink = (user === userpage); var isUsertalkLink = !!m[1]; // Polish user name user = decodeURIComponent( user ).replace( /_/g, ' ' ); // Two consecutive links to the same user? Don't mark followups! previousUser = (previousUser === user && isUsertalkLink); if (previousUser) continue;// only once var userM = marker[user]; if (userM === undefined) { // User groups of selected user userM = ''; var userGroups = this.users[user]; if ( !userGroups ) continue; for (var g = 0; g < userGroups.length; g++) { var grpCfg = enabledGroups[userGroups[g]]; if ( !grpCfg ) break; // String concatenation is oftentimes faster in modern browsers, // so using Arrays and joining them finally seems advantage. // But we would need an additional IF, so there is no gain. if ( userM ) userM += '/'; userM += grpCfg.label; } marker[user] = userM ? [userM] : userM; } // Are there markers at all? if ( !userM ) continue; // Don't mark certain pages, except link to user main page. // Does the link go to the main user page or, if linking subpages is enabled, // is it not a page that is just listing subpages? if (!(isMainUserpageLink || cfg.markSubpages && !isSubpageL)) continue; if (cfg.dontMarkMyself && user === cfg.dontMarkMyself) continue; // Check finished, now append node marker[user][1] = this.markUser(marker[user], a, node); // Required for consecutive user link check previousUser = user; } // end loop }, markUser: function (mark, a, node) { if (mark[1]) { node = mark[1].cloneNode(1); } else { node = node.cloneNode(1); node.appendChild(document.createTextNode('\u00A0(' + mark[0] + ')')); } a.appendChild(node); this.nodes.push(node); // for reInit return node; } }; mw.hook( 'userjs.script-loaded.markadmins' ).add( markAdmins.init ); }( mediaWiki, jQuery )); cboyqztrd647aafhux73pbsm781cj6a 15092 15091 2021-03-21T13:19:20Z Minorax 2634 some tweaks, ref https://meta.wikimedia.org/wiki/MediaWiki:Gadget-markAdmins.js 15092 javascript text/javascript /** * Flag administrators and special user group members with a letter * in parenthesis behind links that go into their user namespace. * @Documentation: https://commons.wikimedia.org/wiki/MediaWiki_talk:Gadget-markAdmins.js * E.g. Didym -> Didym (A) * * @rev 3 (14:14, 20 August 2019 (UTC)) * @author Euku - 2005, PDD, Littl, Guandalug * @author Didym - 2014 * @author Rillke <https://blog.rillke.com> - 2014 * @contributor Perhelion - 2017 */ // <nowiki> /* eslint indent:["error","tab",{"outerIIFEBody":0}] */ /* global jQuery:false, mediaWiki:false*/ (function (mw, $) { 'use strict'; var markAdmins = mw.libs.markAdmins = { config: {}, defaults: { groups: { 'sysop': { label: 'A', legacyName: 'admins', legacyLabelId: 'atxt', enabled: true }, 'oversight': { label: 'OS', legacyName: 'oversight', legacyLabelId: 'oversighttxt', enabled: true }, 'checkuser': { label: 'CU', legacyName: 'checkuser', legacyLabelId: 'checkusertxt', enabled: true }, 'bureaucrat': { label: 'B', legacyName: 'bureaucrat', legacyLabelId: 'bureautxt', enabled: true }, 'steward': { label: 'S', legacyName: 'steward', legacyLabelId: 'stewtxt', enabled: true }, 'ombudsman': { label: 'Omb', legacyName: 'ombudsman', legacyLabelId: 'ombtxt', enabled: true }, 'global_sysop': { label: 'GS', legacyName: 'Global Sysop', legacyLabelId: 'gstxt', enabled: true } }, runOn: ['Special', '', 'User', 'User_talk', 'Project', 'File', 'Help'], runOnHistory: true, runOnTalk: true, runOnDiff: true }, init: function (users) { markAdmins.users = users; // Wait for user configuration through their .js // Not adding as a gadget dependency because user .js // is sometimes invalid and fails loading and // gadget dependencies do not offer failed/error options $.when(mw.loader.using('user'), $.ready).then(markAdmins.mergeConfig, markAdmins.mergeConfig); }, mergeConfig: function () { // Merge new configuration var optionsConfig = mw.user.options.get('markAdminCfg'), cfg = $.extend( true, markAdmins.config, markAdmins.defaults, window.markAdminCfg || {}, optionsConfig ? JSON.parse(optionsConfig) : {} ); markAdmins.ns = mw.config.get('wgNamespaceNumber'); cfg.markSubpages = !!window.marksubpages; cfg.dontMarkMyself = window.dontmarkmyself ? mw.config.get('wgUserName') : false; // Namespace run conditions if (!(cfg.runOn.indexOf(mw.config.get('wgCanonicalNamespace')) !== -1 || cfg.runOnHistory && mw.config.get('wgAction') === 'history' || cfg.runOnTalk && markAdmins.ns % 2 || cfg.runOnDiff && !!mw.util.getParamValue('diff'))) return; // Hook-up content loading mw.hook('wikipage.content').add(function ($c) { markAdmins.addLabels($c); }); // bind }, destroy: function () { markAdmins.nodes.forEach(function (n) { $(n).remove(); }); }, nodes: [], // for reInit reInit: function () { markAdmins.fullPageProcessed = 0; markAdmins.destroy(); markAdmins.mergeConfig(); }, addLabels: function ($content) { // Right, the configuration evaluation is here // It might be possible to use Ajax for page // navigation in future. var cfg = this.config, noSubpages = !cfg.markSubpages || !!({ Prefixindex: 1, Allpages: 1 })[mw.config.get('wgCanonicalSpecialPageName')], isUserpage = [2, 3].indexOf(this.ns) !== -1, reUserpage = /^\/wiki\/User([ _]talk)?:(.+)/, enabledGroups = {}, marker = {}, previousUser, anchors, node = document.createElement('b'); node.className = 'adminMark'; // Filter enabled groups (Do it here and not later on each anchor) Object.keys(cfg.groups).forEach(function (g, grpCfg) { grpCfg = cfg.groups[g]; if (grpCfg.enabled) enabledGroups[g] = grpCfg; }); if (!this.fullPageProcessed) $content = mw.util.$content || $content; if (!$content[0]) return; anchors = $content[0].getElementsByTagName('a'); // Add also the userpage link if (isUserpage && !this.fullPageProcessed && ((isUserpage = document.getElementById('ca-nstab-user')) && (isUserpage = isUserpage.getElementsByTagName('a')))) { anchors = Array.from(anchors); anchors.push(isUserpage[0]); } this.fullPageProcessed = true; if (cfg.dontMarkMyself) marker[cfg.dontMarkMyself] = ''; for (var i = 0, len = anchors.length; i < len; ++i) { var a = anchors[i], m = a.getAttribute('href'); if (!m) continue; // Extract user page ( /wiki/User_talk:Foo/subpage -> Foo/subpage ) m = m.match(reUserpage); if (!m || !m[2]) continue; // Extract user var userM = m[2], user = userM.replace(/[/#].*/, ''), isMainUserpageLink = user === userM; user = decodeURIComponent(user); // Two consecutive links to the same user? Don't mark followups! previousUser = previousUser === user && !!m[1]; // isUsertalkLink if (previousUser) continue; // only once userM = marker[user]; if (userM === undefined) { userM = ''; // User groups of selected user, polish user name m = this.users[user.replace(/_/g, ' ')]; if (!m) continue; for (var g = 0; g < m.length; g++) { var grpCfg = enabledGroups[m[g]]; if (!grpCfg) continue; // String concatenation is oftentimes faster in modern browsers, // so using Arrays and joining them finally seems advantage. // But we would need an additional IF, so there is no gain. if (userM) userM += '/'; userM += grpCfg.label; } marker[user] = userM ? [userM] : userM; } // Are there markers at all? if (!userM) continue; // Don't mark certain pages, except link to user main page. // Does the link go to the main user page or, if linking subpages is enabled, // is it not a page that is just listing subpages? if (!isMainUserpageLink && noSubpages) continue; // Check finished, now append node marker[user][1] = this.markUser(marker[user], a, node); // Required for consecutive user link check previousUser = user; } // end loop }, markUser: function (mark, a, node) { if (mark[1]) { node = mark[1].cloneNode(1); } else { node = node.cloneNode(1); node.appendChild(document.createTextNode('\u00A0(' + mark[0] + ')')); } a.appendChild(node); this.nodes.push(node); // for reInit return node; } }; mw.hook('userjs.script-loaded.markadmins').add(markAdmins.init); }(mediaWiki, jQuery)); qlndsefs6cksmba8d7qv0x5vckslkpg 15093 15092 2021-03-21T13:26:41Z Minorax 2634 15093 javascript text/javascript /** * Flag administrators and special user group members with a letter * in parenthesis behind links that go into their user namespace. * @Documentation: https://commons.wikimedia.org/wiki/MediaWiki_talk:Gadget-markAdmins.js * E.g. Didym -> Didym (A) * * @rev 3 (14:14, 20 August 2019 (UTC)) * @author Euku - 2005, PDD, Littl, Guandalug * @author Didym - 2014 * @author Rillke <https://blog.rillke.com> - 2014 * @contributor Perhelion - 2017 */ // <nowiki> /* eslint indent:["error","tab",{"outerIIFEBody":0}] */ /* global jQuery:false, mediaWiki:false*/ (function (mw, $) { 'use strict'; var markAdmins = mw.libs.markAdmins = { config: {}, defaults: { groups: { 'sysop': { label: 'A', legacyName: 'Admin', legacyLabelId: 'atxt', enabled: true }, 'oversight': { label: 'OS', legacyName: 'Oversight', legacyLabelId: 'oversighttxt', enabled: true }, 'checkuser': { label: 'CU', legacyName: 'Checkuser', legacyLabelId: 'checkusertxt', enabled: true }, 'bureaucrat': { label: 'B', legacyName: 'Bureaucrat', legacyLabelId: 'bureautxt', enabled: true }, 'steward': { label: 'S', legacyName: 'Steward', legacyLabelId: 'stewtxt', enabled: true }, 'ombudsman': { label: 'Omb', legacyName: 'Ombudsman', legacyLabelId: 'ombtxt', enabled: true }, 'global_sysop': { label: 'GS', legacyName: 'Global Sysop', legacyLabelId: 'gstxt', enabled: true } }, runOn: ['Special', '', 'User', 'User_talk', 'Project', 'File', 'Help'], runOnHistory: true, runOnTalk: true, runOnDiff: true }, init: function (users) { markAdmins.users = users; // Wait for user configuration through their .js // Not adding as a gadget dependency because user .js // is sometimes invalid and fails loading and // gadget dependencies do not offer failed/error options $.when(mw.loader.using('user'), $.ready).then(markAdmins.mergeConfig, markAdmins.mergeConfig); }, mergeConfig: function () { // Merge new configuration var optionsConfig = mw.user.options.get('markAdminCfg'), cfg = $.extend( true, markAdmins.config, markAdmins.defaults, window.markAdminCfg || {}, optionsConfig ? JSON.parse(optionsConfig) : {} ); markAdmins.ns = mw.config.get('wgNamespaceNumber'); cfg.markSubpages = !!window.marksubpages; cfg.dontMarkMyself = window.dontmarkmyself ? mw.config.get('wgUserName') : false; // Namespace run conditions if (!(cfg.runOn.indexOf(mw.config.get('wgCanonicalNamespace')) !== -1 || cfg.runOnHistory && mw.config.get('wgAction') === 'history' || cfg.runOnTalk && markAdmins.ns % 2 || cfg.runOnDiff && !!mw.util.getParamValue('diff'))) return; // Hook-up content loading mw.hook('wikipage.content').add(function ($c) { markAdmins.addLabels($c); }); // bind }, destroy: function () { markAdmins.nodes.forEach(function (n) { $(n).remove(); }); }, nodes: [], // for reInit reInit: function () { markAdmins.fullPageProcessed = 0; markAdmins.destroy(); markAdmins.mergeConfig(); }, addLabels: function ($content) { // Right, the configuration evaluation is here // It might be possible to use Ajax for page // navigation in future. var cfg = this.config, noSubpages = !cfg.markSubpages || !!({ Prefixindex: 1, Allpages: 1 })[mw.config.get('wgCanonicalSpecialPageName')], isUserpage = [2, 3].indexOf(this.ns) !== -1, reUserpage = /^\/wiki\/User([ _]talk)?:(.+)/, enabledGroups = {}, marker = {}, previousUser, anchors, node = document.createElement('b'); node.className = 'adminMark'; // Filter enabled groups (Do it here and not later on each anchor) Object.keys(cfg.groups).forEach(function (g, grpCfg) { grpCfg = cfg.groups[g]; if (grpCfg.enabled) enabledGroups[g] = grpCfg; }); if (!this.fullPageProcessed) $content = mw.util.$content || $content; if (!$content[0]) return; anchors = $content[0].getElementsByTagName('a'); // Add also the userpage link if (isUserpage && !this.fullPageProcessed && ((isUserpage = document.getElementById('ca-nstab-user')) && (isUserpage = isUserpage.getElementsByTagName('a')))) { anchors = Array.from(anchors); anchors.push(isUserpage[0]); } this.fullPageProcessed = true; if (cfg.dontMarkMyself) marker[cfg.dontMarkMyself] = ''; for (var i = 0, len = anchors.length; i < len; ++i) { var a = anchors[i], m = a.getAttribute('href'); if (!m) continue; // Extract user page ( /wiki/User_talk:Foo/subpage -> Foo/subpage ) m = m.match(reUserpage); if (!m || !m[2]) continue; // Extract user var userM = m[2], user = userM.replace(/[/#].*/, ''), isMainUserpageLink = user === userM; user = decodeURIComponent(user); // Two consecutive links to the same user? Don't mark followups! previousUser = previousUser === user && !!m[1]; // isUsertalkLink if (previousUser) continue; // only once userM = marker[user]; if (userM === undefined) { userM = ''; // User groups of selected user, polish user name m = this.users[user.replace(/_/g, ' ')]; if (!m) continue; for (var g = 0; g < m.length; g++) { var grpCfg = enabledGroups[m[g]]; if (!grpCfg) continue; // String concatenation is oftentimes faster in modern browsers, // so using Arrays and joining them finally seems advantage. // But we would need an additional IF, so there is no gain. if (userM) userM += '/'; userM += grpCfg.label; } marker[user] = userM ? [userM] : userM; } // Are there markers at all? if (!userM) continue; // Don't mark certain pages, except link to user main page. // Does the link go to the main user page or, if linking subpages is enabled, // is it not a page that is just listing subpages? if (!isMainUserpageLink && noSubpages) continue; // Check finished, now append node marker[user][1] = this.markUser(marker[user], a, node); // Required for consecutive user link check previousUser = user; } // end loop }, markUser: function (mark, a, node) { if (mark[1]) { node = mark[1].cloneNode(1); } else { node = node.cloneNode(1); node.appendChild(document.createTextNode('\u00A0(' + mark[0] + ')')); } a.appendChild(node); this.nodes.push(node); // for reInit return node; } }; mw.hook('userjs.script-loaded.markadmins').add(markAdmins.init); }(mediaWiki, jQuery)); 2i9kcbyz3au5gmm8jd4dz0b3puxy25u 15094 15093 2024-12-21T06:37:02Z Leaderboard 2891 https://en.wikibooks.org/wiki/Wikibooks:Reading_room/Technical_Assistance#c-JJPMaster-20241221062700-Leaderboard-20241221062100 15094 javascript text/javascript /** * Flag administrators and special user group members with a letter * in parenthesis behind links that go into their user namespace. * E.g. Didym -> Didym (A) * @OrigDocumentation: https://commons.wikimedia.org/wiki/MediaWiki_talk:Gadget-markAdmins.js * @Documentation https://en.wikipedia.org/wiki/User:Mdaniels5757/markAdmins * * @rev 3 (14:14, 20 August 2019 (UTC)) * @author Euku - 2005, PDD, Littl, Guandalug * @author Didym - 2014 * @author Rillke <https://blog.rillke.com> - 2014 * @contributor Perhelion - 2017 * @migrator Mdaniels5757 - 2020 * @migrator JJPMaster - 2024 */ // <nowiki> /* eslint indent:["error","tab",{"outerIIFEBody":0}] */ /* global jQuery:false, mediaWiki:false*/ (function (mw, $) { 'use strict'; const MAparams = { action: 'parse', page: 'User:JJPMaster (bot)/markAdmins-Data.json', prop: 'wikitext', format: 'json' }; api = new mw.Api(); api.get(MAparams).done(data => { mw.hook('userjs.script-loaded.markadmins').fire(JSON.parse(data.parse.wikitext['*'])); }); var markAdmins = mw.libs.markAdmins = { config: {}, defaults: { groups: { 'sysop': { label: 'A', legacyName: 'admins', legacyLabelId: 'atxt', enabled: true }, 'bureaucrat': { label: 'B', legacyName: 'bureaucrat', legacyLabelId: 'bureautxt', enabled: true }, 'checkuser': { label: 'CU', legacyName: 'checkuser', legacyLabelId: 'checkusertxt', enabled: true }, 'global-sysop': { label: 'GS', legacyName: 'globalsysop', legacyLabelId: 'gstxt', enabled: true }, 'interface-admin': { label: 'IA', legacyName: 'intadmin', legacyLabelId: 'iatxt', enabled: true }, 'suppress': { label: 'OS', legacyName: 'oversight', legacyLabelId: 'oversighttxt', enabled: true }, 'steward': { label: 'S', legacyName: 'steward', legacyLabelId: 'stewtxt', enabled: true }, 'accountcreator': { label: 'ACC', legacyName: 'acc', legacyLabelId: 'acctxt', enabled: false }, 'autoreview': { label: 'AR', legacyName: 'ar', legacyLabelId: 'artxt', enabled: false }, 'editor': { label: 'REV', legacyName: 'reviewer', legacyLabelId: 'revtxt', enabled: true }, 'transwiki': { label: 'I', legacyName: 'importer', legacyLabelId: 'revtxt', enabled: true }, 'import': { label: 'IU', legacyName: 'importuploader', legacyLabelId: 'revtxt', enabled: true }, 'uploader': { label: 'U', legacyName: 'uploader', legacyLabelId: 'revtxt', enabled: true }, 'vrt-permissions': { label: 'VRT', legacyName: 'vrt', legacyLabelId: 'vrttxt', enabled: true }, 'global-renamer': { label: 'GRe', legacyName: 'gre', legacyLabelId: 'gretxt', enabled: true }, 'global-rollbacker': { label: 'GRb', legacyName: 'grb', legacyLabelId: 'grbtxt', enabled: true }, 'ombuds': { label: 'Omb', legacyName: 'ombuds', legacyLabelId: 'ombtxt', enabled: true } }, runOn: ['Special', 'User', 'User_talk', 'Project', 'File', 'Help'], runOnHistory: true, runOnTalk: true, runOnDiff: true }, init: function (users) { markAdmins.users = users; // Wait for user configuration through their .js // Not adding as a gadget dependency because user .js // is sometimes invalid and fails loading and // gadget dependencies do not offer failed/error options $.when(mw.loader.using('user'), $.ready).then(markAdmins.mergeConfig, markAdmins.mergeConfig); }, mergeConfig: function () { // Merge new configuration var optionsConfig = mw.user.options.get('markAdminCfg'), cfg = $.extend( true, markAdmins.config, markAdmins.defaults, window.markAdminCfg || {}, optionsConfig ? JSON.parse(optionsConfig) : {} ); markAdmins.ns = mw.config.get('wgNamespaceNumber'); cfg.markSubpages = !!window.marksubpages; cfg.dontMarkMyself = window.dontmarkmyself ? mw.config.get('wgUserName') : false; // Namespace run conditions if (!(cfg.runOn.indexOf(mw.config.get('wgCanonicalNamespace')) !== -1 || cfg.runOnHistory && mw.config.get('wgAction') === 'history' || cfg.runOnTalk && markAdmins.ns % 2 || cfg.runOnDiff && !!mw.util.getParamValue('diff'))) return; // Hook-up content loading mw.hook('wikipage.content').add(function ($c) { markAdmins.addLabels($c); }); // bind }, destroy: function () { markAdmins.nodes.forEach(function (n) { $(n).remove(); }); }, nodes: [], // for reInit reInit: function () { markAdmins.fullPageProcessed = 0; markAdmins.destroy(); markAdmins.mergeConfig(); }, addLabels: function ($content) { // Right, the configuration evaluation is here // It might be possible to use Ajax for page // navigation in future. var cfg = this.config, noSubpages = !cfg.markSubpages || !!({ Prefixindex: 1, Allpages: 1 })[mw.config.get('wgCanonicalSpecialPageName')], isUserpage = [2, 3].indexOf(this.ns) !== -1, reUserpage = /^\/wiki\/User([ _]talk)?:(.+)/, enabledGroups = {}, marker = {}, previousUser, anchors, node = document.createElement('b'); node.className = 'adminMark'; // Filter enabled groups (Do it here and not later on each anchor) Object.keys(cfg.groups).forEach(function (g, grpCfg) { grpCfg = cfg.groups[g]; if (grpCfg.enabled) enabledGroups[g] = grpCfg; }); if (!this.fullPageProcessed) $content = mw.util.$content || $content; if (!$content[0]) return; anchors = $content[0].getElementsByTagName('a'); // Add also the userpage link if (isUserpage && !this.fullPageProcessed && ((isUserpage = document.getElementById('ca-nstab-user')) && (isUserpage = isUserpage.getElementsByTagName('a')))) { anchors = Array.from(anchors); anchors.push(isUserpage[0]); } this.fullPageProcessed = true; if (cfg.dontMarkMyself) marker[cfg.dontMarkMyself] = ''; for (var i = 0, len = anchors.length; i < len; ++i) { var a = anchors[i], m = a.getAttribute('href'); if (!m) continue; // Extract user page ( /wiki/User_talk:Foo/subpage -> Foo/subpage ) m = m.match(reUserpage); if (!m || !m[2]) continue; // Extract user var userM = m[2], user = userM.replace(/[/#].*/, ''), isMainUserpageLink = user === userM; user = decodeURIComponent(user); // Two consecutive links to the same user? Don't mark followups! previousUser = previousUser === user && !!m[1]; // isUsertalkLink if (previousUser) continue; // only once userM = marker[user]; if (userM === undefined) { userM = ''; // User groups of selected user, polish user name m = this.users[user.replace(/_/g, ' ')]; if (!m) continue; for (var g = 0; g < m.length; g++) { var grpCfg = enabledGroups[m[g]]; if (!grpCfg) continue; // String concatenation is oftentimes faster in modern browsers, // so using Arrays and joining them finally seems advantage. // But we would need an additional IF, so there is no gain. if (userM) userM += '/'; userM += grpCfg.label; } marker[user] = userM ? [userM] : userM; } // Are there markers at all? if (!userM) continue; // Don't mark certain pages, except link to user main page. // Does the link go to the main user page or, if linking subpages is enabled, // is it not a page that is just listing subpages? if (!isMainUserpageLink && noSubpages) continue; // Check finished, now append node marker[user][1] = this.markUser(marker[user], a, node); // Required for consecutive user link check previousUser = user; } // end loop }, markUser: function (mark, a, node) { if (mark[1]) { node = mark[1].cloneNode(1); } else { node = node.cloneNode(1); node.appendChild(document.createTextNode('\u00A0(' + mark[0] + ')')); } a.appendChild(node); this.nodes.push(node); // for reInit return node; } }; mw.hook('userjs.script-loaded.markadmins').add(markAdmins.init); }(mediaWiki, jQuery)); hkmwt4cqlf6l5roms2k5vc1o5oinu2o 15095 15094 2024-12-21T21:15:10Z Leaderboard 2891 https://en.wikibooks.org/wiki/Wikibooks:Reading_room/Technical_Assistance#c-JJPMaster-20241221170300-Leaderboard-20241221164200 15095 javascript text/javascript /** * Flag administrators and special user group members with a letter * in parenthesis behind links that go into their user namespace. * E.g. Didym -> Didym (A) * @OrigDocumentation: https://commons.wikimedia.org/wiki/MediaWiki_talk:Gadget-markAdmins.js * @Documentation https://en.wikipedia.org/wiki/User:Mdaniels5757/markAdmins * * @rev 3 (14:14, 20 August 2019 (UTC)) * @author Euku - 2005, PDD, Littl, Guandalug * @author Didym - 2014 * @author Rillke <https://blog.rillke.com> - 2014 * @contributor Perhelion - 2017 * @migrator Mdaniels5757 - 2020 * @migrator JJPMaster - 2024 */ // <nowiki> /* eslint indent:["error","tab",{"outerIIFEBody":0}] */ /* global jQuery:false, mediaWiki:false*/ (function (mw, $) { 'use strict'; const MAparams = { action: 'parse', page: 'User:JJPMaster (bot)/markAdmins-Data.json', prop: 'wikitext', format: 'json' }; var api = new mw.Api(); api.get(MAparams).done(data => { mw.hook('userjs.script-loaded.markadmins').fire(JSON.parse(data.parse.wikitext['*'])); }); var markAdmins = mw.libs.markAdmins = { config: {}, defaults: { groups: { 'sysop': { label: 'A', legacyName: 'admins', legacyLabelId: 'atxt', enabled: true }, 'bureaucrat': { label: 'B', legacyName: 'bureaucrat', legacyLabelId: 'bureautxt', enabled: true }, 'checkuser': { label: 'CU', legacyName: 'checkuser', legacyLabelId: 'checkusertxt', enabled: true }, 'global-sysop': { label: 'GS', legacyName: 'globalsysop', legacyLabelId: 'gstxt', enabled: true }, 'interface-admin': { label: 'IA', legacyName: 'intadmin', legacyLabelId: 'iatxt', enabled: true }, 'suppress': { label: 'OS', legacyName: 'oversight', legacyLabelId: 'oversighttxt', enabled: true }, 'steward': { label: 'S', legacyName: 'steward', legacyLabelId: 'stewtxt', enabled: true }, 'accountcreator': { label: 'ACC', legacyName: 'acc', legacyLabelId: 'acctxt', enabled: false }, 'autoreview': { label: 'AR', legacyName: 'ar', legacyLabelId: 'artxt', enabled: false }, 'editor': { label: 'REV', legacyName: 'reviewer', legacyLabelId: 'revtxt', enabled: true }, 'transwiki': { label: 'I', legacyName: 'importer', legacyLabelId: 'revtxt', enabled: true }, 'import': { label: 'IU', legacyName: 'importuploader', legacyLabelId: 'revtxt', enabled: true }, 'uploader': { label: 'U', legacyName: 'uploader', legacyLabelId: 'revtxt', enabled: true }, 'vrt-permissions': { label: 'VRT', legacyName: 'vrt', legacyLabelId: 'vrttxt', enabled: true }, 'global-renamer': { label: 'GRe', legacyName: 'gre', legacyLabelId: 'gretxt', enabled: true }, 'global-rollbacker': { label: 'GRb', legacyName: 'grb', legacyLabelId: 'grbtxt', enabled: true }, 'ombuds': { label: 'Omb', legacyName: 'ombuds', legacyLabelId: 'ombtxt', enabled: true } }, runOn: ['Special', 'User', 'User_talk', 'Project', 'File', 'Help'], runOnHistory: true, runOnTalk: true, runOnDiff: true }, init: function (users) { markAdmins.users = users; // Wait for user configuration through their .js // Not adding as a gadget dependency because user .js // is sometimes invalid and fails loading and // gadget dependencies do not offer failed/error options $.when(mw.loader.using('user'), $.ready).then(markAdmins.mergeConfig, markAdmins.mergeConfig); }, mergeConfig: function () { // Merge new configuration var optionsConfig = mw.user.options.get('markAdminCfg'), cfg = $.extend( true, markAdmins.config, markAdmins.defaults, window.markAdminCfg || {}, optionsConfig ? JSON.parse(optionsConfig) : {} ); markAdmins.ns = mw.config.get('wgNamespaceNumber'); cfg.markSubpages = !!window.marksubpages; cfg.dontMarkMyself = window.dontmarkmyself ? mw.config.get('wgUserName') : false; // Namespace run conditions if (!(cfg.runOn.indexOf(mw.config.get('wgCanonicalNamespace')) !== -1 || cfg.runOnHistory && mw.config.get('wgAction') === 'history' || cfg.runOnTalk && markAdmins.ns % 2 || cfg.runOnDiff && !!mw.util.getParamValue('diff'))) return; // Hook-up content loading mw.hook('wikipage.content').add(function ($c) { markAdmins.addLabels($c); }); // bind }, destroy: function () { markAdmins.nodes.forEach(function (n) { $(n).remove(); }); }, nodes: [], // for reInit reInit: function () { markAdmins.fullPageProcessed = 0; markAdmins.destroy(); markAdmins.mergeConfig(); }, addLabels: function ($content) { // Right, the configuration evaluation is here // It might be possible to use Ajax for page // navigation in future. var cfg = this.config, noSubpages = !cfg.markSubpages || !!({ Prefixindex: 1, Allpages: 1 })[mw.config.get('wgCanonicalSpecialPageName')], isUserpage = [2, 3].indexOf(this.ns) !== -1, reUserpage = /^\/wiki\/User([ _]talk)?:(.+)/, enabledGroups = {}, marker = {}, previousUser, anchors, node = document.createElement('b'); node.className = 'adminMark'; // Filter enabled groups (Do it here and not later on each anchor) Object.keys(cfg.groups).forEach(function (g, grpCfg) { grpCfg = cfg.groups[g]; if (grpCfg.enabled) enabledGroups[g] = grpCfg; }); if (!this.fullPageProcessed) $content = mw.util.$content || $content; if (!$content[0]) return; anchors = $content[0].getElementsByTagName('a'); // Add also the userpage link if (isUserpage && !this.fullPageProcessed && ((isUserpage = document.getElementById('ca-nstab-user')) && (isUserpage = isUserpage.getElementsByTagName('a')))) { anchors = Array.from(anchors); anchors.push(isUserpage[0]); } this.fullPageProcessed = true; if (cfg.dontMarkMyself) marker[cfg.dontMarkMyself] = ''; for (var i = 0, len = anchors.length; i < len; ++i) { var a = anchors[i], m = a.getAttribute('href'); if (!m) continue; // Extract user page ( /wiki/User_talk:Foo/subpage -> Foo/subpage ) m = m.match(reUserpage); if (!m || !m[2]) continue; // Extract user var userM = m[2], user = userM.replace(/[/#].*/, ''), isMainUserpageLink = user === userM; user = decodeURIComponent(user); // Two consecutive links to the same user? Don't mark followups! previousUser = previousUser === user && !!m[1]; // isUsertalkLink if (previousUser) continue; // only once userM = marker[user]; if (userM === undefined) { userM = ''; // User groups of selected user, polish user name m = this.users[user.replace(/_/g, ' ')]; if (!m) continue; for (var g = 0; g < m.length; g++) { var grpCfg = enabledGroups[m[g]]; if (!grpCfg) continue; // String concatenation is oftentimes faster in modern browsers, // so using Arrays and joining them finally seems advantage. // But we would need an additional IF, so there is no gain. if (userM) userM += '/'; userM += grpCfg.label; } marker[user] = userM ? [userM] : userM; } // Are there markers at all? if (!userM) continue; // Don't mark certain pages, except link to user main page. // Does the link go to the main user page or, if linking subpages is enabled, // is it not a page that is just listing subpages? if (!isMainUserpageLink && noSubpages) continue; // Check finished, now append node marker[user][1] = this.markUser(marker[user], a, node); // Required for consecutive user link check previousUser = user; } // end loop }, markUser: function (mark, a, node) { if (mark[1]) { node = mark[1].cloneNode(1); } else { node = node.cloneNode(1); node.appendChild(document.createTextNode('\u00A0(' + mark[0] + ')')); } a.appendChild(node); this.nodes.push(node); // for reInit return node; } }; mw.hook('userjs.script-loaded.markadmins').add(markAdmins.init); }(mediaWiki, jQuery)); ajrp5kypx9246nnn37pwnft1p5d86p4 15096 15095 2024-12-22T12:13:54Z Leaderboard 2891 https://en.wikibooks.org/wiki/Wikibooks:Reading_room/Technical_Assistance#c-JJPMaster-20241222030300-markAdmins_bug_fix 15096 javascript text/javascript /** * Flag administrators and special user group members with a letter * in parenthesis behind links that go into their user namespace. * E.g. Didym -> Didym (A) * @OrigDocumentation: https://commons.wikimedia.org/wiki/MediaWiki_talk:Gadget-markAdmins.js * @Documentation https://en.wikipedia.org/wiki/User:Mdaniels5757/markAdmins * * @rev 3 (14:14, 20 August 2019 (UTC)) * @author Euku - 2005, PDD, Littl, Guandalug * @author Didym - 2014 * @author Rillke <https://blog.rillke.com> - 2014 * @contributor Perhelion - 2017 * @migrator Mdaniels5757 - 2020 * @migrator JJPMaster - 2024 */ // <nowiki> /* eslint indent:["error","tab",{"outerIIFEBody":0}] */ /* global jQuery:false, mediaWiki:false*/ (function (mw, $) { 'use strict'; const MAparams = { action: 'parse', page: 'User:JJPMaster (bot)/markAdmins-Data.json', prop: 'wikitext', format: 'json' }; var api = new mw.Api(); api.get(MAparams).done(data => { mw.hook('userjs.script-loaded.markadmins').fire(JSON.parse(data.parse.wikitext['*'])); }); var markAdmins = mw.libs.markAdmins = { config: {}, defaults: { groups: { 'sysop': { label: 'A', legacyName: 'admins', legacyLabelId: 'atxt', enabled: true }, 'bureaucrat': { label: 'B', legacyName: 'bureaucrat', legacyLabelId: 'bureautxt', enabled: true }, 'checkuser': { label: 'CU', legacyName: 'checkuser', legacyLabelId: 'checkusertxt', enabled: true }, 'global-sysop': { label: 'GS', legacyName: 'globalsysop', legacyLabelId: 'gstxt', enabled: true }, 'interface-admin': { label: 'IA', legacyName: 'intadmin', legacyLabelId: 'iatxt', enabled: true }, 'suppress': { label: 'OS', legacyName: 'oversight', legacyLabelId: 'oversighttxt', enabled: true }, 'steward': { label: 'S', legacyName: 'steward', legacyLabelId: 'stewtxt', enabled: true }, 'accountcreator': { label: 'ACC', legacyName: 'acc', legacyLabelId: 'acctxt', enabled: false }, 'autoreview': { label: 'AR', legacyName: 'ar', legacyLabelId: 'artxt', enabled: false }, 'editor': { label: 'REV', legacyName: 'reviewer', legacyLabelId: 'revtxt', enabled: true }, 'transwiki': { label: 'I', legacyName: 'importer', legacyLabelId: 'revtxt', enabled: true }, 'import': { label: 'IU', legacyName: 'importuploader', legacyLabelId: 'revtxt', enabled: true }, 'uploader': { label: 'U', legacyName: 'uploader', legacyLabelId: 'revtxt', enabled: true }, 'vrt-permissions': { label: 'VRT', legacyName: 'vrt', legacyLabelId: 'vrttxt', enabled: true }, 'global-renamer': { label: 'GRe', legacyName: 'gre', legacyLabelId: 'gretxt', enabled: true }, 'global-rollbacker': { label: 'GRb', legacyName: 'grb', legacyLabelId: 'grbtxt', enabled: true }, 'ombuds': { label: 'Omb', legacyName: 'ombuds', legacyLabelId: 'ombtxt', enabled: true } }, runOn: ['Special', 'User', 'User_talk', 'Project', 'File', 'Help'], runOnHistory: true, runOnTalk: true, runOnDiff: true }, init: function (users) { markAdmins.users = users; // Wait for user configuration through their .js // Not adding as a gadget dependency because user .js // is sometimes invalid and fails loading and // gadget dependencies do not offer failed/error options $.when(mw.loader.using('user'), $.ready).then(markAdmins.mergeConfig, markAdmins.mergeConfig); }, mergeConfig: function () { // Merge new configuration var optionsConfig = mw.user.options.get('markAdminCfg'), cfg = $.extend( true, markAdmins.config, markAdmins.defaults, window.markAdminCfg || {}, optionsConfig ? JSON.parse(optionsConfig) : {} ); markAdmins.ns = mw.config.get('wgNamespaceNumber'); cfg.markSubpages = !!window.marksubpages; cfg.dontMarkMyself = window.dontmarkmyself ? mw.config.get('wgUserName') : false; // Namespace run conditions if (!(cfg.runOn.indexOf(mw.config.get('wgCanonicalNamespace')) !== -1 || cfg.runOnHistory && mw.config.get('wgAction') === 'history' || cfg.runOnTalk && markAdmins.ns % 2 || cfg.runOnDiff && !!mw.util.getParamValue('diff'))) return; // Hook-up content loading mw.hook('wikipage.content').add(function ($c) { markAdmins.addLabels($c); }); // bind }, destroy: function () { markAdmins.nodes.forEach(function (n) { $(n).remove(); }); }, nodes: [], // for reInit reInit: function () { markAdmins.fullPageProcessed = 0; markAdmins.destroy(); markAdmins.mergeConfig(); }, addLabels: function ($content) { // Right, the configuration evaluation is here // It might be possible to use Ajax for page // navigation in future. var cfg = this.config, noSubpages = !cfg.markSubpages || !!({ Prefixindex: 1, Allpages: 1 })[mw.config.get('wgCanonicalSpecialPageName')], isUserpage = [2, 3].indexOf(this.ns) !== -1, reUserpage = /^\/wiki\/User([ _]talk)?:(.+)/, enabledGroups = {}, marker = {}, previousUser, anchors, node = document.createElement('b'); node.className = 'adminMark'; // Filter enabled groups (Do it here and not later on each anchor) Object.keys(cfg.groups).forEach(function (g, grpCfg) { grpCfg = cfg.groups[g]; if (grpCfg.enabled) enabledGroups[g] = grpCfg; }); if (!this.fullPageProcessed) $content = mw.util.$content || $content; if (!$content[0]) return; anchors = $content[0].getElementsByTagName('a'); // Add also the userpage link var containsNstabUser = !!$content[0].querySelector('#ca-nstab-user'); if (!containsNstabUser && isUserpage && !this.fullPageProcessed && ((isUserpage = document.getElementById('ca-nstab-user')) && (isUserpage = isUserpage.getElementsByTagName('a')))) { anchors = Array.from(anchors); anchors.push(isUserpage[0]); } this.fullPageProcessed = true; if (cfg.dontMarkMyself) marker[cfg.dontMarkMyself] = ''; for (var i = 0, len = anchors.length; i < len; ++i) { var a = anchors[i], m = a.getAttribute('href'); if (!m) continue; // Extract user page ( /wiki/User_talk:Foo/subpage -> Foo/subpage ) m = m.match(reUserpage); if (!m || !m[2]) continue; // Extract user var userM = m[2], user = userM.replace(/[/#].*/, ''), isMainUserpageLink = user === userM; user = decodeURIComponent(user); // Two consecutive links to the same user? Don't mark followups! previousUser = previousUser === user; // && !!m[1]; // isUsertalkLink if (previousUser) continue; // only once userM = marker[user]; if (userM === undefined) { userM = ''; // User groups of selected user, polish user name m = this.users[user.replace(/_/g, ' ')]; if (!m) continue; for (var g = 0; g < m.length; g++) { var grpCfg = enabledGroups[m[g]]; if (!grpCfg) continue; // String concatenation is oftentimes faster in modern browsers, // so using Arrays and joining them finally seems advantage. // But we would need an additional IF, so there is no gain. if (userM) userM += '/'; userM += grpCfg.label; } marker[user] = userM ? [userM] : userM; } // Are there markers at all? if (!userM) continue; // Don't mark certain pages, except link to user main page. // Does the link go to the main user page or, if linking subpages is enabled, // is it not a page that is just listing subpages? if (!isMainUserpageLink && noSubpages) continue; // Check finished, now append node marker[user][1] = this.markUser(marker[user], a, node); // Required for consecutive user link check previousUser = user; } // end loop }, markUser: function (mark, a, node) { if (mark[1]) { node = mark[1].cloneNode(1); } else { node = node.cloneNode(1); node.appendChild(document.createTextNode('\u00A0(' + mark[0] + ')')); } a.appendChild(node); this.nodes.push(node); // for reInit return node; } }; mw.hook('userjs.script-loaded.markadmins').add(markAdmins.init); }(mediaWiki, jQuery)); 1zvo0i2tl4u9lpn26hgxn4c0w70om28 15097 15096 2026-08-01T17:32:18Z QueerEcofeminist 1879 [[:en:MediaWiki:Gadget-markAdmins.js]] पासून ९ आवर्तने आयात केलीत 15096 javascript text/javascript /** * Flag administrators and special user group members with a letter * in parenthesis behind links that go into their user namespace. * E.g. Didym -> Didym (A) * @OrigDocumentation: https://commons.wikimedia.org/wiki/MediaWiki_talk:Gadget-markAdmins.js * @Documentation https://en.wikipedia.org/wiki/User:Mdaniels5757/markAdmins * * @rev 3 (14:14, 20 August 2019 (UTC)) * @author Euku - 2005, PDD, Littl, Guandalug * @author Didym - 2014 * @author Rillke <https://blog.rillke.com> - 2014 * @contributor Perhelion - 2017 * @migrator Mdaniels5757 - 2020 * @migrator JJPMaster - 2024 */ // <nowiki> /* eslint indent:["error","tab",{"outerIIFEBody":0}] */ /* global jQuery:false, mediaWiki:false*/ (function (mw, $) { 'use strict'; const MAparams = { action: 'parse', page: 'User:JJPMaster (bot)/markAdmins-Data.json', prop: 'wikitext', format: 'json' }; var api = new mw.Api(); api.get(MAparams).done(data => { mw.hook('userjs.script-loaded.markadmins').fire(JSON.parse(data.parse.wikitext['*'])); }); var markAdmins = mw.libs.markAdmins = { config: {}, defaults: { groups: { 'sysop': { label: 'A', legacyName: 'admins', legacyLabelId: 'atxt', enabled: true }, 'bureaucrat': { label: 'B', legacyName: 'bureaucrat', legacyLabelId: 'bureautxt', enabled: true }, 'checkuser': { label: 'CU', legacyName: 'checkuser', legacyLabelId: 'checkusertxt', enabled: true }, 'global-sysop': { label: 'GS', legacyName: 'globalsysop', legacyLabelId: 'gstxt', enabled: true }, 'interface-admin': { label: 'IA', legacyName: 'intadmin', legacyLabelId: 'iatxt', enabled: true }, 'suppress': { label: 'OS', legacyName: 'oversight', legacyLabelId: 'oversighttxt', enabled: true }, 'steward': { label: 'S', legacyName: 'steward', legacyLabelId: 'stewtxt', enabled: true }, 'accountcreator': { label: 'ACC', legacyName: 'acc', legacyLabelId: 'acctxt', enabled: false }, 'autoreview': { label: 'AR', legacyName: 'ar', legacyLabelId: 'artxt', enabled: false }, 'editor': { label: 'REV', legacyName: 'reviewer', legacyLabelId: 'revtxt', enabled: true }, 'transwiki': { label: 'I', legacyName: 'importer', legacyLabelId: 'revtxt', enabled: true }, 'import': { label: 'IU', legacyName: 'importuploader', legacyLabelId: 'revtxt', enabled: true }, 'uploader': { label: 'U', legacyName: 'uploader', legacyLabelId: 'revtxt', enabled: true }, 'vrt-permissions': { label: 'VRT', legacyName: 'vrt', legacyLabelId: 'vrttxt', enabled: true }, 'global-renamer': { label: 'GRe', legacyName: 'gre', legacyLabelId: 'gretxt', enabled: true }, 'global-rollbacker': { label: 'GRb', legacyName: 'grb', legacyLabelId: 'grbtxt', enabled: true }, 'ombuds': { label: 'Omb', legacyName: 'ombuds', legacyLabelId: 'ombtxt', enabled: true } }, runOn: ['Special', 'User', 'User_talk', 'Project', 'File', 'Help'], runOnHistory: true, runOnTalk: true, runOnDiff: true }, init: function (users) { markAdmins.users = users; // Wait for user configuration through their .js // Not adding as a gadget dependency because user .js // is sometimes invalid and fails loading and // gadget dependencies do not offer failed/error options $.when(mw.loader.using('user'), $.ready).then(markAdmins.mergeConfig, markAdmins.mergeConfig); }, mergeConfig: function () { // Merge new configuration var optionsConfig = mw.user.options.get('markAdminCfg'), cfg = $.extend( true, markAdmins.config, markAdmins.defaults, window.markAdminCfg || {}, optionsConfig ? JSON.parse(optionsConfig) : {} ); markAdmins.ns = mw.config.get('wgNamespaceNumber'); cfg.markSubpages = !!window.marksubpages; cfg.dontMarkMyself = window.dontmarkmyself ? mw.config.get('wgUserName') : false; // Namespace run conditions if (!(cfg.runOn.indexOf(mw.config.get('wgCanonicalNamespace')) !== -1 || cfg.runOnHistory && mw.config.get('wgAction') === 'history' || cfg.runOnTalk && markAdmins.ns % 2 || cfg.runOnDiff && !!mw.util.getParamValue('diff'))) return; // Hook-up content loading mw.hook('wikipage.content').add(function ($c) { markAdmins.addLabels($c); }); // bind }, destroy: function () { markAdmins.nodes.forEach(function (n) { $(n).remove(); }); }, nodes: [], // for reInit reInit: function () { markAdmins.fullPageProcessed = 0; markAdmins.destroy(); markAdmins.mergeConfig(); }, addLabels: function ($content) { // Right, the configuration evaluation is here // It might be possible to use Ajax for page // navigation in future. var cfg = this.config, noSubpages = !cfg.markSubpages || !!({ Prefixindex: 1, Allpages: 1 })[mw.config.get('wgCanonicalSpecialPageName')], isUserpage = [2, 3].indexOf(this.ns) !== -1, reUserpage = /^\/wiki\/User([ _]talk)?:(.+)/, enabledGroups = {}, marker = {}, previousUser, anchors, node = document.createElement('b'); node.className = 'adminMark'; // Filter enabled groups (Do it here and not later on each anchor) Object.keys(cfg.groups).forEach(function (g, grpCfg) { grpCfg = cfg.groups[g]; if (grpCfg.enabled) enabledGroups[g] = grpCfg; }); if (!this.fullPageProcessed) $content = mw.util.$content || $content; if (!$content[0]) return; anchors = $content[0].getElementsByTagName('a'); // Add also the userpage link var containsNstabUser = !!$content[0].querySelector('#ca-nstab-user'); if (!containsNstabUser && isUserpage && !this.fullPageProcessed && ((isUserpage = document.getElementById('ca-nstab-user')) && (isUserpage = isUserpage.getElementsByTagName('a')))) { anchors = Array.from(anchors); anchors.push(isUserpage[0]); } this.fullPageProcessed = true; if (cfg.dontMarkMyself) marker[cfg.dontMarkMyself] = ''; for (var i = 0, len = anchors.length; i < len; ++i) { var a = anchors[i], m = a.getAttribute('href'); if (!m) continue; // Extract user page ( /wiki/User_talk:Foo/subpage -> Foo/subpage ) m = m.match(reUserpage); if (!m || !m[2]) continue; // Extract user var userM = m[2], user = userM.replace(/[/#].*/, ''), isMainUserpageLink = user === userM; user = decodeURIComponent(user); // Two consecutive links to the same user? Don't mark followups! previousUser = previousUser === user; // && !!m[1]; // isUsertalkLink if (previousUser) continue; // only once userM = marker[user]; if (userM === undefined) { userM = ''; // User groups of selected user, polish user name m = this.users[user.replace(/_/g, ' ')]; if (!m) continue; for (var g = 0; g < m.length; g++) { var grpCfg = enabledGroups[m[g]]; if (!grpCfg) continue; // String concatenation is oftentimes faster in modern browsers, // so using Arrays and joining them finally seems advantage. // But we would need an additional IF, so there is no gain. if (userM) userM += '/'; userM += grpCfg.label; } marker[user] = userM ? [userM] : userM; } // Are there markers at all? if (!userM) continue; // Don't mark certain pages, except link to user main page. // Does the link go to the main user page or, if linking subpages is enabled, // is it not a page that is just listing subpages? if (!isMainUserpageLink && noSubpages) continue; // Check finished, now append node marker[user][1] = this.markUser(marker[user], a, node); // Required for consecutive user link check previousUser = user; } // end loop }, markUser: function (mark, a, node) { if (mark[1]) { node = mark[1].cloneNode(1); } else { node = node.cloneNode(1); node.appendChild(document.createTextNode('\u00A0(' + mark[0] + ')')); } a.appendChild(node); this.nodes.push(node); // for reInit return node; } }; mw.hook('userjs.script-loaded.markadmins').add(markAdmins.init); }(mediaWiki, jQuery)); 1zvo0i2tl4u9lpn26hgxn4c0w70om28