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 <username>. 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