Wikipedia testwiki https://test.wikipedia.org/wiki/Main_Page MediaWiki 1.39.0-wmf.23 first-letter Media Special Talk User User talk Wikipedia Wikipedia talk File File talk MediaWiki MediaWiki talk Template Template talk Help Help talk Category Category talk Thread Thread talk Summary Summary talk Test namespace 1 Test namespace 1 talk Test namespace 2 Test namespace 2 talk Draft Draft talk Campaign Campaign talk TimedText TimedText talk Module Module talk SecurePoll SecurePoll talk CNBanner CNBanner talk Translations Translations talk Gadget Gadget talk Gadget definition Gadget definition talk Topic Newsletter Newsletter talk File:MP sounds-pwb.png 6 78320 532575 532348 2022-08-14T02:40:38Z Pywikibot-test 23124 Pywikibot-test uploaded a new version of [[File:MP sounds-pwb.png]] wikitext text/x-wiki pywikibot test mvex885are6ahaz42kwh4kn9swdrp8i 532576 532575 2022-08-14T02:42:48Z Pywikibot-test 23124 Pywikibot-test uploaded a new version of [[File:MP sounds-pwb.png]] wikitext text/x-wiki pywikibot test mvex885are6ahaz42kwh4kn9swdrp8i User:John Vandenberg/async test write 2 81547 532572 532340 2022-08-14T02:05:12Z Pywikibot-test 23124 Pywikibot 7.6.0.dev2 wikitext text/x-wiki 1660442703.445445 1ifxlbk4pjtpnir8yz87gw1w3xijf50 User:John Vandenberg/appendtext test 2 81788 532571 532339 2022-08-14T02:05:02Z Pywikibot-test 23124 wikitext text/x-wiki 1433650768.531433650922.331433651729.111433670166.311433675620.231434189298.391434190713.181434466819.82218051434544025.22135851434556196.60172341435173199.59346151435175699.59451271435227022.74044541435528701.75742911435530425.45590261435603389.080081437231694.72999551437247968.58793571437249806.3797741437298795.05681351437299498.54262071437301447.66920381437302227.7655441437303194.27986031437304101.72397661437310188.7074311437310950.0167771437312161.48824671437313010.34581731437313729.64502261437508795.02368621437509778.81783961437516631.40031891438256915.00195531438380338.75435851438383980.68647171438454064.30758831438457192.55998851438473558.4497151438475370.52737021438888563.82252121439048615.09364531439242551.86522051439284878.94054751439567068.00147221439645869.40761881439653355.34343361439892097.89366271439893989.92894151439937872.74017361439942911.25551271440071096.08264111440280762.25626281440718001.3262011440893319.42683861441040710.94389411441045094.56088661441367039.71286131441492543.00856571441494238.9647241443131370.03606581443212814.54482251454969098.621455143085.01455479939.331458010578.141646415352.6267931646418236.303551646419108.5554141646480673.1255151646486361.30947541646489252.55788281646497776.8472891646500951.96962931646503090.90285371646508464.6270851646557704.72482941646560644.88797711646568704.91856581646573733.00244281646576832.29534481646608917.34515641646654969.60378361646656319.4402261646656560.3573951646667875.37336181646669840.47606131646671473.95034121646674984.85814431646826562.7642131646830600.84946161646833174.90316631646834856.9354641646836733.8114731646848463.33862281646854361.6220061646921244.61630941646929392.52481341646933478.7709891646989628.14013271646993317.0693991647006535.8758381647010068.79893281647067797.81312181647070228.9538041647088146.43666861647129259.68616061647160403.20344641647161418.68453741647165213.34464841647182471.8682351647203984.8648061647204146.85476951647205856.08880071647229928.91692161647232863.2489111647244837.81863951647253131.60572861647253341.66492151647257374.36275241647261586.3715681647328114.68083791647328863.86457971647338369.03202411647345322.46875211647352352.98292641647362207.4400921647376689.68484851647377054.13237741647507817.3071141647520722.49061581647537658.91502861647537706.9929851647537724.92751151647537734.26552411647537734.81241751647537796.29433751647600884.78828861647603345.3407491647607378.26923131647607451.39406541647610335.08369161647619863.80975681647636713.9665881647684938.94061331647686327.2922681647690808.45028761647692744.59212851647732431.32598611647772952.28326751647781284.95441991647800669.47089581647849904.41088181647854192.1383851647860875.18231251647874602.63781051647879297.1874931647883065.4647961647924265.03851251647936769.8719151647951966.8961621648054226.68201351648059130.80152961648060298.43086981648069938.0877581648125306.6112961648143342.68760181648143650.04991751648188528.68711191648196925.6356741648203876.69900561648211369.0150091648230332.54617121648281987.22994761648283693.56241941648285224.71328661648286447.91258651648291573.67376261648291846.70330291648294060.07191231648296246.83941861648298801.97048331648305016.80210021648334644.85586831648379305.4112821648389448.81566381648405605.99447971648411133.04927181648412522.24783181648422117.89680721648446617.8572281648450264.77608821648454199.90044761648467787.75208971648467856.83117841648718888.7086471648726868.34113621648731002.50412491648735298.12991521649690895.66212321649691467.9696281649743553.52938491649755873.90303251649763327.8892521649774138.0124031649777526.37097861649778489.48823021649784790.27565621649860160.37698861649936556.74318031649955430.38933971650002447.5759611650006360.23943541650028605.97354981650039495.475341650041154.52726721650041204.27767731650043469.9524181650182871.47858071650185429.33433821650203503.7359421650214109.96521881650231719.77891951650281824.2778291650288925.13755371650295721.33825951650295882.12538961650300339.22233131650341815.28370641650380832.94509431650402613.69048711650518905.2356281650522569.2941071650530608.544891650531430.3989611650533914.10076831650542738.41888791650546175.9846881650568044.03694751650631023.97239781650632899.72227331650634830.3925491650637007.66384821650640862.5720661650689309.4054381650701657.98250581650703185.78357031650703771.5033541650735123.8095531650738484.06956341650776192.5568211650813066.8977991650848683.918771650861187.31198121650876020.82570171650880474.35385231650881868.45988561650883153.22984271650884549.92777321650886892.40727421650897830.36771461650949494.34935431650949911.4991251650954397.3235271650990281.23737171650995523.8559241651056953.48302131651058845.9713631651060365.91917781651065711.69361521651066891.44208121651068680.67229721651068949.30104371651068950.86070821651069866.21405341651077973.48218511651150569.5798041651150701.53431841651159306.89410231651163972.5414571651207135.13229251651314580.08892971651323639.1569731651335350.97018341651337464.3604491651343671.43810871651358144.34414821651358991.73634841651403991.80600071651408466.43860861651410629.6915031651424095.3323751651424215.430631651424217.16175171651424260.61668921651435316.36143421651477433.62521861651497967.4008731651570956.43188331651571040.13904711651574112.83837941651576178.2236351651585370.21917181651635290.6039241651635576.97641251651635655.45832421651635743.04751161651652652.44804481651673300.35671471651690999.9594171651756658.2204551651756671.9024541651780115.29231761651804123.6068891651841232.36630061651872084.1808571651914696.15967461651915185.17890741651924981.59495141651924985.67764931651947461.11864161652010451.4397451652013169.15126091652018291.04681441652101981.57916931652102144.73755261652205259.24803381652228263.38625721652241111.3187991652241991.0605551652246545.13976341652249133.80611011652345322.74670461652349556.01237941652349776.2655691652350144.64992761652353480.50348451652355561.35055181652355572.5898951652363359.53054261652423597.3604321652425345.54388571652434442.67079141652466898.8122741652467998.09214571652481119.60053971652515900.4313781652516491.8247921652517245.8858371652517458.95822791652523536.91254641652525004.91378931652529117.52156421652530351.27152131652549586.46723871652562013.24319481652614409.32601761652616114.78897861652640389.54013231652701163.91744661652701218.71869951652704583.73101121652736636.34235531652809358.14918331652809500.2787851652885818.32253531652895677.120911652946764.21459771652958152.14900661653025900.08983161653065810.43916341653077663.07969381653095577.50154731653096778.42144161653097676.23765561653097888.80603721653116153.01087381653117420.85944841653118936.11491161653125313.7796781653126335.42993711653134067.09842161653139182.64564281653140672.3829011653154587.25496341653199373.6701311653226953.91169641653231963.08484821653232304.7106561653232554.38019971653232554.62967321653232677.8029061653256433.89535141653299432.4922731653306400.6730731653306472.8736611653393355.7553971653418909.73856261653565475.12498951653565552.10120181653644012.96268871653661508.7837781653661589.44294881653680694.40217831653757986.47126131653758797.5201131653758875.8009641653759516.43632131653815204.55978871653824578.46436481653842638.63208631653842909.72020081653892126.12672331653892420.81626921653892767.61418631653902922.38997861653910982.26115511653911098.50605081653912234.13429621653924819.25348691653941654.93242031653982713.13638191654003151.13523241654003174.6005821654264812.17732931654266724.5675461654268127.23252031654270160.76145861654301043.6971021654301072.0992181654301079.82639071654301896.66440531654334439.6818731654371822.44146631654428936.93347531654437095.0085341654508132.13094881654508335.43588731654520334.84838561654524063.79315451654525364.53509121654534180.4449181654953821.0468051654961938.94488381655036873.3743951655057492.40380381655057801.47854161655062300.50764231655129886.96682861655141011.99076751655166294.6540651655166301.61901331655216132.3208221655223573.8453581655225751.37171321655246178.10818171655296810.23211931655301828.3813591655368778.396751655379956.18857221655380431.36770651655472945.27423521655484574.08949831655507527.0224681655537627.60304521655558615.17976361655563633.72554421655569614.23738551655634387.11088251655645988.83602711655657438.1813961655713626.63884621655721946.37590861655722438.1599561655723778.13386921655725062.77537751655725269.6044051655728370.88312841655752608.5468571655809347.31652141655821992.57788371655831959.40542841655832768.65955691655843607.9513691655847927.774761655910557.06128741655930286.04162761655984718.1677731655984784.72391371656084284.91802841656091464.9171381656108569.03781821656144910.73668431656237464.9551931656238061.17135551656238140.40173581656238882.40057641656238919.37414531656239293.42675191656242411.12083081656246784.30946971656260465.50201821656261907.03887151656263294.21785121656264857.22691631656268330.1211061656268437.60271121656301508.07333091656330302.93307041656330502.12784811656356829.9017161656385974.7934371656387732.02068971656483270.8206721656596673.7715261656635713.02665231656667311.15519761656667757.71407681656693761.8080651656705954.52436731656753744.37684461656763015.42648551656767146.81630661656841740.58635851656845713.36385511656846091.09794041656928094.63535641656948795.61005121656950066.0852351656964699.3929741657002316.55603961657010505.2748941657013544.80798841657015413.77136021657025003.4560941657038750.15809251657039417.24476391657043605.9258891657044407.42733961657051733.92174651657088120.63696361657104460.7448131657108288.86261561657121273.51174641657125154.85219221657140234.29372531657192424.43024661657197439.27889011657198301.67318251657201269.89470821657211198.80976871657271744.8218321657281300.4610831657374150.77523261657476775.62064481657481255.09343081657482599.06296831657497382.093291657539578.63450741657539781.1762681657558369.09502081657799038.87918231657799116.29259251657859471.084171657859516.10439011657962545.19483261657962787.59437661657967228.37440181657974597.18307661658049488.68201351658060577.18078541658064128.90686661658064263.8123631658069341.93958781658077026.34067771658078706.88455961658079600.63347741658081221.23908161658081285.91025161658085023.94248371658128817.5476131658136214.41560361658152834.47753431658166801.45076581658196924.6985691658234310.5858651658247533.30726621658296567.73139791658300378.65953061658303756.00198131658305698.39711261658382887.724681658383856.37543231658384121.3366351658390189.93443231658392025.1128251658412468.54568721658412797.65880041658438616.3758981658471521.65448121658472954.71186351658474751.5916821658474776.28065591658486284.59899661658486319.77809761658486383.9840391658490944.0040541658491220.88122321658494083.36627481658572911.5845361658577899.82729891658587022.79079221658591743.12070351658599637.18309741658603076.26439361658607840.53604631658608068.95690061658632322.36042521658663105.38651751658665771.35931851658667025.4637931658668018.09719041658669787.80982111658691321.1552461658692788.99276071658694425.02418141658719342.8613571658719344.900981658736094.62209821658744041.35345391658748345.99290781658749553.6679561658749620.34319641658764308.11469481658819039.0050441658824812.17245531658842921.14167791658862950.05908541658866951.6806491658867535.5773941658877498.26109531658877516.4155781658896342.94982431658896469.47555181658939089.75173661658940109.93389181658940199.76201341658944478.1677931658949832.38372451658975346.1412181658988816.19879631659008462.91326981659008575.73063641659012991.48196961659082566.04576251659111734.59138541659191868.2587021659192069.37377141659276991.17983721659278060.19959641659278557.4639051659279665.7058661659291621.614421659297216.92868761659331866.86229541659354189.35440971659354306.42374371659361326.9548821659464619.7928551659533068.37608721659559211.29670211659640679.56849721659692194.4455371659694826.56033351659699618.14680341659706153.69699481659708277.1410231659712534.48231081659741263.06693121659801505.29996941659822814.49301031659876301.1942491659882331.1132811659948541.77521731659959539.67876551659961340.3494451660071326.58486721660071391.39187571660110756.72247671660111037.47087141660122573.1154931660124216.86798521660147596.96434471660147634.35918711660178048.02106481660193586.86268121660218841.1327471660218989.31172231660442692.8937364 fapspek9b3zugg6ktj900d1zb30hc1x User:Unicodesnowman/DeleteMark 2 82252 532569 532337 2022-08-14T02:04:47Z Pywikibot-test 23124 pywikibot unit test. Do NOT actually delete. wikitext text/x-wiki {{delete|1=pywikibot unit test. Do NOT actually delete.}} foo cymfz8u3wtlps4m6nlzq7086mgmr0cz 532570 532569 2022-08-14T02:04:50Z Pywikibot-test 23124 unit test wikitext text/x-wiki foo 1e6gpc3ehk0mu2jqu8cg42g009s796b Template:Uw-draftmoved 10 84183 532583 243735 2022-08-14T07:04:06Z PhantomTech 27808 Sync to [[en:Special:Permalink/704226976]] wikitext text/x-wiki {{{icon|[[File:Information.svg|25px|alt=Information icon]]}}} Hello, and thank you for your contributions to Wikipedia. This is just a note to let you know that I've moved the draft that you were working on to {{<includeonly>safesubst:</includeonly>#if: {{{from|}}} | [[:{{{1}}}]], from its old location at {{no redirect|{{{from}}}}}. | [[:{{{1}}}]]. }} This has been done because the [[WP:DRAFTS|Draft namespace]] is the preferred location for [[WP:AFC|Articles for Creation]] submissions. Please feel free to continue to work on it there. If you have any questions about this, you are welcome to ask me on [[User talk:{{<includeonly>safesubst:</includeonly>REVISIONUSER}}|my talk page]]. {{<includeonly>safesubst:</includeonly>#if: {{{2|}}} | {{{2}}} | Thank you. }} <!-- Template:uw-draftmoved --> mh6kp7vezi5rjljekaom2m02cgadycd User:Hamish/Twinkle/modules/twinkleconfig.js 2 112072 532568 501278 2022-08-14T00:04:42Z Hamish 40220 Initialise to a45ce5ccae1827725a629f0301319f7bfc98570b at xi-plus/master javascript text/javascript // <nowiki> (function($) { /* **************************************** *** twinkleconfig.js: Preferences module **************************************** * Mode of invocation: Adds configuration form to Wikipedia:Twinkle/Preferences, and adds an ad box to the top of user subpages belonging to the currently logged-in user which end in '.js' * Active on: What I just said. Yeah. I, [[User:This, that and the other]], originally wrote this. If the code is misbehaving, or you have any questions, don't hesitate to ask me. (This doesn't at all imply [[WP:OWN]]ership - it's just meant to point you in the right direction.) -- TTO */ Twinkle.config = {}; Twinkle.config.watchlistEnums = { 'yes': wgULS('永久加入到监视列表', '永久加入到監視清單'), 'no': wgULS('不加入到监视列表', '不加入到監視清單'), 'default': wgULS('遵守站点设置', '遵守站點設定'), '1 week': wgULS('加入到监视列表1周', '加入到監視清單1週'), '1 month': wgULS('加入到监视列表1个月', '加入到監視清單1個月'), '3 months': wgULS('加入到监视列表3个月', '加入到監視清單3個月'), '6 months': wgULS('加入到监视列表6个月', '加入到監視清單6個月') }; Twinkle.config.commonSets = { csdCriteria: { db: wgULS('自定义理由', '自訂理由'), g1: 'G1', g2: 'G2', g3: 'G3', g5: 'G5', g10: 'G10', g11: 'G11', g12: 'G12', g13: 'G13', g14: 'G14', g15: 'G15', g16: 'G16', a1: 'A1', a2: 'A2', a3: 'A3', a5: 'A5', a6: 'A6', o1: 'O1', o3: 'O3', o4: 'O4', o7: 'O7', o8: 'O8', f1: 'F1', f3: 'F3', f4: 'F4', f5: 'F5', f6: 'F6', f7: 'F7', f8: 'F8', f9: 'F9', f10: 'F10', r2: 'R2', r3: 'R3', r5: 'R5', r6: 'R6', r7: 'R7', r8: 'R8' }, csdCriteriaDisplayOrder: [ 'db', 'g1', 'g2', 'g3', 'g5', 'g10', 'g11', 'g12', 'g13', 'g14', 'g15', 'g16', 'a1', 'a2', 'a3', 'a5', 'a6', 'o1', 'o3', 'o4', 'o7', 'o8', 'f1', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'f10', 'r2', 'r3', 'r5', 'r6', 'r7', 'r8' ], csdCriteriaNotification: { db: wgULS('自定义理由', '自訂理由'), g1: 'G1', g2: 'G2', g3: 'G3', g5: 'G5', g10: 'G10', g11: 'G11', g12: 'G12', g13: 'G13', g14: 'G14', g15: 'G15', g16: 'G16', a1: 'A1', a2: 'A2', a3: 'A3', a5: 'A5', a6: 'A6', o1: 'O1', o3: 'O3', o4: 'O4', o7: 'O7', o8: 'O8', f1: 'F1', f3: 'F3', f4: 'F4', f5: 'F5', f6: 'F6', f7: 'F7', f8: 'F8', f9: 'F9', f10: 'F10', r2: 'R2', r3: 'R3', r5: 'R5', r6: 'R6', r7: 'R7', r8: 'R8' }, csdCriteriaNotificationDisplayOrder: [ 'db', 'g1', 'g2', 'g3', 'g5', 'g10', 'g11', 'g12', 'g13', 'g14', 'g15', 'g16', 'a1', 'a2', 'a3', 'a5', 'a6', 'o1', 'o3', 'o4', 'o7', 'o8', 'f1', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'f10', 'r2', 'r3', 'r5', 'r6', 'r7', 'r8' ], csdAndDICriteria: { db: wgULS('自定义理由', '自訂理由'), g1: 'G1', g2: 'G2', g3: 'G3', g5: 'G5', g10: 'G10', g11: 'G11', g12: 'G12', g13: 'G13', g14: 'G14', g15: 'G15', g16: 'G16', a1: 'A1', a2: 'A2', a3: 'A3', a5: 'A5', a6: 'A6', o1: 'O1', o3: 'O3', o4: 'O4', o7: 'O7', o8: 'O8', f1: 'F1', f3: 'F3', f4: 'F4', f5: 'F5', f6: 'F6', f7: 'F7', f8: 'F8', f9: 'F9', f10: 'F10', r2: 'R2', r3: 'R3', r5: 'R5', r6: 'R6', r7: 'R7', r8: 'R8' }, csdAndDICriteriaDisplayOrder: [ 'db', 'g1', 'g2', 'g3', 'g5', 'g10', 'g11', 'g12', 'g13', 'g14', 'g15', 'g16', 'a1', 'a2', 'a3', 'a5', 'a6', 'o1', 'o3', 'o4', 'o7', 'o8', 'f1', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'f10', 'r2', 'r3', 'r5', 'r6', 'r7', 'r8' ], xfdCriteria: { delete: wgULS('删除', '刪除'), merge: wgULS('合并', '合併'), vmd: wgULS('移动到维基词典', '移動到維基詞典'), vms: wgULS('移动到维基文库', '移動到維基文庫'), vmb: wgULS('移动到维基教科书', '移動到維基教科書'), vmq: wgULS('移动到维基语录', '移動到維基語錄'), vmvoy: wgULS('移动到维基导游', '移動到維基導遊'), vmv: wgULS('移动到维基学院', '移動到維基學院'), fwdcsd: wgULS('转交自快速删除候选', '轉交自快速刪除候選'), fame: wgULS('批量关注度提删', '批次關注度提刪'), substub: wgULS('批量小小作品提删', '批次小小作品提刪'), batch: wgULS('批量其他提删', '批次其他提刪'), ffd: wgULS('文件存废讨论', '檔案存廢討論') }, xfdCriteriaDisplayOrder: [ 'delete', 'merge', 'vmd', 'vms', 'vmb', 'vmq', 'vmvoy', 'vmv', 'fwdcsd', 'fame', 'substub', 'batch', 'ffd' ], namespacesNoSpecial: { 0: wgULS('(条目)', '(條目)'), 1: 'Talk', 2: 'User', 3: 'User talk', 4: 'Wikipedia', 5: 'Wikipedia talk', 6: 'File', 7: 'File talk', 8: 'MediaWiki', 9: 'MediaWiki talk', 10: 'Template', 11: 'Template talk', 12: 'Help', 13: 'Help talk', 14: 'Category', 15: 'Category talk', 100: 'Portal', 101: 'Portal talk', 102: 'WikiProject', 103: 'WikiProject talk', 118: 'Draft', 119: 'Draft talk', 828: 'Module', 829: 'Module talk' } }; /** * Section entry format: * * { * title: <human-readable section title>, * module: <name of the associated module, used to link to sections>, * adminOnly: <true for admin-only sections>, * hidden: <true for advanced preferences that rarely need to be changed - they can still be modified by manually editing twinkleoptions.js>, * preferences: [ * { * name: <TwinkleConfig property name>, * label: <human-readable short description - used as a form label>, * helptip: <(optional) human-readable text (using valid HTML) that complements the description, like limits, warnings, etc.> * adminOnly: <true for admin-only preferences>, * type: <string|boolean|integer|enum|set|customList> (customList stores an array of JSON objects { value, label }), * enumValues: <for type = "enum": a JSON object where the keys are the internal names and the values are human-readable strings>, * setValues: <for type = "set": a JSON object where the keys are the internal names and the values are human-readable strings>, * setDisplayOrder: <(optional) for type = "set": an array containing the keys of setValues (as strings) in the order that they are displayed>, * customListValueTitle: <for type = "customList": the heading for the left "value" column in the custom list editor>, * customListLabelTitle: <for type = "customList": the heading for the right "label" column in the custom list editor> * }, * . . . * ] * }, * . . . * */ Twinkle.config.sections = [ { title: wgULS('常规', '常規'), module: 'general', preferences: [ // TwinkleConfig.userTalkPageMode may take arguments: // 'window': open a new window, remember the opened window // 'tab': opens in a new tab, if possible. // 'blank': force open in a new window, even if such a window exists { name: 'userTalkPageMode', label: wgULS('当要打开用户讨论页时', '當要打開使用者討論頁時'), type: 'enum', enumValues: wgULS( { window: '在窗口中,替换成其它用户对话页', tab: '在新标签页中', blank: '在全新的窗口中' }, { window: '在當前分頁,替換成其它用戶討論頁', tab: '在新分頁中', blank: '在新視窗中' } ) }, // TwinkleConfig.dialogLargeFont (boolean) { name: 'dialogLargeFont', label: wgULS('在Twinkle对话框中使用大号字体', '在Twinkle對話方塊中使用大號字型'), type: 'boolean' }, // Twinkle.config.disabledModules (array) { name: 'disabledModules', label: wgULS('关闭指定的Twinkle模块', '關閉指定的Twinkle模組'), helptip: wgULS('您在此选择的功能将无法使用,取消选择以重新启用功能。', '您在此選擇的功能將無法使用,取消選擇以重新啟用功能。'), type: 'set', setValues: { arv: wgULS('告状', '告狀'), warn: '警告', block: wgULS('封禁', '封鎖'), welcome: wgULS('欢迎', '歡迎'), talkback: '通告', speedy: wgULS('速删', '速刪'), copyvio: wgULS('侵权', '侵權'), xfd: wgULS('提删', '提刪'), image: wgULS('图权', '圖權'), protect: wgULS('保护', '保護'), tag: wgULS('标记', '標記'), stub: '小作品', diff: wgULS('差异', '差異'), unlink: wgULS('链入', '連入'), fluff: '回退' } }, // Twinkle.config.disabledSysopModules (array) { name: 'disabledSysopModules', label: wgULS('关闭指定的Twinkle管理员模块', '關閉指定的Twinkle管理員模組'), helptip: wgULS('您在此选择的功能将无法使用,取消选择以重新启用功能。', '您在此選擇的功能將無法使用,取消選擇以重新啟用功能。'), adminOnly: true, type: 'set', setValues: { batchdelete: wgULS('批删', '批刪'), batchundelete: wgULS('批复', '批復') } } ] }, { title: wgULS('告状', '告狀'), module: 'arv', preferences: [ { name: 'spiWatchReport', label: wgULS('发起傀儡调查时加入到监视列表', '發起傀儡調查時加入到監視清單'), type: 'enum', enumValues: Twinkle.config.watchlistEnums } ] }, { title: wgULS('封禁用户', '封鎖使用者'), module: 'block', adminOnly: true, preferences: [ // TwinkleConfig.defaultToPartialBlocks (boolean) // Whether to default partial blocks on or off { name: 'defaultToPartialBlocks', label: wgULS('打开封禁菜单时默认选择部分封禁', '打開封鎖選單時預設選擇部分封鎖'), type: 'boolean' }, { name: 'customBlockReasonList', label: wgULS('自定义封禁理由', '自訂封鎖理由'), helptip: wgULS('您可以加入常用的封禁理由。自定义的封禁理由会出现在一般的封禁理由下方。', '您可以加入常用的封鎖理由。自訂的封鎖理由會出現在一般的封鎖理由下方。'), type: 'customList', customListValueTitle: wgULS('使用封禁模板(默认为 uw-block1)', '使用封鎖模板(預設為 uw-block1)'), customListLabelTitle: wgULS('“由于…您已被封禁”及封禁日志理由', '「由於…您已被封鎖」及封鎖日誌理由') } ] }, { title: wgULS('图片删除', '圖片刪除'), module: 'image', preferences: [ // TwinkleConfig.notifyUserOnDeli (boolean) // If the user should be notified after placing a file deletion tag { name: 'notifyUserOnDeli', label: wgULS('默认勾选“通知创建者”', '預設勾選「通知建立者」'), type: 'boolean' }, // TwinkleConfig.deliWatchPage (string) // The watchlist setting of the page tagged for deletion. { name: 'deliWatchPage', label: wgULS('标记图片时加入到监视列表', '標記圖片時加入到監視清單'), type: 'enum', enumValues: Twinkle.config.watchlistEnums }, // TwinkleConfig.deliWatchUser (string) // The watchlist setting of the user talk page if a notification is placed. { name: 'deliWatchUser', label: wgULS('标记图片时加入创建者讨论页到监视列表', '標記圖片時加入建立者討論頁到監視清單'), type: 'enum', enumValues: Twinkle.config.watchlistEnums } ] }, { title: wgULS('保护', '保護'), module: 'protect', preferences: [ { name: 'watchRequestedPages', label: wgULS('请求保护页面时加入到监视列表', '請求保護頁面時加入到監視清單'), type: 'enum', enumValues: Twinkle.config.watchlistEnums }, { name: 'watchPPTaggedPages', label: wgULS('标记保护模板时加入到监视列表', '標記保護模板時加入到監視清單'), type: 'enum', enumValues: Twinkle.config.watchlistEnums }, { name: 'watchProtectedPages', label: wgULS('保护时加入到监视列表', '保護時加入到監視清單'), helptip: wgULS('如果在保护后也标记页面,则使用标记页面的参数设置。', '如果在保護後也標記頁面,則使用標記頁面的偏好設定。'), adminOnly: true, type: 'enum', enumValues: Twinkle.config.watchlistEnums } ] }, { title: '回退', // twinklefluff module module: 'fluff', preferences: [ // TwinkleConfig.autoMenuAfterRollback (bool) // Option to automatically open the warning menu if the user talk page is opened post-reversion { name: 'autoMenuAfterRollback', label: wgULS('在Twinkle回退后自动打开用户讨论页上的Twinkle警告菜单', '在Twinkle回退後自動打開使用者討論頁上的Twinkle警告選單'), helptip: wgULS('仅在选取下方对应框时才执行', '僅在選取下方對應框時才執行'), type: 'boolean' }, // TwinkleConfig.openTalkPage (array) // What types of actions that should result in opening of talk page { name: 'openTalkPage', label: wgULS('在这些类型的回退后打开用户讨论页', '在這些類別的回退後打開使用者討論頁'), type: 'set', setValues: { agf: '善意回退', norm: wgULS('常规回退', '常規回退'), vand: wgULS('破坏回退', '破壞回退') } }, // TwinkleConfig.openTalkPageOnAutoRevert (bool) // Defines if talk page should be opened when calling revert from contribs or recent changes pages. If set to true, openTalkPage defines then if talk page will be opened. { name: 'openTalkPageOnAutoRevert', label: wgULS('在从用户贡献及最近更改中发起回退时打开用户讨论页', '在從使用者貢獻及近期變更中發起回退時打開使用者討論頁'), helptip: wgULS('当它打开时,依赖上一个设置。', '當它打開時,依賴上一個設定。'), type: 'boolean' }, // TwinkleConfig.rollbackInPlace (bool) // { name: 'rollbackInPlace', label: wgULS('在从用户贡献及最近更改中发起回退时不刷新页面', '在從使用者貢獻及近期變更中發起回退時不重新整理頁面'), helptip: wgULS('当它打开时,Twinkle将不会在从用户贡献及最近更改中发起回退时刷新页面,允许您一次性回退多个编辑。', '當它打開時,Twinkle將不會在從使用者貢獻及近期變更中發起回退時重新整理頁面,允許您一次性回退多個編輯。'), type: 'boolean' }, // TwinkleConfig.markRevertedPagesAsMinor (array) // What types of actions that should result in marking edit as minor { name: 'markRevertedPagesAsMinor', label: wgULS('将这些类型的回退标记为小修改', '將這些類別的回退標記為小修改'), type: 'set', setValues: { agf: '善意回退', norm: wgULS('常规回退', '常規回退'), vand: wgULS('破坏回退', '破壞回退'), torev: wgULS('“恢复此版本”', '「恢復此版本」') } }, // TwinkleConfig.watchRevertedPages (array) // What types of actions that should result in forced addition to watchlist { name: 'watchRevertedPages', label: wgULS('把这些类型的回退加入到监视列表', '把這些類別的回退加入到監視清單'), type: 'set', setValues: { agf: '善意回退', norm: wgULS('常规回退', '常規回退'), vand: wgULS('破坏回退', '破壞回退'), torev: wgULS('“恢复此版本”', '「恢復此版本」') } }, // TwinkleConfig.watchRevertedExpiry // If any of the above items are selected, whether to expire the watch { name: 'watchRevertedExpiry', label: wgULS('当回退页面时,加入到监视列表的期限', '當回退頁面時,加入到監視清單的期限'), type: 'enum', enumValues: Twinkle.config.watchlistEnums }, // TwinkleConfig.offerReasonOnNormalRevert (boolean) // If to offer a prompt for extra summary reason for normal reverts, default to true { name: 'offerReasonOnNormalRevert', label: wgULS('常规回退时询问理由', '常規回退時詢問理由'), helptip: wgULS('“常规”回退是中间的那个[回退]链接。', '「常規」回退是中間的那個[回退]連結。'), type: 'boolean' }, { name: 'confirmOnFluff', label: wgULS('回退前要求确认(所有设备)', '回退前要求確認(所有裝置)'), helptip: wgULS('对于使用移动设备的用户,或者意志不坚定的。', '對於使用行動裝置的使用者,或者意志不堅定的。'), type: 'boolean' }, { name: 'confirmOnMobileFluff', label: wgULS('回退前要求确认(仅移动设备)', '回退前要求確認(僅行動裝置)'), helptip: wgULS('避免在移动设备意外执行回退。', '避免在行動裝置意外執行回退。'), type: 'boolean' }, // TwinkleConfig.showRollbackLinks (array) // Where Twinkle should show rollback links: // diff, others, mine, contribs, history, recent // Note from TTO: |contribs| seems to be equal to |others| + |mine|, i.e. redundant, so I left it out heres { name: 'showRollbackLinks', label: wgULS('在这些页面上显示回退链接', '在這些頁面上顯示回退連結'), type: 'set', setValues: { diff: wgULS('差异', '差異'), history: wgULS('历史记录', '歷史記錄'), others: wgULS('其它用户的贡献', '其它使用者的貢獻'), mine: wgULS('我的贡献', '我的貢獻'), recentchanges: wgULS('最近更改', '近期變更'), recentchangeslinked: wgULS('相关更改', '相關變更') } }, { name: 'customRevertSummary', label: '回退理由', helptip: wgULS('在查看差异时可选,仅善意回退、常规回退、恢复此版本', '在檢視差異時可選,僅善意回退、常規回退、恢復此版本'), type: 'customList', customListValueTitle: '理由', customListLabelTitle: wgULS('显示的文字', '顯示的文字') } ] }, { title: wgULS('共享IP标记', '共享IP標記'), module: 'shared', preferences: [ { name: 'markSharedIPAsMinor', label: wgULS('将共享IP标记标记为小修改', '將共享IP標記標記為小修改'), type: 'boolean' } ] }, { title: wgULS('快速删除', '快速刪除'), module: 'speedy', preferences: [ { name: 'speedySelectionStyle', label: wgULS('什么时候执行标记或删除', '什麼時候執行標記或刪除'), type: 'enum', enumValues: { buttonClick: wgULS('当我点“提交”时', '當我點「提交」時'), radioClick: wgULS('当我点一个选项时', '當我點一個選項時') } }, // TwinkleConfig.watchSpeedyPages (array) // Whether to add speedy tagged pages to watchlist { name: 'watchSpeedyPages', label: wgULS('将以下理由加入到监视列表', '將以下理由加入到監視清單'), type: 'set', setValues: Twinkle.config.commonSets.csdCriteria, setDisplayOrder: Twinkle.config.commonSets.csdCriteriaDisplayOrder }, // TwinkleConfig.watchSpeedyExpiry // If any of the above items are selected, whether to expire the watch { name: 'watchSpeedyExpiry', label: wgULS('当标记页面时,加入到监视列表的期限', '當標記頁面時,加入到監視清單的期限'), type: 'enum', enumValues: Twinkle.config.watchlistEnums }, // TwinkleConfig.markSpeedyPagesAsPatrolled (boolean) // If, when applying speedy template to page, to mark the page as patrolled (if the page was reached from NewPages) { name: 'markSpeedyPagesAsPatrolled', label: wgULS('标记时标记页面为已巡查(如可能)', '標記時標記頁面為已巡查(如可能)'), type: 'boolean' }, // TwinkleConfig.notifyUserOnSpeedyDeletionNomination (array) // What types of actions should result that the author of the page being notified of nomination { name: 'notifyUserOnSpeedyDeletionNomination', label: wgULS('仅在使用以下理由时通知页面创建者', '僅在使用以下理由時通知頁面建立者'), helptip: wgULS('尽管您在对话框中选择通知,通知仍只会在使用这些理由时发出。', '儘管您在對話方塊中選擇通知,通知仍只會在使用這些理由時發出。'), type: 'set', setValues: Twinkle.config.commonSets.csdCriteriaNotification, setDisplayOrder: Twinkle.config.commonSets.csdCriteriaNotificationDisplayOrder }, // TwinkleConfig.welcomeUserOnSpeedyDeletionNotification (array of strings) // On what types of speedy deletion notifications shall the user be welcomed // with a "firstarticle" notice if his talk page has not yet been created. { name: 'welcomeUserOnSpeedyDeletionNotification', label: wgULS('在使用以下理由时欢迎页面创建者', '在使用以下理由時歡迎頁面建立者'), helptip: wgULS('欢迎模板仅在用户被通知时加入,使用的模板是{{firstarticle}}。', '歡迎模板僅在使用者被通知時加入,使用的模板是{{firstarticle}}。'), type: 'set', setValues: Twinkle.config.commonSets.csdCriteriaNotification, setDisplayOrder: Twinkle.config.commonSets.csdCriteriaNotificationDisplayOrder }, // TwinkleConfig.promptForSpeedyDeletionSummary (array of strings) { name: 'promptForSpeedyDeletionSummary', label: wgULS('使用以下理由删除时允许编辑删除理由', '使用以下理由刪除時允許編輯刪除理由'), adminOnly: true, type: 'set', setValues: Twinkle.config.commonSets.csdAndDICriteria, setDisplayOrder: Twinkle.config.commonSets.csdAndDICriteriaDisplayOrder }, // TwinkleConfig.openUserTalkPageOnSpeedyDelete (array of strings) // What types of actions that should result user talk page to be opened when speedily deleting (admin only) { name: 'openUserTalkPageOnSpeedyDelete', label: wgULS('使用以下理由时打开用户讨论页', '使用以下理由時打開使用者討論頁'), adminOnly: true, type: 'set', setValues: Twinkle.config.commonSets.csdAndDICriteria, setDisplayOrder: Twinkle.config.commonSets.csdAndDICriteriaDisplayOrder }, // TwinkleConfig.deleteTalkPageOnDelete (boolean) // If talk page if exists should also be deleted (CSD G8) when spedying a page (admin only) { name: 'deleteTalkPageOnDelete', label: wgULS('默认勾选“删除讨论页”', '預設勾選「刪除討論頁」'), adminOnly: true, type: 'boolean' }, { name: 'deleteRedirectsOnDelete', label: wgULS('默认勾选“删除重定向”', '預設勾選「刪除重新導向」'), adminOnly: true, type: 'boolean' }, // TwinkleConfig.deleteSysopDefaultToDelete (boolean) // Make the CSD screen default to "delete" instead of "tag" (admin only) { name: 'deleteSysopDefaultToDelete', label: wgULS('默认为直接删除而不是标记', '預設為直接刪除而不是標記'), helptip: wgULS('如果已放置快速删除标记,则永远默认为删除模式。', '如果已放置快速刪除標記,則永遠預設為刪除模式。'), adminOnly: true, type: 'boolean' }, // TwinkleConfig.speedyWindowWidth (integer) // Defines the width of the Twinkle SD window in pixels { name: 'speedyWindowWidth', label: wgULS('快速删除对话框宽度(像素)', '快速刪除對話方塊寬度(像素)'), type: 'integer' }, // TwinkleConfig.speedyWindowWidth (integer) // Defines the width of the Twinkle SD window in pixels { name: 'speedyWindowHeight', label: wgULS('快速删除对话框高度(像素)', '快速刪除對話方塊高度(像素)'), helptip: wgULS('如果您有一台很大的显示器,您可以将此调高。', '如果您有一台很大的顯示器,您可以將此調高。'), type: 'integer' }, { name: 'logSpeedyNominations', label: wgULS('在用户空间中记录所有快速删除提名', '在使用者空間中記錄所有快速刪除提名'), helptip: wgULS('非管理员无法访问到已删除的贡献,用户空间日志提供了一个很好的方法来记录这些历史。', '非管理員無法存取到已刪除的貢獻,使用者空間日誌提供了一個很好的方法來記錄這些歷史。'), type: 'boolean' }, { name: 'speedyLogPageName', label: wgULS('在此页保留日志', '在此頁保留日誌'), helptip: wgULS('在此框中输入子页面名称,您将在User:<i>用户名</i>/<i>子页面</i>找到CSD日志。仅在启用日志时工作。', '在此框中輸入子頁面名稱,您將在User:<i>使用者名稱</i>/<i>子頁面</i>找到CSD日誌。僅在啟用日誌時工作。'), type: 'string' }, { name: 'noLogOnSpeedyNomination', label: wgULS('在使用以下理由时不做记录', '在使用以下理由時不做記錄'), type: 'set', setValues: Twinkle.config.commonSets.csdAndDICriteria, setDisplayOrder: Twinkle.config.commonSets.csdAndDICriteriaDisplayOrder }, { name: 'enlargeG11Input', label: wgULS('扩大CSD G11的按钮', '擴大CSD G11的按鈕'), helptip: wgULS('扩为默认的两倍大。', '擴為預設的兩倍大。'), type: 'boolean' } ] }, { title: wgULS('标记', '標記'), module: 'tag', preferences: [ { name: 'watchTaggedPages', label: wgULS('标记时加入到监视列表', '標記時加入到監視清單'), type: 'enum', enumValues: Twinkle.config.watchlistEnums }, { name: 'watchMergeDiscussions', label: wgULS('加入合并讨论时监视讨论页', '加入合併討論時監視討論頁'), type: 'enum', enumValues: Twinkle.config.watchlistEnums }, { name: 'markTaggedPagesAsMinor', label: wgULS('将标记标记为小修改', '將標記標記為小修改'), type: 'boolean' }, { name: 'markTaggedPagesAsPatrolled', label: wgULS('默认勾选“标记页面为已巡查”框', '預設勾選「標記頁面為已巡查」框'), type: 'boolean' }, { name: 'groupByDefault', label: wgULS('默认勾选“合并到{{multiple issues}}”复选框', '預設勾選「合併到{{multiple issues}}」核取方塊'), type: 'boolean' }, { name: 'tagArticleSortOrder', label: wgULS('条目标记的默认查看方式', '條目標記的預設檢視方式'), type: 'enum', enumValues: { cat: wgULS('按类型', '按類別'), alpha: '按字母' } }, { name: 'customTagList', label: wgULS('自定义条目维护标记', '自訂條目維護標記'), helptip: wgULS('这些会出现在列表的末尾。', '這些會出現在列表的末尾。'), type: 'customList', customListValueTitle: wgULS('模板名(不含大括号)', '模板名(不含大括號)'), customListLabelTitle: wgULS('显示的文字', '顯示的文字') }, { name: 'customFileTagList', label: wgULS('自定义文件维护标记', '自訂檔案維護標記'), helptip: wgULS('这些会出现在列表的末尾。', '這些會出現在列表的末尾。'), type: 'customList', customListValueTitle: wgULS('模板名(不含大括号)', '模板名(不含大括號)'), customListLabelTitle: wgULS('显示的文字', '顯示的文字') }, { name: 'customRedirectTagList', label: wgULS('自定义重定向维护标记', '自訂重新導向維護標記'), helptip: wgULS('这些会出现在列表的末尾。', '這些會出現在列表的末尾。'), type: 'customList', customListValueTitle: wgULS('模板名(不含大括号)', '模板名(不含大括號)'), customListLabelTitle: wgULS('显示的文字', '顯示的文字') } ] }, { title: '小作品', module: 'stub', preferences: [ { name: 'watchStubbedPages', label: wgULS('标记时加入到监视列表', '標記時加入到監視清單'), type: 'boolean' }, { name: 'markStubbedPagesAsMinor', label: wgULS('将小作品标记为小修改', '將小作品標記為小修改'), type: 'boolean' }, { name: 'markStubbedPagesAsPatrolled', label: wgULS('默认勾选“标记页面为已巡查”框', '預設勾選「標記頁面為已巡查」框'), type: 'boolean' }, { name: 'stubArticleSortOrder', label: wgULS('条目小作品的默认查看方式', '條目小作品的預設檢視方式'), type: 'enum', enumValues: { cat: wgULS('按类型', '按類別'), alpha: '按字母' } }, { name: 'customStubList', label: wgULS('自定义条目小作品标记', '自訂條目小作品標記'), helptip: wgULS('这些会出现在列表的末尾。', '這些會出現在列表的末尾。'), type: 'customList', customListValueTitle: wgULS('模板名(不含大括号)', '模板名(不含大括號)'), customListLabelTitle: wgULS('显示的文字', '顯示的文字') } ] }, { title: wgULS('回复', '回覆'), module: 'talkback', preferences: [ { name: 'markTalkbackAsMinor', label: wgULS('将回复标记为小修改', '將回覆標記為小修改'), type: 'boolean' }, { name: 'insertTalkbackSignature', label: wgULS('回复时加入签名', '回覆時加入簽名'), helptip: wgULS('Flow页除外。', 'Flow頁除外。'), type: 'boolean' }, { name: 'talkbackHeading', label: wgULS('回复所用的小节标题', '回覆所用的小節標題'), type: 'string' }, { name: 'mailHeading', label: wgULS('“有新邮件”所用的小节标题', '「有新郵件」所用的小節標題'), type: 'string' } ] }, { title: wgULS('取消链入', '取消連入'), module: 'unlink', preferences: [ // TwinkleConfig.unlinkNamespaces (array) // In what namespaces unlink should happen, default in 0 (article) and 100 (portal) { name: 'unlinkNamespaces', label: wgULS('取消以下命名空间中的反向链接', '取消以下命名空間中的反向連結'), helptip: wgULS('请避免选择讨论页,因这样会导致Twinkle试图修改讨论存档。', '請避免選擇討論頁,因這樣會導致Twinkle試圖修改討論存檔。'), type: 'set', setValues: Twinkle.config.commonSets.namespacesNoSpecial } ] }, { title: wgULS('警告用户', '警告使用者'), module: 'warn', preferences: [ // TwinkleConfig.defaultWarningGroup (int) // if true, watch the page which has been dispatched an warning or notice, if false, default applies { name: 'defaultWarningGroup', label: wgULS('默认警告级别', '預設警告級別'), type: 'enum', enumValues: { 1: '1:提醒', 2: '2:注意', 3: '3:警告', 4: wgULS('4:最后警告', '4:最後警告'), 5: '4im:唯一警告', 6: wgULS('单层级提醒', '單層級提醒'), 7: wgULS('单层级警告', '單層級警告'), // 8 was used for block templates before #260 9: wgULS('自定义警告', '自訂警告'), 10: '所有警告模板', 11: wgULS('自动选择层级(1-4)', '自動選擇層級(1-4)') } }, // TwinkleConfig.combinedSingletMenus (boolean) // if true, show one menu with both single-issue notices and warnings instead of two separately { name: 'combinedSingletMenus', label: wgULS('将两个单层级菜单合并成一个', '將兩個單層級選單合併成一個'), helptip: wgULS('当启用此选项时,无论默认警告级别选择单层级通知或单层级警告皆属于此项。', '當啟用此選項時,無論預設警告級別選擇單層級通知或單層級警告皆屬於此項。'), type: 'boolean' }, // TwinkleConfig.showSharedIPNotice may take arguments: // true: to show shared ip notice if an IP address // false: to not print the notice { name: 'showSharedIPNotice', label: wgULS('在IP讨论页上显示附加信息', '在IP討論頁上顯示附加資訊'), helptip: '使用的模板是{{SharedIPAdvice}}。', type: 'boolean' }, // TwinkleConfig.watchWarnings (string) // Watchlist setting for the page which has been dispatched an warning or notice { name: 'watchWarnings', label: wgULS('警告时加入用户讨论页到监视列表', '警告時加入使用者討論頁到監視清單'), helptip: wgULS('注意:如果对方使用Flow,对应讨论串总会加到监视列表中。', '注意:如果對方使用Flow,對應討論串總會加到監視清單中。'), type: 'enum', enumValues: Twinkle.config.watchlistEnums }, // TwinkleConfig.oldSelect (boolean) // if true, use the native select menu rather the jquery chosen-based one { name: 'oldSelect', label: wgULS('使用不可搜索的经典菜单', '使用不可搜尋的經典選單'), type: 'boolean' }, { name: 'customWarningList', label: wgULS('自定义警告模板', '自訂警告模板'), helptip: wgULS('您可以加入模板或用户子页面。自定义警告会出现在警告对话框中“自定义警告”一节。', '您可以加入模板或使用者子頁面。自訂警告會出現在警告對話方塊中「自訂警告」一節。'), type: 'customList', customListValueTitle: wgULS('模板名(不含大括号)', '模板名(不含大括號)'), customListLabelTitle: wgULS('显示的文字(和编辑摘要)', '顯示的文字(和編輯摘要)') } ] }, { title: wgULS('欢迎用户', '歡迎使用者'), module: 'welcome', preferences: [ { name: 'topWelcomes', label: wgULS('将欢迎放在用户讨论页的最上方', '將歡迎放在使用者討論頁的最上方'), type: 'boolean' }, { name: 'watchWelcomes', label: wgULS('在欢迎时将用户讨论页加入监视列表', '在歡迎時將使用者討論頁加入監視清單'), helptip: wgULS('您将可以关注新手如何与他人协作,并能够适时地提供帮助。', '您將可以關注新手如何與他人協作,並能夠適時地提供幫助。'), type: 'enum', enumValues: Twinkle.config.watchlistEnums }, /* { name: 'insertUsername', label: wgULS('Add your username to the template (where applicable)'), helptip: "Some welcome templates have an opening sentence like \"Hi, I'm &lt;username&gt;. Welcome\" etc. If you turn off this option, these templates will not display your username in that way.", type: 'boolean' }, */ { name: 'quickWelcomeMode', label: wgULS('在差异页面单击“欢迎”链接时将会', '在差異頁面點擊「歡迎」連結時將會'), helptip: wgULS('如果您选择自动欢迎,将会使用下方指定的模板。', '如果您選擇自動歡迎,將會使用下方指定的模板。'), type: 'enum', enumValues: { auto: wgULS('自动欢迎', '自動歡迎'), norm: wgULS('要求您选择模板', '要求您選擇模板') } }, { name: 'quickWelcomeTemplate', label: wgULS('自动欢迎时所使用的模板', '自動歡迎時所使用的模板'), helptip: wgULS('输入欢迎模板的名称,不包含大括号,将会加入给定的条目链接。', '輸入歡迎模板的名稱,不包含大括號,將會加入給定的條目連結。'), type: 'string' }, { name: 'customWelcomeList', label: wgULS('自定义欢迎模板', '自訂歡迎模板'), helptip: wgULS('您可以加入其他欢迎模板,或是欢迎模板的用户子页面(以User:开头)。别忘了这些模板会在用户讨论页上替换引用。', '您可以加入其他歡迎模板,或是歡迎模板的使用者子頁面(以User:開頭)。別忘了這些模板會在使用者討論頁上替換引用。'), type: 'customList', customListValueTitle: wgULS('模板名(不含大括号)', '模板名(不含大括號)'), customListLabelTitle: wgULS('显示的文字', '顯示的文字') }, { name: 'customWelcomeSignature', label: wgULS('在自定义模板中自动签名', '在自訂模板中自動簽名'), helptip: wgULS('如果您的自动欢迎模板包含内置签名,请关闭此项。', '如果您的自動歡迎模板包含內建簽名,請關閉此項。'), type: 'boolean' } ] }, { title: wgULS('存废讨论', '存廢討論'), module: 'xfd', preferences: [ { name: 'logXfdNominations', label: wgULS('在用户空间中记录所有存废讨论提名', '在使用者空間中記錄所有存廢討論提名'), helptip: wgULS('该日志供您追踪所有通过Twinkle提交的存废讨论', '該日誌供您追蹤所有透過Twinkle提交的存廢討論'), type: 'boolean' }, { name: 'xfdLogPageName', label: wgULS('在此页保留日志', '在此頁保留日誌'), helptip: wgULS('在此框中输入子页面名称,您将在User:<i>用户名</i>/<i>子页面</i>找到XFD日志。仅在启用日志时工作。', '在此框中輸入子頁面名稱,您將在User:<i>使用者名稱</i>/<i>子頁面</i>找到XFD日誌。僅在啟用日誌時工作。'), type: 'string' }, { name: 'noLogOnXfdNomination', label: wgULS('在使用以下理由时不做记录', '在使用以下理由時不做記錄'), type: 'set', setValues: Twinkle.config.commonSets.xfdCriteria, setDisplayOrder: Twinkle.config.commonSets.xfdCriteriaDisplayOrder }, // TwinkleConfig.xfdWatchPage (string) // The watchlist setting of the page being nominated for XfD. { name: 'xfdWatchPage', label: wgULS('加入提名的页面到监视列表', '加入提名的頁面到監視清單'), type: 'enum', enumValues: Twinkle.config.watchlistEnums }, // TwinkleConfig.xfdWatchDiscussion (string) // The watchlist setting of the newly created XfD page (for those processes that create discussion pages for each nomination), // or the list page for the other processes. { name: 'xfdWatchDiscussion', label: wgULS('加入存废讨论页到监视列表', '加入存廢討論頁到監視清單'), helptip: wgULS('当日的页面。', '當日的頁面。'), type: 'enum', enumValues: Twinkle.config.watchlistEnums }, // TwinkleConfig.xfdWatchUser (string) // The watchlist setting of the user talk page if they receive a notification. { name: 'xfdWatchUser', label: wgULS('加入创建者讨论页到监视列表(在通知时)', '加入建立者討論頁到監視清單(在通知時)'), type: 'enum', enumValues: Twinkle.config.watchlistEnums }, { name: 'markXfdPagesAsPatrolled', label: wgULS('标记时标记页面为已巡查(如可能)', '標記時標記頁面為已巡查(如可能)'), helptip: wgULS('基于技术原因,页面仅会在由Special:NewPages到达时被标记为已巡查。', '基於技術原因,頁面僅會在由Special:NewPages到達時被標記為已巡查。'), type: 'boolean' }, { name: 'FwdCsdToXfd', label: wgULS('提删类型增加转交自快速删除候选', '提刪類別增加轉交自快速刪除候選'), helptip: wgULS('请确保您充分了解[[Wikipedia:快速删除方针]]才开启此功能。', '請確保您充分了解[[Wikipedia:快速刪除方針]]才開啟此功能。'), type: 'boolean' }, { name: 'afdDefaultCategory', label: wgULS('默认提删类型', '預設提刪類別'), helptip: wgULS('若选择“相同于上次选择”将使用localStorage来记忆。', '若選擇「相同於上次選擇」將使用localStorage來記憶。'), type: 'enum', enumValues: { delete: wgULS('删除', '刪除'), same: wgULS('相同于上次选择', '相同於上次選擇') } }, { name: 'afdFameDefaultReason', label: wgULS('默认关注度提删理由', '預設關注度提刪理由'), helptip: wgULS('用于批量提删。', '用於批次提刪。'), type: 'string' }, { name: 'afdSubstubDefaultReason', label: wgULS('默认小小作品提删理由', '預設小小作品提刪理由'), helptip: wgULS('用于批量提删。', '用於批次提刪。'), type: 'string' } ] }, { title: wgULS('关闭存废讨论', '關閉存廢討論'), module: 'close', preferences: [ { name: 'XfdClose', label: wgULS('在存废讨论显示关闭讨论按钮', '在存廢討論顯示關閉討論按鈕'), helptip: wgULS('请确保您充分了解[[Wikipedia:关闭存废讨论指引]]才开启此功能。', '請確保您充分了解[[Wikipedia:關閉存廢討論指引]]才開啟此功能。'), type: 'enum', enumValues: { hide: wgULS('不显示', '不顯示'), nonadminonly: wgULS('只包含非管理员可使用选项', '只包含非管理員可使用選項'), all: wgULS('显示所有选项', '顯示所有選項') } } ] }, { title: wgULS('侵犯著作权', '侵犯著作權'), module: 'copyvio', preferences: [ // TwinkleConfig.copyvioWatchPage (string) // The watchlist setting of the page being nominated for XfD. { name: 'copyvioWatchPage', label: wgULS('加入提报的页面到监视列表', '加入提報的頁面到監視清單'), type: 'enum', enumValues: Twinkle.config.watchlistEnums }, // TwinkleConfig.copyvioWatchUser (string) // The watchlist setting of the user if he receives a notification. { name: 'copyvioWatchUser', label: wgULS('加入创建者讨论页到监视列表(在通知时)', '加入建立者討論頁到監視清單(在通知時)'), type: 'enum', enumValues: Twinkle.config.watchlistEnums }, // TwinkleConfig.markCopyvioPagesAsPatrolled (boolean) // If, when applying copyvio template to page, to mark the page as patrolled (if the page was reached from NewPages) { name: 'markCopyvioPagesAsPatrolled', label: wgULS('标记时标记页面为已巡查(如可能)', '標記時標記頁面為已巡查(如可能)'), helptip: wgULS('基于技术原因,页面仅会在由Special:NewPages到达时被标记为已巡查。', '基於技術原因,頁面僅會在由Special:NewPages到達時被標記為已巡查。'), type: 'boolean' } ] }, { title: wgULS('隐藏', '隱藏'), hidden: true, preferences: [ // twinkle.js: portlet setup { name: 'portletArea', type: 'string' }, { name: 'portletId', type: 'string' }, { name: 'portletName', type: 'string' }, { name: 'portletType', type: 'string' }, { name: 'portletNext', type: 'string' }, // twinklefluff.js: defines how many revision to query maximum, maximum possible is 50, default is 50 { name: 'revertMaxRevisions', type: 'integer' }, // twinklebatchdelete.js: How many pages should be processed maximum { name: 'batchMax', type: 'integer', adminOnly: true }, // How many pages should be processed at a time by deprod and batchdelete/protect/undelete { name: 'batchChunks', type: 'integer', adminOnly: true } ] } ]; // end of Twinkle.config.sections Twinkle.config.init = function twinkleconfigInit() { // create the config page at Twinkle.getPref('configPage') if (mw.config.get('wgPageName') === Twinkle.getPref('configPage') && mw.config.get('wgAction') === 'view') { if (!document.getElementById('twinkle-config')) { return; // maybe the page is misconfigured, or something - but any attempt to modify it will be pointless } // set style (the url() CSS function doesn't seem to work from wikicode - ?!) document.getElementById('twinkle-config-titlebar').style.backgroundImage = 'url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB%2FqqA%2BAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEhQTFRFr73ZobTPusjdsMHZp7nVwtDhzNbnwM3fu8jdq7vUt8nbxtDkw9DhpbfSvMrfssPZqLvVztbno7bRrr7W1d%2Fs1N7qydXk0NjpkW7Q%2BgAAADVJREFUeNoMwgESQCAAAMGLkEIi%2FP%2BnbnbpdB59app5Vdg0sXAoMZCpGoFbK6ciuy6FX4ABAEyoAef0BXOXAAAAAElFTkSuQmCC)'; var contentdiv = document.getElementById('twinkle-config-content'); contentdiv.textContent = ''; // clear children // let user know about possible conflict with monobook.js/vector.js file // (settings in that file will still work, but they will be overwritten by twinkleoptions.js settings) var contentnotice = document.createElement('p'); // I hate innerHTML, but this is one thing it *is* good for... contentnotice.innerHTML = '<b>' + wgULS('在这里修改您的参数设置之前,', '在這裡修改您的偏好設定之前,') + '</b>' + wgULS('确认您已移除了', '確認您已移除了') + '<a href="' + mw.util.getUrl('Special:MyPage/skin.js') + '" title="Special:MyPage/skin.js">' + wgULS('用户JavaScript文件', '使用者JavaScript檔案') + '</a>' + wgULS('中任何旧的', '中任何舊的') + '<code>FriendlyConfig</code>' + wgULS('设置。', '設定。'); contentdiv.appendChild(contentnotice); // look and see if the user does in fact have any old settings in their skin JS file var skinjs = new Morebits.wiki.page('User:' + mw.config.get('wgUserName') + '/' + mw.config.get('skin') + '.js'); skinjs.setCallbackParameters(contentnotice); skinjs.load(Twinkle.config.legacyPrefsNotice); // start a table of contents var toctable = document.createElement('div'); toctable.className = 'toc'; toctable.style.marginLeft = '0.4em'; // create TOC title var toctitle = document.createElement('div'); toctitle.id = 'toctitle'; var toch2 = document.createElement('h2'); toch2.textContent = wgULS('目录 ', '目錄 '); toctitle.appendChild(toch2); // add TOC show/hide link var toctoggle = document.createElement('span'); toctoggle.className = 'toctoggle'; toctoggle.appendChild(document.createTextNode('[')); var toctogglelink = document.createElement('a'); toctogglelink.className = 'internal'; toctogglelink.setAttribute('href', '#tw-tocshowhide'); toctogglelink.textContent = wgULS('隐藏', '隱藏'); toctoggle.appendChild(toctogglelink); toctoggle.appendChild(document.createTextNode(']')); toctitle.appendChild(toctoggle); toctable.appendChild(toctitle); // create item container: this is what we add stuff to var tocul = document.createElement('ul'); toctogglelink.addEventListener('click', function twinkleconfigTocToggle() { var $tocul = $(tocul); $tocul.toggle(); if ($tocul.find(':visible').length) { toctogglelink.textContent = wgULS('隐藏', '隱藏'); } else { toctogglelink.textContent = wgULS('显示', '顯示'); } }, false); toctable.appendChild(tocul); contentdiv.appendChild(toctable); var contentform = document.createElement('form'); contentform.setAttribute('action', 'javascript:void(0)'); // was #tw-save - changed to void(0) to work around Chrome issue contentform.addEventListener('submit', Twinkle.config.save, true); contentdiv.appendChild(contentform); var container = document.createElement('table'); container.style.width = '100%'; contentform.appendChild(container); $(Twinkle.config.sections).each(function(sectionkey, section) { if (section.hidden || (section.adminOnly && !Morebits.userIsSysop)) { return true; // i.e. "continue" in this context } // add to TOC var tocli = document.createElement('li'); tocli.className = 'toclevel-1'; var toca = document.createElement('a'); toca.setAttribute('href', '#' + section.module); toca.appendChild(document.createTextNode(section.title)); tocli.appendChild(toca); tocul.appendChild(tocli); var row = document.createElement('tr'); var cell = document.createElement('td'); cell.setAttribute('colspan', '3'); var heading = document.createElement('h4'); heading.style.borderBottom = '1px solid gray'; heading.style.marginTop = '0.2em'; heading.id = section.module; heading.appendChild(document.createTextNode(section.title)); cell.appendChild(heading); row.appendChild(cell); container.appendChild(row); var rowcount = 1; // for row banding // add each of the preferences to the form $(section.preferences).each(function(prefkey, pref) { if (pref.adminOnly && !Morebits.userIsSysop) { return true; // i.e. "continue" in this context } row = document.createElement('tr'); row.style.marginBottom = '0.2em'; // create odd row banding if (rowcount++ % 2 === 0) { row.style.backgroundColor = 'rgba(128, 128, 128, 0.1)'; } cell = document.createElement('td'); var label, input, gotPref = Twinkle.getPref(pref.name); switch (pref.type) { case 'boolean': // create a checkbox cell.setAttribute('colspan', '2'); label = document.createElement('label'); input = document.createElement('input'); input.setAttribute('type', 'checkbox'); input.setAttribute('id', pref.name); input.setAttribute('name', pref.name); if (gotPref === true) { input.setAttribute('checked', 'checked'); } label.appendChild(input); label.appendChild(document.createTextNode(pref.label)); cell.appendChild(label); break; case 'string': // create an input box case 'integer': // add label to first column cell.style.textAlign = 'right'; cell.style.paddingRight = '0.5em'; label = document.createElement('label'); label.setAttribute('for', pref.name); label.appendChild(document.createTextNode(pref.label + ':')); cell.appendChild(label); row.appendChild(cell); // add input box to second column cell = document.createElement('td'); cell.style.paddingRight = '1em'; input = document.createElement('input'); input.setAttribute('type', 'text'); input.setAttribute('id', pref.name); input.setAttribute('name', pref.name); if (pref.type === 'integer') { input.setAttribute('size', 6); input.setAttribute('type', 'number'); input.setAttribute('step', '1'); // integers only } if (gotPref) { input.setAttribute('value', gotPref); } cell.appendChild(input); break; case 'enum': // create a combo box // add label to first column // note: duplicates the code above, under string/integer cell.style.textAlign = 'right'; cell.style.paddingRight = '0.5em'; label = document.createElement('label'); label.setAttribute('for', pref.name); label.appendChild(document.createTextNode(pref.label + ':')); cell.appendChild(label); row.appendChild(cell); // add input box to second column cell = document.createElement('td'); cell.style.paddingRight = '1em'; input = document.createElement('select'); input.setAttribute('id', pref.name); input.setAttribute('name', pref.name); var optionExists = false; $.each(pref.enumValues, function(enumvalue, enumdisplay) { var option = document.createElement('option'); option.setAttribute('value', enumvalue); if ((gotPref === enumvalue) || // Hack to convert old boolean watchlist prefs // to corresponding enums (added in v2.1) (typeof gotPref === 'boolean' && ((gotPref && enumvalue === 'yes') || (!gotPref && enumvalue === 'no')))) { option.setAttribute('selected', 'selected'); optionExists = true; } option.appendChild(document.createTextNode(enumdisplay)); input.appendChild(option); }); // Append user-defined value to options if (!optionExists) { var option = document.createElement('option'); option.setAttribute('value', gotPref); option.setAttribute('selected', 'selected'); option.appendChild(document.createTextNode(gotPref)); input.appendChild(option); } cell.appendChild(input); break; case 'set': // create a set of check boxes // add label first of all cell.setAttribute('colspan', '2'); label = document.createElement('label'); // not really necessary to use a label element here, but we do it for consistency of styling label.appendChild(document.createTextNode(pref.label + ':')); cell.appendChild(label); var checkdiv = document.createElement('div'); checkdiv.style.paddingLeft = '1em'; var worker = function(itemkey, itemvalue) { var checklabel = document.createElement('label'); checklabel.style.marginRight = '0.7em'; checklabel.style.display = 'inline-block'; var check = document.createElement('input'); check.setAttribute('type', 'checkbox'); check.setAttribute('id', pref.name + '_' + itemkey); check.setAttribute('name', pref.name + '_' + itemkey); if (gotPref && gotPref.indexOf(itemkey) !== -1) { check.setAttribute('checked', 'checked'); } // cater for legacy integer array values for unlinkNamespaces (this can be removed a few years down the track...) if (pref.name === 'unlinkNamespaces') { if (gotPref && gotPref.indexOf(parseInt(itemkey, 10)) !== -1) { check.setAttribute('checked', 'checked'); } } checklabel.appendChild(check); checklabel.appendChild(document.createTextNode(itemvalue)); checkdiv.appendChild(checklabel); }; if (pref.setDisplayOrder) { // add check boxes according to the given display order $.each(pref.setDisplayOrder, function(itemkey, item) { worker(item, pref.setValues[item]); }); } else { // add check boxes according to the order it gets fed to us (probably strict alphabetical) $.each(pref.setValues, worker); } cell.appendChild(checkdiv); break; case 'customList': // add label to first column cell.style.textAlign = 'right'; cell.style.paddingRight = '0.5em'; label = document.createElement('label'); label.setAttribute('for', pref.name); label.appendChild(document.createTextNode(pref.label + ':')); cell.appendChild(label); row.appendChild(cell); // add button to second column cell = document.createElement('td'); cell.style.paddingRight = '1em'; var button = document.createElement('button'); button.setAttribute('id', pref.name); button.setAttribute('name', pref.name); button.setAttribute('type', 'button'); button.addEventListener('click', Twinkle.config.listDialog.display, false); // use jQuery data on the button to store the current config value $(button).data({ value: gotPref, pref: pref }); button.appendChild(document.createTextNode(wgULS('编辑项目', '編輯項目'))); cell.appendChild(button); break; default: alert('twinkleconfig: 未知类型的属性 ' + pref.name); break; } row.appendChild(cell); // add help tip cell = document.createElement('td'); cell.style.fontSize = '90%'; cell.style.color = 'gray'; if (pref.helptip) { // convert mentions of templates in the helptip to clickable links cell.innerHTML = pref.helptip.replace(/{{(.+?)}}/g, '{{<a href="' + mw.util.getUrl('Template:') + '$1" target="_blank">$1</a>}}') .replace(/\[\[(.+?)]]/g, '<a href="' + mw.util.getUrl('') + '$1" target="_blank">$1</a>'); } // add reset link (custom lists don't need this, as their config value isn't displayed on the form) if (pref.type !== 'customList') { var resetlink = document.createElement('a'); resetlink.setAttribute('href', '#tw-reset'); resetlink.setAttribute('id', 'twinkle-config-reset-' + pref.name); resetlink.addEventListener('click', Twinkle.config.resetPrefLink, false); resetlink.style.cssFloat = 'right'; resetlink.style.margin = '0 0.6em'; resetlink.appendChild(document.createTextNode(wgULS('复位', '復位'))); cell.appendChild(resetlink); } row.appendChild(cell); container.appendChild(row); return true; }); return true; }); var footerbox = document.createElement('div'); footerbox.setAttribute('id', 'twinkle-config-buttonpane'); footerbox.style.backgroundColor = '#BCCADF'; footerbox.style.padding = '0.5em'; var button = document.createElement('button'); button.setAttribute('id', 'twinkle-config-submit'); button.setAttribute('type', 'submit'); button.appendChild(document.createTextNode(wgULS('保存修改', '儲存修改'))); footerbox.appendChild(button); var footerspan = document.createElement('span'); footerspan.className = 'plainlinks'; footerspan.style.marginLeft = '2.4em'; footerspan.style.fontSize = '90%'; var footera = document.createElement('a'); footera.setAttribute('href', '#tw-reset-all'); footera.setAttribute('id', 'twinkle-config-resetall'); footera.addEventListener('click', Twinkle.config.resetAllPrefs, false); footera.appendChild(document.createTextNode(wgULS('恢复默认', '恢復預設'))); footerspan.appendChild(footera); footerbox.appendChild(footerspan); contentform.appendChild(footerbox); // since all the section headers exist now, we can try going to the requested anchor if (window.location.hash) { var loc = window.location.hash; window.location.hash = ''; window.location.hash = loc; } } else if (mw.config.get('wgNamespaceNumber') === mw.config.get('wgNamespaceIds').user && mw.config.get('wgTitle').indexOf(mw.config.get('wgUserName')) === 0 && mw.config.get('wgPageName').slice(-3) === '.js') { var box = document.createElement('div'); // Styled in twinkle.css box.setAttribute('id', 'twinkle-config-headerbox'); var link, scriptPageName = mw.config.get('wgPageName').slice(mw.config.get('wgPageName').lastIndexOf('/') + 1, mw.config.get('wgPageName').lastIndexOf('.js')); if (scriptPageName === 'twinkleoptions') { // place "why not try the preference panel" notice box.setAttribute('class', 'config-twopt-box'); if (mw.config.get('wgArticleId') > 0) { // page exists box.appendChild(document.createTextNode(wgULS('这页包含您的Twinkle参数设置,您可使用', '這頁包含您的Twinkle偏好設定,您可使用'))); } else { // page does not exist box.appendChild(document.createTextNode(wgULS('您可配置您的Twinkle,通过使用', '您可配置您的Twinkle,通過使用'))); } link = document.createElement('a'); link.setAttribute('href', mw.util.getUrl(Twinkle.getPref('configPage'))); link.appendChild(document.createTextNode(wgULS('Twinkle参数设置面板', 'Twinkle偏好設定面板'))); box.appendChild(link); box.appendChild(document.createTextNode(wgULS(',或直接编辑本页。', ',或直接編輯本頁。'))); $(box).insertAfter($('#contentSub')); } else if (['monobook', 'vector', 'vector-2022', 'cologneblue', 'modern', 'timeless', 'minerva', 'common'].indexOf(scriptPageName) !== -1) { // place "Looking for Twinkle options?" notice box.setAttribute('class', 'config-userskin-box'); box.appendChild(document.createTextNode(wgULS('如果您想配置您的Twinkle,请使用', '如果您想配置您的Twinkle,請使用'))); link = document.createElement('a'); link.setAttribute('href', mw.util.getUrl(Twinkle.getPref('configPage'))); link.appendChild(document.createTextNode(wgULS('Twinkle参数设置面板', 'Twinkle偏好設定面板'))); box.appendChild(link); box.appendChild(document.createTextNode('。')); $(box).insertAfter($('#contentSub')); } } }; // Morebits.wiki.page callback from init code Twinkle.config.legacyPrefsNotice = function twinkleconfigLegacyPrefsNotice(pageobj) { var text = pageobj.getPageText(); var contentnotice = pageobj.getCallbackParameters(); if (text.indexOf('TwinkleConfig') !== -1 || text.indexOf('FriendlyConfig') !== -1) { contentnotice.innerHTML = '<table class="plainlinks ombox ombox-content"><tr><td class="mbox-image">' + '<img alt="" src="http://upload.wikimedia.org/wikipedia/en/3/38/Imbox_content.png" /></td>' + '<td class="mbox-text"><p><big><b>在这里修改您的参数设置之前,</b>您必须移除在用户JavaScript文件中任何旧的Friendly设置。</big></p>' + '<p>要这样做,您可以<a href="' + mw.config.get('wgScript') + '?title=User:' + encodeURIComponent(mw.config.get('wgUserName')) + '/' + mw.config.get('skin') + '.js&action=edit" target="_blank"><b>编辑您的个人JavaScript</b></a>。删除提到<code>FriendlyConfig</code>的代码。</p>' + '</td></tr></table>'; } else { $(contentnotice).remove(); } }; // custom list-related stuff Twinkle.config.listDialog = {}; Twinkle.config.listDialog.addRow = function twinkleconfigListDialogAddRow(dlgtable, value, label) { var contenttr = document.createElement('tr'); // "remove" button var contenttd = document.createElement('td'); var removeButton = document.createElement('button'); removeButton.setAttribute('type', 'button'); removeButton.addEventListener('click', function() { $(contenttr).remove(); }, false); removeButton.textContent = '移除'; contenttd.appendChild(removeButton); contenttr.appendChild(contenttd); // value input box contenttd = document.createElement('td'); var input = document.createElement('input'); input.setAttribute('type', 'text'); input.className = 'twinkle-config-customlist-value'; input.style.width = '97%'; if (value) { input.setAttribute('value', value); } contenttd.appendChild(input); contenttr.appendChild(contenttd); // label input box contenttd = document.createElement('td'); input = document.createElement('input'); input.setAttribute('type', 'text'); input.className = 'twinkle-config-customlist-label'; input.style.width = '98%'; if (label) { input.setAttribute('value', label); } contenttd.appendChild(input); contenttr.appendChild(contenttd); dlgtable.appendChild(contenttr); }; Twinkle.config.listDialog.display = function twinkleconfigListDialogDisplay(e) { var $prefbutton = $(e.target); var curvalue = $prefbutton.data('value'); var curpref = $prefbutton.data('pref'); var dialog = new Morebits.simpleWindow(720, 400); dialog.setTitle(curpref.label); dialog.setScriptName(wgULS('Twinkle参数设置', 'Twinkle偏好設定')); var dialogcontent = document.createElement('div'); var dlgtable = document.createElement('table'); dlgtable.className = 'wikitable'; dlgtable.style.margin = '1.4em 1em'; dlgtable.style.width = '97%'; var dlgtbody = document.createElement('tbody'); // header row var dlgtr = document.createElement('tr'); // top-left cell var dlgth = document.createElement('th'); dlgth.style.width = '5%'; dlgtr.appendChild(dlgth); // value column header dlgth = document.createElement('th'); dlgth.style.width = '35%'; dlgth.textContent = curpref.customListValueTitle ? curpref.customListValueTitle : wgULS('数值', '數值'); dlgtr.appendChild(dlgth); // label column header dlgth = document.createElement('th'); dlgth.style.width = '60%'; dlgth.textContent = curpref.customListLabelTitle ? curpref.customListLabelTitle : wgULS('标签', '標籤'); dlgtr.appendChild(dlgth); dlgtbody.appendChild(dlgtr); // content rows var gotRow = false; $.each(curvalue, function(k, v) { gotRow = true; Twinkle.config.listDialog.addRow(dlgtbody, v.value, v.label); }); // if there are no values present, add a blank row to start the user off if (!gotRow) { Twinkle.config.listDialog.addRow(dlgtbody); } // final "add" button var dlgtfoot = document.createElement('tfoot'); dlgtr = document.createElement('tr'); var dlgtd = document.createElement('td'); dlgtd.setAttribute('colspan', '3'); var addButton = document.createElement('button'); addButton.style.minWidth = '8em'; addButton.setAttribute('type', 'button'); addButton.addEventListener('click', function() { Twinkle.config.listDialog.addRow(dlgtbody); }, false); addButton.textContent = '添加'; dlgtd.appendChild(addButton); dlgtr.appendChild(dlgtd); dlgtfoot.appendChild(dlgtr); dlgtable.appendChild(dlgtbody); dlgtable.appendChild(dlgtfoot); dialogcontent.appendChild(dlgtable); // buttonpane buttons: [Save changes] [Reset] [Cancel] var button = document.createElement('button'); button.setAttribute('type', 'submit'); // so Morebits.simpleWindow puts the button in the button pane button.addEventListener('click', function() { Twinkle.config.listDialog.save($prefbutton, dlgtbody); dialog.close(); }, false); button.textContent = wgULS('保存修改', '儲存修改'); dialogcontent.appendChild(button); button = document.createElement('button'); button.setAttribute('type', 'submit'); // so Morebits.simpleWindow puts the button in the button pane button.addEventListener('click', function() { Twinkle.config.listDialog.reset($prefbutton, dlgtbody); }, false); button.textContent = wgULS('复位', '復位'); dialogcontent.appendChild(button); button = document.createElement('button'); button.setAttribute('type', 'submit'); // so Morebits.simpleWindow puts the button in the button pane button.addEventListener('click', function() { dialog.close(); // the event parameter on this function seems to be broken }, false); button.textContent = '取消'; dialogcontent.appendChild(button); dialog.setContent(dialogcontent); dialog.display(); }; // Resets the data value, re-populates based on the new (default) value, then saves the // old data value again (less surprising behaviour) Twinkle.config.listDialog.reset = function twinkleconfigListDialogReset(button, tbody) { // reset value on button var $button = $(button); var curpref = $button.data('pref'); var oldvalue = $button.data('value'); Twinkle.config.resetPref(curpref); // reset form var $tbody = $(tbody); $tbody.find('tr').slice(1).remove(); // all rows except the first (header) row // add the new values var curvalue = $button.data('value'); $.each(curvalue, function(k, v) { Twinkle.config.listDialog.addRow(tbody, v.value, v.label); }); // save the old value $button.data('value', oldvalue); }; Twinkle.config.listDialog.save = function twinkleconfigListDialogSave(button, tbody) { var result = []; var current = {}; $(tbody).find('input[type="text"]').each(function(inputkey, input) { if ($(input).hasClass('twinkle-config-customlist-value')) { current = { value: input.value }; } else { current.label = input.value; // exclude totally empty rows if (current.value || current.label) { result.push(current); } } }); $(button).data('value', result); }; // reset/restore defaults Twinkle.config.resetPrefLink = function twinkleconfigResetPrefLink(e) { var wantedpref = e.target.id.substring(21); // "twinkle-config-reset-" prefix is stripped // search tactics $(Twinkle.config.sections).each(function(sectionkey, section) { if (section.hidden || (section.adminOnly && !Morebits.userIsSysop)) { return true; // continue: skip impossibilities } var foundit = false; $(section.preferences).each(function(prefkey, pref) { if (pref.name !== wantedpref) { return true; // continue } Twinkle.config.resetPref(pref); foundit = true; return false; // break }); if (foundit) { return false; // break } }); return false; // stop link from scrolling page }; Twinkle.config.resetPref = function twinkleconfigResetPref(pref) { switch (pref.type) { case 'boolean': document.getElementById(pref.name).checked = Twinkle.defaultConfig[pref.name]; break; case 'string': case 'integer': case 'enum': document.getElementById(pref.name).value = Twinkle.defaultConfig[pref.name]; break; case 'set': $.each(pref.setValues, function(itemkey) { if (document.getElementById(pref.name + '_' + itemkey)) { document.getElementById(pref.name + '_' + itemkey).checked = Twinkle.defaultConfig[pref.name].indexOf(itemkey) !== -1; } }); break; case 'customList': $(document.getElementById(pref.name)).data('value', Twinkle.defaultConfig[pref.name]); break; default: alert('twinkleconfig: unknown data type for preference ' + pref.name); break; } }; Twinkle.config.resetAllPrefs = function twinkleconfigResetAllPrefs() { // no confirmation message - the user can just refresh/close the page to abort $(Twinkle.config.sections).each(function(sectionkey, section) { if (section.hidden || (section.adminOnly && !Morebits.userIsSysop)) { return true; // continue: skip impossibilities } $(section.preferences).each(function(prefkey, pref) { if (!pref.adminOnly || Morebits.userIsSysop) { Twinkle.config.resetPref(pref); } }); return true; }); return false; // stop link from scrolling page }; Twinkle.config.save = function twinkleconfigSave(e) { Morebits.status.init(document.getElementById('twinkle-config-content')); var userjs = mw.config.get('wgFormattedNamespaces')[mw.config.get('wgNamespaceIds').user] + ':' + mw.config.get('wgUserName') + '/twinkleoptions.js'; var wikipedia_page = new Morebits.wiki.page(userjs, wgULS('保存参数设置到 ', '儲存偏好設定到 ') + userjs); wikipedia_page.setCallbackParameters(e.target); wikipedia_page.load(Twinkle.config.writePrefs); return false; }; Twinkle.config.writePrefs = function twinkleconfigWritePrefs(pageobj) { var form = pageobj.getCallbackParameters(); // this is the object which gets serialized into JSON; only // preferences that this script knows about are kept var newConfig = {optionsVersion: 2.1}; // a comparison function is needed later on // it is just enough for our purposes (i.e. comparing strings, numbers, booleans, // arrays of strings, and arrays of { value, label }) // and it is not very robust: e.g. compare([2], ["2"]) === true, and // compare({}, {}) === false, but it's good enough for our purposes here var compare = function(a, b) { if ($.isArray(a)) { if (a.length !== b.length) { return false; } var asort = a.sort(), bsort = b.sort(); for (var i = 0; asort[i]; ++i) { // comparison of the two properties of custom lists if ((typeof asort[i] === 'object') && (asort[i].label !== bsort[i].label || asort[i].value !== bsort[i].value)) { return false; } else if (asort[i].toString() !== bsort[i].toString()) { return false; } } return true; } return a === b; }; $(Twinkle.config.sections).each(function(sectionkey, section) { if (section.adminOnly && !Morebits.userIsSysop) { return; // i.e. "continue" in this context } // reach each of the preferences from the form $(section.preferences).each(function(prefkey, pref) { var userValue; // = undefined // only read form values for those prefs that have them if (!pref.adminOnly || Morebits.userIsSysop) { if (!section.hidden) { switch (pref.type) { case 'boolean': // read from the checkbox userValue = form[pref.name].checked; break; case 'string': // read from the input box or combo box case 'enum': userValue = form[pref.name].value; break; case 'integer': // read from the input box userValue = parseInt(form[pref.name].value, 10); if (isNaN(userValue)) { Morebits.status.warn(wgULS('保存', '儲存'), wgULS('您为 ', '您為 ') + pref.name + ' 指定的值(' + pref.value + wgULS(')不合法,会继续保存操作,但此值将会跳过。', ')不合法,會繼續儲存操作,但此值將會跳過。')); userValue = null; } break; case 'set': // read from the set of check boxes userValue = []; if (pref.setDisplayOrder) { // read only those keys specified in the display order $.each(pref.setDisplayOrder, function(itemkey, item) { if (form[pref.name + '_' + item].checked) { userValue.push(item); } }); } else { // read all the keys in the list of values $.each(pref.setValues, function(itemkey) { if (form[pref.name + '_' + itemkey].checked) { userValue.push(itemkey); } }); } break; case 'customList': // read from the jQuery data stored on the button object userValue = $(form[pref.name]).data('value'); break; default: alert('twinkleconfig: 未知数据类型,属性 ' + pref.name); break; } } else if (Twinkle.prefs) { // Retain the hidden preferences that may have customised by the user from twinkleoptions.js // undefined if not set userValue = Twinkle.prefs[pref.name]; } } // only save those preferences that are *different* from the default if (userValue !== undefined && !compare(userValue, Twinkle.defaultConfig[pref.name])) { newConfig[pref.name] = userValue; } }); }); var text = '// <nowiki>\n' + wgULS( '// twinkleoptions.js:用户Twinkle参数设置文件\n' + '//\n' + '// 注:修改您的参数设置最简单的办法是使用\n' + '// Twinkle参数设置面板,在[[' + Morebits.pageNameNorm + ']]。\n' + '//\n' + '// 这个文件是自动生成的,您所做的任何修改(除了\n' + '// 以一种合法的JavaScript的方式来修改这些属性值)会\n' + '// 在下一次您点击“保存”时被覆盖。\n' + '// 修改此文件时,请记得使用合法的JavaScript。\n' + '\n' + 'window.Twinkle.prefs = ', '// twinkleoptions.js:使用者Twinkle參數設定檔案\n' + '//\n' + '// 註:修改您的參數設定最簡單的辦法是使用\n' + '// Twinkle參數設定面板,在[[' + Morebits.pageNameNorm + ']]。\n' + '//\n' + '// 這個檔案是自動產生的,您所做的任何修改(除了\n' + '// 以一種合法的JavaScript的方式來修改這些屬性值)會\n' + '// 在下一次您點擊「儲存」時被覆蓋。\n' + '// 修改此檔案時,請記得使用合法的JavaScript。\n' + '\n' + 'window.Twinkle.prefs = ' ); text += JSON.stringify(newConfig, null, 2); text += ';\n' + '\n' + wgULS('// twinkleoptions.js到此为止\n', '// twinkleoptions.js到此為止\n') + '// </nowiki>'; pageobj.setPageText(text); pageobj.setEditSummary(wgULS('保存Twinkle参数设置:来自[[', '儲存Twinkle偏好設定:來自[[') + Morebits.pageNameNorm + wgULS(']]的自动编辑', ']]的自動編輯')); pageobj.setChangeTags(Twinkle.changeTags); pageobj.setCreateOption('recreate'); pageobj.save(Twinkle.config.saveSuccess); }; Twinkle.config.saveSuccess = function twinkleconfigSaveSuccess(pageobj) { pageobj.getStatusElement().info('成功'); var noticebox = document.createElement('div'); noticebox.className = 'mw-message-box mw-message-box-success'; noticebox.style.fontSize = '100%'; noticebox.style.marginTop = '2em'; noticebox.innerHTML = '<p><b>' + wgULS('您的Twinkle参数设置已被保存。', '您的Twinkle偏好設定已被儲存。') + '</b></p><p>' + wgULS('要看到这些更改,您可能需要', '要看到這些更改,您可能需要') + '<a href="' + mw.util.getUrl('WP:BYPASS') + '" title="WP:BYPASS"><b>' + wgULS('绕过浏览器缓存', '繞過瀏覽器快取') + '</b></a>。</p>'; Morebits.status.root.appendChild(noticebox); var noticeclear = document.createElement('br'); noticeclear.style.clear = 'both'; Morebits.status.root.appendChild(noticeclear); }; Twinkle.addInitCallback(Twinkle.config.init); })(jQuery); // </nowiki> kmvq8vqrdl1shs15yv96p8as7i77lln User:JohanahoJ/sandbox.css 2 112884 532544 532542 2022-08-13T12:50:28Z JohanahoJ 37147 css text/css .script_mlangbabel_langul { margin-top: .5em; } .script_mlangbabel_error { color: #d33; } .script_mlangbabel_info { text-decoration: underline; } e1tcmzgc4tvd753pkc20r9o5038hmtf 532545 532544 2022-08-13T14:28:40Z JohanahoJ 37147 css text/css /* CSS till langListMobile.js */ .scriptcss-langlistmobile-ullang { margin-top: .5em; } 1wboc6a4s2kkswe8ynb3349c5vzgh9h User:JohanahoJ/sandbox.js 2 112889 532543 532541 2022-08-13T12:47:27Z JohanahoJ 37147 javascript text/javascript /* För sidornas språklänkar i mobilvyn (Minerva). Ett urval språklänkar placeras överst i listan. Urvalet definieras av wgULSBabelLanguages (Extension:Babel), vilket kräver att "{{#Babel:...}}" finns på den egna användarhuvudsidan, antingen på det aktuella projektet eller på meta, vilket täcker även andra projekt. Nödvändig modul: 'mediawiki.user' (för ev. felmeddelande och dess länk). */ function main() { 'use strict'; if ( mw.config.get( 'skin' ) !== 'minerva' ) return; window.addEventListener('hashchange', function() { if ( location.hash.indexOf( '#/languages' ) > -1 ) { location.reload(); } }); setTimeout( function() { var langA, langLi, anyCurrLangList; var babelLang = mw.config.get( 'wgULSBabelLanguages' ); if ( !babelLang ) return; anyCurrLangList = document.getElementsByClassName( 'all-languages' )[0]; if ( !anyCurrLangList ) { anyCurrLangList = document .getElementsByClassName( 'suggested-languages' )[0]; } if ( !anyCurrLangList ) return; var langUl = document.createElement( 'ul' ); var langListParent = anyCurrLangList.parentNode; if ( !langListParent ) return; langListParent.prepend( langUl ); langUl.setAttribute( 'id', 'script_mlangbabel_langul' ); langUl.classList.add( 'site-link-list', 'script_mlangbabel_langul' ); if ( !babelLang.length ) { var errorText, infoUrl; if ( mw.config.get( 'wgUserLanguage' ) === 'sv' ) { errorText = 'Hittar inte Babel-inställningar.\xa0'; infoUrl = 'https://meta.wikimedia.org/wiki/User_language/sv'; } else { errorText = 'Can\'t find Babel settings.\xa0'; infoUrl = 'https://meta.wikimedia.org/wiki/User_language'; } var errorDiv = document.createElement( 'div' ); errorDiv.textContent = errorText; errorDiv.classList.add( 'list-header', 'script_mlangbabel_error' ); var babelInfoLink = document.createElement( 'a' ); errorDiv.appendChild( babelInfoLink ); babelInfoLink.textContent = 'Info'; babelInfoLink.classList.add( 'script_mlangbabel_info' ); babelInfoLink.setAttribute( 'href', infoUrl ); langUl.prepend( errorDiv ); return; } babelLang.reverse(); babelLang.forEach( function ( prLang ) { langA = langListParent.getElementsByClassName( prLang )[0]; if ( !langA ) return; langLi = langA.parentElement.closest('li'); if ( !langLi ) langLi = langA; langUl.prepend( langLi ); }); }, 500); } if ( document.readyState === 'loading' ) { document.addEventListener( 'DOMContentLoaded', main ); } else { main(); } ewuqzq2c488rgqiiwo6h3del6mlvvsx 532546 532543 2022-08-13T14:28:43Z JohanahoJ 37147 javascript text/javascript /* langListMobile För mobil (Minerva). Utvalda språklänkar läggs högst upp i iw-listan. */ function main() { 'use strict'; if ( mw.config.get( 'skin' ) !== 'minerva' ) return; window.addEventListener('hashchange', function() { if ( location.hash.indexOf( '#/languages' ) > -1 ) { location.reload(); } }); setTimeout( function() { var aLang, liLang, existingList; existingList = document.getElementsByClassName( 'all-languages' )[0]; if ( !existingList ) { existingList = document .getElementsByClassName( 'suggested-languages' )[0]; } if ( !existingList ) return; var ulLang = document.createElement( 'ul' ); var ulLangParent = existingList.parentNode; if ( !ulLangParent ) return; ulLangParent.prepend( ulLang ); ulLang.setAttribute( 'id', 'scriptid-langlistmobile-ullang' ); ulLang.classList.add( 'site-link-list', 'scriptcss-langlistmobile-ullang' ); var babelLang = mw.config.get( 'wgULSBabelLanguages' ); if ( !babelLang ) return; babelLang.reverse(); babelLang.forEach( function ( prLang ) { aLang = ulLangParent.getElementsByClassName( prLang )[0]; if ( !aLang ) return; liLang = aLang.parentElement.closest('li'); if ( !liLang ) liLang = aLang; ulLang.prepend( liLang ); }); }, 500); } if ( document.readyState === 'loading' ) { document.addEventListener( 'DOMContentLoaded', main ); } else { main(); } 5cq2i1f0ogkp6qxwtcyzzo0sohvi2et 532547 532546 2022-08-13T14:33:50Z JohanahoJ 37147 javascript text/javascript /* langListMobile För mobil (Minerva). Utvalda språklänkar läggs högst upp i iw-listan. */ function main() { 'use strict'; if ( mw.config.get( 'skin' ) !== 'minerva' ) return; window.addEventListener('hashchange', function() { if ( location.hash.indexOf( '#/languages' ) > -1 ) { location.reload(); } }); setTimeout( function() { var aLang, liLang, existingList; existingList = document.getElementsByClassName( 'all-languages' )[0]; if ( !existingList ) { existingList = document .getElementsByClassName( 'suggested-languages' )[0]; } if ( !existingList ) return; var ulLang = document.createElement( 'ul' ); var ulLangParent = existingList.parentNode; if ( !ulLangParent ) return; ulLangParent.prepend( ulLang ); ulLang.setAttribute( 'id', 'scriptid-langlistmobile-ullang' ); ulLang.classList.add( 'site-link-list', 'scriptcss-langlistmobile-ullang' ); var topList = [ 'sv', 'en', 'de', 'nl', 'da', 'no', 'nn', 'it', 'es', 'pt', 'fr' ]; topList.reverse(); topList.forEach( function ( topListed ) { aLang = ulLangParent.getElementsByClassName( topListed )[0]; if ( !aLang ) return; liLang = aLang.parentElement.closest('li'); if ( !liLang ) liLang = aLang; ulLang.prepend( liLang ); }); }, 500); } if ( document.readyState === 'loading' ) { document.addEventListener( 'DOMContentLoaded', main ); } else { main(); } j358jyyovmxcv36wjk2tqcxuxw5kw90 532548 532547 2022-08-13T14:39:05Z JohanahoJ 37147 javascript text/javascript /* langListMobile För mobil (Minerva). Utvalda språklänkar läggs högst upp i iw-listan. */ function main() { 'use strict'; if ( mw.config.get( 'skin' ) !== 'minerva' ) return; window.addEventListener('hashchange', function() { if ( location.hash.indexOf( '#/languages' ) > -1 ) { location.reload(); } }); setTimeout( function() { var aLang, existingList, liLang; existingList = document .getElementsByClassName( 'all-languages' )[0]; if ( !existingList ) { existingList = document .getElementsByClassName( 'suggested-languages' )[0]; } if ( !existingList ) return; var ulLang = document.createElement( 'ul' ); var ulLangParent = existingList.parentNode; if ( !ulLangParent ) return; ulLangParent.prepend( ulLang ); ulLang.setAttribute( 'id', 'scriptid-langlistmobile-ullang' ); ulLang.classList.add( 'site-link-list', 'scriptcss-langlistmobile-ullang' ); var topList = [ 'sv', 'en', 'de', 'nl', 'da', 'no', 'nn', 'it', 'es', 'pt', 'fr' ]; topList.reverse(); topList.forEach( function ( topListed ) { aLang = ulLangParent.getElementsByClassName( topListed )[0]; if ( !aLang ) return; liLang = aLang.parentElement.closest('li'); if ( !liLang ) liLang = aLang; ulLang.prepend( liLang ); }); }, 500); } if ( document.readyState === 'loading' ) { document.addEventListener( 'DOMContentLoaded', main ); } else { main(); } jlxg4x1a14psvjsnfmdo9qoteg226w0 532549 532548 2022-08-13T15:56:56Z JohanahoJ 37147 javascript text/javascript function main() { 'use strict'; var navMwPanel = document.getElementById( 'mw-panel' ); if ( navMwPanel ) { var liWbcEditPage = document .getElementsByClassName( 'wbc-editpage' )[0]; if ( liWbcEditPage ) { navMwPanel.appendChild( liWbcEditPage ); } } } if ( document.readyState === 'loading' ) { document.addEventListener( 'DOMContentLoaded', main ); } else { main(); } sh8h1l9xytfy6z0ht7lsm4muxbtvsy1 532550 532549 2022-08-13T16:12:59Z JohanahoJ 37147 javascript text/javascript function main() { 'use strict'; var navMwPanel = document.getElementById( 'mw-panel' ); if ( navMwPanel ) { var liWbcEditPage = document .getElementsByClassName( 'wbc-editpage' )[0] && document.getElementsByClassName( 'wbc-editpage' )[0] .closest( li.parent ); if ( liWbcEditPage ) { navMwPanel.appendChild( liWbcEditPage ); } } } if ( document.readyState === 'loading' ) { document.addEventListener( 'DOMContentLoaded', main ); } else { main(); } 6atcj3lohhsv1ek2w2e1m7vv2m7ezii 532552 532550 2022-08-13T16:14:48Z JohanahoJ 37147 javascript text/javascript function main() { 'use strict'; var navMwPanel = document.getElementById( 'mw-panel' ); if ( navMwPanel ) { var liWbcEditPage = document .getElementsByClassName( 'wbc-editpage' )[0] && document.getElementsByClassName( 'wbc-editpage' )[0] .parentNode; if ( liWbcEditPage ) { navMwPanel.appendChild( liWbcEditPage ); } } } if ( document.readyState === 'loading' ) { document.addEventListener( 'DOMContentLoaded', main ); } else { main(); } af5ex0omoyk7mzzp7itzp6vcgt55pe1 532553 532552 2022-08-13T16:22:49Z JohanahoJ 37147 javascript text/javascript function main() { 'use strict'; var navMwPanel = document.getElementById( 'mw-panel' ); if ( navMwPanel ) { var liWbcEditPage = document .getElementsByClassName( 'wbc-editpage' )[0] && document.getElementsByClassName( 'wbc-editpage' )[0] .parentNode; if ( liWbcEditPage ) { ulMwPanelBottom = document.createElement( 'ul' ); ulMwPanelBottom.classList .add( 'vector-menu-content-list' ); ulMwPanelBottom.appendChild( liWbcEditPage ); navMwPanel.appendChild( ulMwPanelBottom ); } } } if ( document.readyState === 'loading' ) { document.addEventListener( 'DOMContentLoaded', main ); } else { main(); } ja8jmtxphc0t5saug0nclviscphik9c 532554 532553 2022-08-13T16:25:25Z JohanahoJ 37147 javascript text/javascript function main() { 'use strict'; var navMwPanel = document.getElementById( 'mw-panel' ); if ( navMwPanel ) { var liWbcEditPage = document .getElementsByClassName( 'wbc-editpage' )[0] && document.getElementsByClassName( 'wbc-editpage' )[0] .parentNode; if ( liWbcEditPage ) { var ulMwPanelBottom = document.createElement( 'ul' ); ulMwPanelBottom.classList .add( 'vector-menu-content-list' ); ulMwPanelBottom.appendChild( liWbcEditPage ); navMwPanel.appendChild( ulMwPanelBottom ); } } } if ( document.readyState === 'loading' ) { document.addEventListener( 'DOMContentLoaded', main ); } else { main(); } jj7fsjxl16u02eetg470f1bi0663h7l 532555 532554 2022-08-13T16:29:22Z JohanahoJ 37147 javascript text/javascript function main() { 'use strict'; var navMwPanel = document.getElementById( 'mw-panel' ); if ( navMwPanel ) { var liWbcEditPage = document .getElementsByClassName( 'wbc-editpage' )[0] && document.getElementsByClassName( 'wbc-editpage' )[0] .parentNode; if ( liWbcEditPage ) { var ulMwPanelBottom = document.createElement( 'ul' ); ulMwPanelBottom.classList .add( 'vector-menu-content-list' ); ulMwPanelBottom.setAttribute( 'id', 'scriptid-menuItemsConfig-ulMwPanelBottom' ); ulMwPanelBottom.appendChild( liWbcEditPage ); navMwPanel.appendChild( ulMwPanelBottom ); } } } if ( document.readyState === 'loading' ) { document.addEventListener( 'DOMContentLoaded', main ); } else { main(); } 87p68b8o1nt4l3u1kz8rsfeunox6akp 532558 532555 2022-08-13T17:07:27Z JohanahoJ 37147 javascript text/javascript function main() { 'use strict'; var navMwPanel = document.getElementById( 'mw-panel' ); if ( navMwPanel ) { var liWbcEditPage = document .getElementsByClassName( 'wbc-editpage' )[0] && document.getElementsByClassName( 'wbc-editpage' )[0] .parentNode; if ( liWbcEditPage ) { if ( mw.config.get( 'wgNamespaceNumber' ) !== 0 ) { liWbcEditPage.style.display = 'none'; } else { var ulMwPanelBottom = document.createElement( 'ul' ); ulMwPanelBottom.classList .add( 'vector-menu-content-list' ); ulMwPanelBottom.setAttribute( 'id', 'scriptid-menuItemsConfig-ulMwPanelBottom' ); ulMwPanelBottom.appendChild( liWbcEditPage ); navMwPanel.appendChild( ulMwPanelBottom ); } } } } if ( document.readyState === 'loading' ) { document.addEventListener( 'DOMContentLoaded', main ); } else { main(); } m71au6sie9fgrnk93r4u08pk6d8s97c 532622 532558 2022-08-14T11:43:48Z JohanahoJ 37147 javascript text/javascript function main() { 'use strict'; // Här får p1 en länk till p2 function addFooterLink( p1, p2 ) { var footerUl, footerLi; if ( mw.config.get( 'wgPageName' ) === p1 ) { footerUl = document.getElementById( 'scriptid-footerlink-ul' ); if ( !footerUl ) { footerUl = document.createElement( 'ul' ); footerUl.setAttribute( 'id', 'scriptid-footerlink-ul' ); var footerUlParent = document.getElementById( 'footer' ); if ( !footerUlParent ) return; footerUlParent.prepend( footerUl ); } footerLi = document.createElement( 'li' ); if ( !document.getElementById( 'scriptid-footerlink-li1' ) ) { footerLi.setAttribute( 'id', 'scriptid-footerlink-li1' ); footerLi.textContent = 'Se även: '; } footerUl.appendChild( footerLi ); var footerA = document.createElement( 'a' ); footerA.setAttribute( 'href', '/w/index.php?title=' + p2 ); footerA.textContent = p2; footerLi.appendChild( footerA ); } } // Först några extra länkar jag vill ha nederst addFooterLink( 'User:JohanahoJ/vector.css', 'User:JohanahoJ/vector-2022.css' ); addFooterLink( 'User:JohanahoJ/vector-2022.css', 'User:JohanahoJ/vector.css' ); addFooterLink( 'User:JohanahoJ/vector.js', 'User:JohanahoJ/vector-2022.js' ); addFooterLink( 'User:JohanahoJ/vector-2022.js', 'User:JohanahoJ/vector.js' ); // Länkar mellan egna css- och js-sidor med samma namn var userScripts = [ 'common', 'logOutButton', 'menuItemsConfig', 'minerva', 'mLangBabel', 'mobilePrefLink', 'navTabsRight', 'pLangBabel', 'sandlåda', 'sidebarItemsToggle', 'sidebarToggle', 'smallerLogo', 'utkast', 'vector', 'vector-2022' ]; userScripts.forEach( function ( userScript ) { addFooterLink( 'User:JohanahoJ/' + userScript +'.css', 'User:JohanahoJ/' + userScript +'.js' ); addFooterLink( 'User:JohanahoJ/' + userScript +'.js', 'User:JohanahoJ/' + userScript +'.css' ); } ); // Länkar mellan MediaWiki-css- och -js-sidor med samma namn var mediaWikiPages = [ 'Common', 'Group-user', 'Minerva', 'Mobile', 'Monobook', 'Vector', 'vector-2022' ]; mediaWikiPages.forEach( function ( mwPage ) { addFooterLink( 'MediaWiki:' + mwPage +'.css', 'MediaWiki:' + mwPage +'.js' ); addFooterLink( 'MediaWiki:' + mwPage +'.js', 'MediaWiki:' + mwPage +'.css' ); } ); // Övrigt addFooterLink( 'User:JohanahoJ/Utkast', 'User:JohanahoJ/Utkast/styles.css' ); } if ( document.readyState === 'loading' ) { document.addEventListener( 'DOMContentLoaded', main ); } else { main(); } hfddq0ixz5zhewzpvam5bw4drn4gu5o User:Tamzin/sandbox 2 119685 532551 532367 2022-08-13T16:13:59Z Tamzin 21799 Revert to revision 497639 dated 2022-01-17 15:21:05 by (hidden) using [[:en:Wikipedia:Tools/Navigation_popups|popups]] wikitext text/x-wiki phoiac9h4m842xq45sp7s6u21eteeq1 Mwbot-rs/Save 0 122864 532559 532480 2022-08-13T17:30:47Z Mwbot-rs test 52001 Test suite edit wikitext text/x-wiki It has been 1660411846 seconds since the epoch. pgftycjztzcixzzzn64zajlbxh0ps8b 532560 532559 2022-08-13T17:30:54Z Mwbot-rs test 52001 Test suite edit wikitext text/x-wiki It has been 1660411853 seconds since the epoch. 2eqy5mj7wo737uc56xdlem4raaamkon 532561 532560 2022-08-13T17:31:17Z Mwbot-rs test 52001 Test suite edit wikitext text/x-wiki It has been 1660411877 seconds since the epoch. 8im96fmg8rciavpsstjf0jxqjs455c4 532562 532561 2022-08-13T17:39:42Z Mwbot-rs test 52001 Test suite edit wikitext text/x-wiki It has been 1660412382 seconds since the epoch. esizenio2ab52hsgt1krs0d6bz8go1q 532564 532562 2022-08-13T18:13:58Z Mwbot-rs test 52001 Test suite edit wikitext text/x-wiki It has been 1660414438 seconds since the epoch. 056v82fpm5dw4dtbnunorut2fv6k2jv 532565 532564 2022-08-13T18:14:07Z Mwbot-rs test 52001 Test suite edit wikitext text/x-wiki It has been 1660414446 seconds since the epoch. fjeknzvqgo5v9wiqg7s46nqq30phby1 532566 532565 2022-08-13T18:14:45Z Mwbot-rs test 52001 Test suite edit wikitext text/x-wiki It has been 1660414485 seconds since the epoch. 89394jprtgcawztir2lcully9804ult 532567 532566 2022-08-13T18:21:10Z Mwbot-rs test 52001 Test suite edit wikitext text/x-wiki It has been 1660414869 seconds since the epoch. lsi6xf4jypf0qv4ixa0xx97x9mqiyek User:SongVĩ.Bot II 2 124239 532556 532476 2022-08-13T17:00:13Z SongVĩ.Bot II 52414 [[User:SongVĩ.Bot II|Task 0]]: Đã 229 ngày... wikitext text/x-wiki Cập nhật lần cuối: 13-08-2022 Đã 229 ngày... egvzz35ase2axw1imribf28xmc2hmho User:Elominius/test.json 2 125039 532621 509111 2022-08-14T10:07:09Z Elominius 53013 validation test json application/json { "file_descriptions": { "example1.mp4": "This is a video", "example2.mp4": "This is another video" } } gnxg8ywq2wdskgeucdzpyjg9xw9id8q User:JohanahoJ/dblClkMore.js 2 127248 532614 516756 2022-08-14T08:00:42Z JohanahoJ 37147 javascript text/javascript /* För Vector Legacy med pekskärm, t.ex. iPad. När man klickar på "Mer" och öppnar menyn, ger skriptet ett ytterligare klick, så menyfältet kan stängas med ett enkelt klick utanför det. Skulle man för ovanlighetens skull hamna i otakt med knappen, är det bara att göra något annat på sidan eller ladda om den. */ function main() { 'use strict'; if ( ( mw.config.get( 'skin' ) !== 'vector' ) || ( mw.config.get( 'wgNamespaceNumber' ) < 0 ) ) return; var pcactButton = document.getElementById( 'p-cactions-checkbox' ); if ( !pcactButton ) return; pcactButton.addEventListener( 'click', function () { pcactButton.click(); }, false ); } if ( document.readyState === 'loading' ) { document.addEventListener( 'DOMContentLoaded', main ); } else { main(); } rc5ja292zhtuui5249edzu3baxc64fd 532615 532614 2022-08-14T08:02:04Z JohanahoJ 37147 javascript text/javascript /* För Vector Legacy med pekskärm, t.ex. iPad. När man klickar på "Mer" och öppnar menyn, ger skriptet ett ytterligare klick, så menyfältet kan stängas med ett enkelt klick utanför det. Skulle man för ovanlighetens skull hamna i otakt med knappen, är det bara att göra något annat på sidan eller ladda om den. */ function main() { 'use strict'; if ( ( mw.config.get( 'skin' ) !== 'vector' ) || ( mw.config.get( 'wgNamespaceNumber' ) < 0 ) ) return; var pcactButton = document.getElementById( 'p-cactions-checkbox' ); if ( !pcactButton ) return; pcactButton.addEventListener( 'click', pcactButton.click(), false ); } if ( document.readyState === 'loading' ) { document.addEventListener( 'DOMContentLoaded', main ); } else { main(); } cq3ig54kmy7c4eajimu53melcyt9e94 532616 532615 2022-08-14T08:02:36Z JohanahoJ 37147 Undo revision 532615 by [[Special:Contributions/JohanahoJ|JohanahoJ]] ([[User talk:JohanahoJ|talk]]) javascript text/javascript /* För Vector Legacy med pekskärm, t.ex. iPad. När man klickar på "Mer" och öppnar menyn, ger skriptet ett ytterligare klick, så menyfältet kan stängas med ett enkelt klick utanför det. Skulle man för ovanlighetens skull hamna i otakt med knappen, är det bara att göra något annat på sidan eller ladda om den. */ function main() { 'use strict'; if ( ( mw.config.get( 'skin' ) !== 'vector' ) || ( mw.config.get( 'wgNamespaceNumber' ) < 0 ) ) return; var pcactButton = document.getElementById( 'p-cactions-checkbox' ); if ( !pcactButton ) return; pcactButton.addEventListener( 'click', function () { pcactButton.click(); }, false ); } if ( document.readyState === 'loading' ) { document.addEventListener( 'DOMContentLoaded', main ); } else { main(); } rc5ja292zhtuui5249edzu3baxc64fd MediaWiki:GrowthMentors.json 8 127601 532584 532496 2022-08-14T07:06:44Z DreZhsh 50263 json application/json { "Mentors": { "49911": { "message": null, "weight": 2, "automaticallyAssigned": true }, "44042": { "message": null, "weight": 2, "automaticallyAssigned": true }, "50263": { "message": "Testing", "weight": 2, "automaticallyAssigned": false }, "30874": { "message": "Testing", "weight": 2, "automaticallyAssigned": true }, "27425": { "message": "Welcome! I can help you with editing. ", "weight": 4, "automaticallyAssigned": true }, "51711": { "message": "Test", "weight": 2, "automaticallyAssigned": true }, "752": { "message": "I will be happy to explore together all these new features!", "weight": 2, "automaticallyAssigned": true }, "1": { "message": "Sup?", "weight": 2, "automaticallyAssigned": true }, "39901": { "message": "Welcome to Wikipedia! I love editing about music, but you can ask me anything.", "weight": 2, "automaticallyAssigned": true }, "43912": { "message": null, "weight": 4, "automaticallyAssigned": true }, "43610": { "message": "Test", "weight": 4, "automaticallyAssigned": true }, "39808": { "message": "Testing", "weight": 2, "automaticallyAssigned": true }, "50179": { "message": "Uh-huh?", "weight": 2, "automaticallyAssigned": true }, "48882": { "message": "Hi, Welcome to Wikipedia!", "weight": 2, "automaticallyAssigned": true }, "34206": { "message": "Ask me about design stuff", "weight": 2, "automaticallyAssigned": true }, "51965": { "message": "Test", "weight": 2, "automaticallyAssigned": true }, "29210": { "message": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.啊啊啊", "weight": 1, "automaticallyAssigned": true }, "12061": { "message": "Blah blah blah", "weight": 2, "automaticallyAssigned": true }, "50053": { "message": "Please visit Wikipedia:Requests/Help desk/Mentors to become a mentor.", "weight": 2, "automaticallyAssigned": true }, "21799": { "message": "test porpoise", "weight": 2, "automaticallyAssigned": true }, "24514": { "message": null, "weight": 2, "automaticallyAssigned": true }, "29752": { "message": "Please ask me about anything (even if maths aren't my favorite topic).", "weight": 2, "automaticallyAssigned": true }, "51768": { "message": "Heh, hey!", "weight": 2, "automaticallyAssigned": true }, "1639": { "message": null, "weight": 2, "automaticallyAssigned": true }, "44996": { "message": "Hey!", "weight": 2, "automaticallyAssigned": true }, "29926": { "message": "Welcome!", "weight": 2, "automaticallyAssigned": true }, "52081": { "message": "testing the mentor features", "weight": 4, "automaticallyAssigned": true }, "48247": { "message": null, "weight": 2, "automaticallyAssigned": false }, "40269": { "message": null, "weight": 2, "automaticallyAssigned": false }, "51514": { "message": null, "weight": 2, "automaticallyAssigned": false }, "49608": { "message": null, "weight": 2, "automaticallyAssigned": false }, "20771": { "message": null, "weight": 2, "automaticallyAssigned": false }, "46860": { "message": null, "weight": 2, "automaticallyAssigned": false }, "101": { "message": null, "weight": 2, "automaticallyAssigned": false }, "21990": { "message": null, "weight": 2, "automaticallyAssigned": false }, "29950": { "message": "test", "weight": 2, "automaticallyAssigned": false } } } 08gej2lccqfadbo9wdebdod3a3bq98o User talk:Chr!ssymad 3 139546 532557 2022-08-13T17:03:24Z 92.40.171.129 Redirected page to [[User talk:Praxidicae]] wikitext text/x-wiki #REDIRECT [[User talk:Praxidicae]] 1y9plt9x165nt30jcovu9p1unsjehu3 532563 532557 2022-08-13T18:13:44Z Tegel mobile 48867 + delete, cross-wiki vandalism wikitext text/x-wiki {{delete|Vandalism/Cross-wiki vandalism}} #REDIRECT [[User talk:Praxidicae]] succsc63vy6iuwj9y038rtmzbymu2z3 User:John Vandenberg/createonly/1660442713.35697 2 139547 532573 2022-08-14T02:05:23Z Pywikibot-test 23124 Pywikibot 7.6.0.dev2 wikitext text/x-wiki phoiac9h4m842xq45sp7s6u21eteeq1 Topic:X16l88fdp8isrxoc 2600 139548 532574 2022-08-14T02:05:34Z Flow talk page manager 26836 /* This page has been converted into a Structured Discussions board */ flow-board application/json {"flow-workflow":"x16l88fdp8isrxoc"} i6dos80n1zd5pwnn2d06ozf5x0bk958 User:PhantomTech/Draftify log 2 139552 532582 2022-08-14T07:01:45Z PhantomTech 27808 Logging [[Draft:An Example Draft]] ([[User:PhantomTech/scripts/MoveToDraft.js|via script]]) wikitext text/x-wiki This is a log of pages moved to draftspace using a [[User:PhantomTech/scripts/MoveToDraft.js|MoveToDraft]] script. == August 2022 == #[[User:TestUser10983]] moved to [[Draft:An Example Draft]] at 07:01, 14 August 2022 (UTC) d1crwa8ij71ovuisfrpdmfp3oeikp7m 532590 532582 2022-08-14T07:15:26Z PhantomTech 27808 Logging [[Draft:another draft example]] ([[User:PhantomTech/scripts/MoveToDraft.js|via script]]) wikitext text/x-wiki This is a log of pages moved to draftspace using a [[User:PhantomTech/scripts/MoveToDraft.js|MoveToDraft]] script. == August 2022 == #[[User:TestUser10983]] moved to [[Draft:An Example Draft]] at 07:01, 14 August 2022 (UTC) #[[User talk:TestUser10983]] moved to [[Draft:another draft example]] at 07:15, 14 August 2022 (UTC) 0k2lslrpyacyohg07i7b6rynzp4ili9 532597 532590 2022-08-14T07:27:53Z PhantomTech 27808 Logging [[Draft:An additional example draft]] ([[User:PhantomTech/scripts/MoveToDraft.js|via script]]) wikitext text/x-wiki This is a log of pages moved to draftspace using a [[User:PhantomTech/scripts/MoveToDraft.js|MoveToDraft]] script. == August 2022 == #[[User:TestUser10983]] moved to [[Draft:An Example Draft]] at 07:01, 14 August 2022 (UTC) #[[User talk:TestUser10983]] moved to [[Draft:another draft example]] at 07:15, 14 August 2022 (UTC) #[[User:TestUser10983]] moved to [[Draft:An additional example draft]] at 07:27, 14 August 2022 (UTC) 6b4dfios5tidjci9hdhw2i76zy8jghc 532606 532597 2022-08-14T07:29:40Z PhantomTech 27808 Logging [[Draft:drafts forever]] ([[User:PhantomTech/scripts/MoveToDraft.js|via script]]) wikitext text/x-wiki This is a log of pages moved to draftspace using a [[User:PhantomTech/scripts/MoveToDraft.js|MoveToDraft]] script. == August 2022 == #[[User:TestUser10983]] moved to [[Draft:An Example Draft]] at 07:01, 14 August 2022 (UTC) #[[User talk:TestUser10983]] moved to [[Draft:another draft example]] at 07:15, 14 August 2022 (UTC) #[[User:TestUser10983]] moved to [[Draft:An additional example draft]] at 07:27, 14 August 2022 (UTC) #[[User:TestUser10983]] moved to [[Draft:drafts forever]] at 07:29, 14 August 2022 (UTC) dktp87fcopjvpyasd8nz54de72ntj9b 532613 532606 2022-08-14T07:32:58Z PhantomTech 27808 Logging [[Draft:infinity drafts]] ([[User:PhantomTech/scripts/MoveToDraft.js|via script]]) wikitext text/x-wiki This is a log of pages moved to draftspace using a [[User:PhantomTech/scripts/MoveToDraft.js|MoveToDraft]] script. == August 2022 == #[[User:TestUser10983]] moved to [[Draft:An Example Draft]] at 07:01, 14 August 2022 (UTC) #[[User talk:TestUser10983]] moved to [[Draft:another draft example]] at 07:15, 14 August 2022 (UTC) #[[User:TestUser10983]] moved to [[Draft:An additional example draft]] at 07:27, 14 August 2022 (UTC) #[[User:TestUser10983]] moved to [[Draft:drafts forever]] at 07:29, 14 August 2022 (UTC) #[[User:TestUser10983]] moved to [[Draft:infinity drafts]] at 07:32, 14 August 2022 (UTC) 2ph1objp9vrj6a4c1ualkde1w4c6b2c