Wikipediýa tkwiki https://tk.wikipedia.org/wiki/Ba%C5%9F_Sahypa MediaWiki 1.46.0-wmf.24 first-letter Media Ýörite Çekişme Ulanyjy Ulanyjy çekişme Wikipediýa Wikipediýa çekişme Faýl Faýl çekişme MediaWiki MediaWiki çekişme Şablon Şablon çekişme Ýardam Ýardam çekişme Kategoriýa Kategoriýa çekişme TimedText TimedText talk Module Module talk Event Event talk Berdinazar Hudaýnazarow 0 1716 268812 239702 2026-04-28T18:33:50Z ~2026-25992-27 33739 268812 wikitext text/x-wiki Adamyñ bir mätäç zady hoş sözdür goşgusy == Ömür beýany == Berdinazar 1946–1948-nji ýyllarda öňki Kerki welaýatynyň «Täze ýol» gazetinde, soňra Kerki etrabynyň «Pagtaçynyň sesi» gazetinde edebi işgär bolup işleýär. 1946-njy ýylda bu gazetlerde onuň goşgulary peýda bolup ugraýar. Ýaş şahyryň goşgulary okyjylarda uly gyzyklanma döredýär. Her ýazyjy-şahyr bir ýol bilen edebiýata gelýär. Berdinazar Hudaýnazarow merkezden alysda, obada – zähmetiň gaýnaýan ýerinde kyn şertlerde ýaşap, özüniň hakyky şahyrdygyny ykrar etdirýär. Ol 1956-njy ýylda Garagum derýasynyň gurluşygynyň köp tiražly gazetinde gezme habarçy bolup işleýär. Eýýäm şol ýylda onuň «Ýaş kommunist» gazetinde Gyzgyn sähra» poemasy çap edilýär. Hut şu poema hem edebiýatymyza uly bir zehiniň gelendiginiň buşlukçysy bolýar. Poema şygryýet muşdaklarynyň arasynda uly seslenme döredýär. Berdinazar Hudaýnazarow 1957-nji ýylda Moskwanyň Maksim Gorkiý adyndaky Edebiýat institutyndaky Ýokary edebiýat kursuna okuwa iberilýär. Moskwada Edebiýat institutynda ol Mihail Swetlow, Ýaroslaw Smelýakow ýaly meşhur rus şahyrlaryndan tälim alýar. Edebiýat institutynda okaýan döwründe şahyryň «Gyzgyn sähra» poemasy Moskwada rus dilinde neşir edilýär. Berdinazar Hudaýnazarow köp ýyllaryň dowamynda çeper döredijilik işi bilen meşgullandy we okyjylaryň göwnünden turýan çeper eserleri döretdi. Berdinazar Hudaýnazarow Türkmenistan Ýazyjylar birleşiginiň başlyklygyna saýlanyldy, Magtymguly adyndaky Halkara baýraklary baradaky komitetiň başlygy wezipesinde işledi. Berdinazar Hudaýnazarowyň publisistikasy hakda-da, drama eserleri hakda-da, eserleri boýunça döredilen kinofilmler hakda-da giňişleýin gürrüň etmek mümkin. Ol rus şahyry Aleksandr Twardowskiniň, awar şahyry Resul Gamzatowyň we beýleki şahyrlaryň ençemesiniň eserlerini türkmen diline terjime etdi. Berdinazar Hudaýnazarowyň terjimesinde ol eserler terjime däl-de, ussat türkmen şahyrynyň hut özi tarapyndan ýazylan poeziýa eserleri ýaly ýaňlanýar. Berdinazar Hudaýnazarow tutuş ömrüniň dowamynda türkmen edebiýatyny ösdürmek aladalary bilen ýaşady, onuň ody bilen girip, küli bilen çykdy. Türkmen edebiýatynyň aýry-aýry meseleleri, ýaşlaryň döredijiligi barada makalalar bilen metbugat sahypalarynda yzy giderli çykyş etdi. BerdinazarHudaýnazarow 2001-nji ýylda aradan çykdy. Berdinazar Hudaýnazarow şygryýeti mukaddes hasaplap, onuň mertebesini hemişe belent tutan şahyr. Ol şahyryň borjuna, şygryýetiň wezipesine düýpli düşünmek bilen şeýle diýýär: Goşgy ýürekden çykýar, Meňzeşdir ol perzende. Aklym siňsin her bende, Şeklim siňsin her bende. Mährim siňsin her bende, Gahrym siňsin her bende. Her bir söz ussady çeper döredijilikde özüniň gowy bilýän, ýürekden söýýän, özüni tolgundyrýan, galama ýapyşmasa, öz erkine goýmaýan temasyna, meselesine ýüzlenýär. Ýerbentde dünýä inen Berdinazar üçin dogduk mekany, Garagumuň giň sährasy, depeleri, gollary, gum obasy, adamlary örän eziz hem mähriban. Geljekki şahyrda Wa tana bolan uly söýgi hut şu ýerden başlanýar. Şahyryň çagalygy çölüň jümmüşinde geçýär: Ýerbent çöli uzap ýatyr Garagumuň ýüreginde, Çagalygmyň yzy bardyr, Her golunda, her eginde. Şahyr üçin Garagumuň jana şypa beriji howasy-da, akylyňy haýran edýän gözel görnüşi-de, gazaply ýakyp–ýandyryp barýan jöwzasy-da biçak gymmatly. Hut şeýle çöl durmuşy-da onuň ýaşlygyny taplaýar: Ýumurtgany otsuz-zatsyz Gyzgyn gumda bişirdim men. Suwsuzlykda güni dogrup, Suwsuz güni ýaşyrdym men. Düňle sähra bolan söýgüsinden, oňa bäş barmagy ýaly beletliginden başga-da Berdinazar Hudaýnazarow gumlularyň häsiýetini, edim-gylymlaryny, endiklerini, däp-dessurlaryny, ruhy dünýäsini örän çuňdan bilýär, olaryň içki dünýäsine inçeden aralaşýar. Bu hakykaty şahyryň «Gumlular» goşgusy-da tassyklaýar: Göwünleri çäge ýaly arassa, Bedenleri gurşun ýaly berkdir. Sadalygy, sagdynlygy olara, Meger, tebigatyň özi beripdir.  Gadymlardan gelýän gymmatly däpler, Gum içinde namys kimin goralar. Tanyşmakçy bolsaň, öz adyň däl-de, Ilki ataň-babaň ady soralar. Şahyr öz eserlerinde ajaýyp ynsan häsiýetlerini wasp edýär. Gözel häsiýetler her döwürde-de ynsan bezegi. Şonuň üçin döwrüň üýtgemegi, durmuşyň täzelenmegi şahyryň eserlerini köneldip, many-mazmun taýdan gymmatyny pese gaçyryp bilmeýär. Şahyryň döredijiliginiň irki döwürlerinde ýazan we «Adam hakynda aýdym» atly goşgular ýygyndysynda (1964) ýerleşdirilen «Täze ýyl arzuwlary» goşgusyny okanymyzda-da, muňa göz ýetirmek mümkin: Adamzat eşretiň eýesi bolsun, Dynçlyk dünýämiziň söýesi bolsun. Adamyň adamda öji bolmasyn, Bar kişiniň güni ajy bolmasyn. Hatarlarmyz bolsun mydama jebis, Namysyň öňüne düşmesin nebis. Şu setirlerde ündelýän pikirler häzirki döwürde-de öz ähmiýetini ýitirenok. Şahyr ynsany bezeýän sypatlar hakynda oýlanýar. Ol türkmeni hakyky türkmen edýän, onuň milli merte besini, milli buýsanjyny belende göterýän häsiýetleri öz döwürdeşleriniň her birinde görmek isleýär. Şahyryň soňky döwürde neşir edilen «Meniň dünýäm» atly kitabynyň başynda ýerleşdirilen «Goşgular başy» diýen şygyrda şeýle setirler bar: Agzy aşa ýetse aýnaman bilýän, Synaga salynsa ownaman bilýän, Özüni oýnatman, oýnaman bilýän, Şeýleräk türkmeni göresim gelýär. Öz aslyny bilýän, pederin bilýän, Pähimiň, paýhasyň gadyryn bilýän, Umuman, özüniň ederin bilýän, Şeýleräk türkmeni göresim gelýär. Berdinazar Hudaýnazarow öz eserlerinde möwsümleýin, geldi-geçer wakalara däl-de, durmuşdaky durnukly ahlak hem ruhy gymmatlyklara ýüzlenýär. Şahyryň liriki gahrymany ynsany hakyky ynsan edýän, onuň mertebesini ýokary göterýän sypatlaryň goragçysy hökmünde çykyş edýär. Hakykata gol ýapmak, dogruçyllyk şahyryň döredijilikde baş ýörelgesi. Ol iňňän kyn şertlerde-de şol haky katy aýtmagyň ebeteýini tapýar. Şahyr ynsan mertebesini ýokary götermäge aýratyn üns berýär. Bu pikir onuň köp eserleriniň içinden eriş-argaç bolup geçýär. Ynsap, päklik, halallyk, ynsan mertebesi, ar-namys ýaly adamy bezeýän häsiýetler şahyryň eserlerinde gozgalýan baş meselelerdir. Şahyr eserlerinde adamlary özlerinde şeýle hä siýetleri terbiýelemäge, saklamaga, hiç bolmanda, ol ajaýyp häsiýetleriň ýok bolup gitmegine ýol bermezlige çagyrýar. Berdinazar Hudaýnazarow ululy-kiçili poemalaryň birnäçesini döretdi. Şahyra ilkinji meşhurlyk getiren iri göwrümli eseri «Gyzgyn sähra» poemasydyr. Şahyr Garagum derýasynyň gurluşygynyň köp tiražly gazetiniň gezme habarçysy bolup işlän döwründe çölde kanal gurujylaryň arasynda ýaşaýar we olaryň durmuşyndan bu eseri ýazýar. Öz gahrymanlary bilen bilelikde duz-çörek iýip, bir howadan dem alyp ýaşamagy, olaryň durmuşyna ýakyndan belet bolmagy, galyberse-de, tebigy zehin şahyra uly üstünlik getirýär. «Gyzgyn sähra» poemasynda täsirli wakalar poeziýanyň şirin-şerbedine, gahrymanlaryň çuňňur duýgusyna ýugrulyp çeper suratlandyrylýar. Eserde şygyr setirleri owazly, akgynly. Bu eser barada Tükmenistanyň halk ýazyjysy Kerim Gurbannepesow şeýle ýazýar: «Ellinji ýyllaryň or tasynda Berdinazar Hudaýnazarowyň biziň edebiýatymyza gelmegi bilen poeziýamyz täze öwüşgin aldy. Poeziýamyzyň «Gyzgyn sähra» diýen liro-epiki, soňra «Seniň ýaşlygyň bolupdy» diýen liriki poemalar bilen baýlaşmagy uly hadysa bolupdy. Sebäbi şundan ozalky türkmen sowet poeziýamyzda gahrymanyň pynhan içki dünýäsine, çylşyrymly ykbalyna, şeýle çuňňur, özboluşly aralaşylmandy. «Gyzgyn sähradaky» gahrymanlaryň döwrebaplygy, söweşjeňligi, baý ruhy, «Seniň ýaşlygyň bolupdydaky» liriki gahrymanyň uly şahsyýeti, kämil oýlanmalary biziň poeziýamyz üçin täzelikdi». Şahyryň her bir ýygyndysy, hatda her bir goşgusy çeper hadysa, çeper açyş hökmünde okyjylaryň aňyna siňdi. Onuň täsin, dürli reňklere, öwüşginlere baý şahyrana dünýäsi bar. Kerim Gurbannepesowyň aýdyşy ýaly, Berdinazar Hudaýnazarowyň poeziýa dünýäsi örän lezzetli. Ol dünýäniň içi giň. Howasy arassa. Ondan dem aldygyňça, dem alasyň gelýär. Şonuň bilen birlikde bolsa, ol dünýäniň howsalasy-da, aladasy–da özüne ýetik. Ol dünýäde gögem gürleýär, ýyldyrymam çakýar, tupanam turýar. Emma durmuş hemme bela-beteri ýeňýär. Durmuşy ykrar edijilik, ruhubelentlik şahyryň poeziýasyny tapawutlandyrýan esasy aýratynlykdyr. == Eserleri == - [[Ynsabyň yzasy (Roman)]] <br> - [[Gumlular (Roman)]] [[Kategoriýa:Edebiýat]] hmjjphs217b8hyam0c3xj7gwo933qg6 268813 268812 2026-04-28T18:49:07Z NDG 31905 Reverted edits by [[Special:Contribs/~2026-25992-27|~2026-25992-27]] ([[User talk:~2026-25992-27|talk]]) to last version by Pyragy: unexplained content removal 239702 wikitext text/x-wiki [[Faýl:Berdinazar_Hudaynazarow.jpg|223x223px|thumb|Türkmenistanyň Halk ýazyjysy Berdinazar Hudaýnazarow|alt=]] '''Berdinazar Hudaýnazarow''' — Türkmenistanyň halk ýazyjysy, Magtymguly adyndaky Halkara baýragynyň eýesi Berdinazar Hudaýnazarow 1927-nji ýylda öňki Ýerbent etrabynyň Düwünli guýusynda (obasynda) dünýä inýär. Başlangyç bilimi şol ýerde alýar. Beýik Watançylyk urşunyň öňüsyrasy Ýerbent çarwaçylyk etraby Amyderýa boýlaryna göçürilende, Berdinazaryň maşgalasy hem şol ýere göçýär. Geljekki ýazyjynyň ýetginjekligi gazaply uruş ýyllaryna gabat gelýär. Çekip-çydardan kyn durmuş ýaş Berdinazary tiz taplaýar, ol agyr zähmetde bişişýär. == Ömür beýany == Berdinazar 1946–1948-nji ýyllarda öňki Kerki welaýatynyň «Täze ýol» gazetinde, soňra Kerki etrabynyň «Pagtaçynyň sesi» gazetinde edebi işgär bolup işleýär. 1946-njy ýylda bu gazetlerde onuň goşgulary peýda bolup ugraýar. Ýaş şahyryň goşgulary okyjylarda uly gyzyklanma döredýär. Her ýazyjy-şahyr bir ýol bilen edebiýata gelýär. Berdinazar Hudaýnazarow merkezden alysda, obada – zähmetiň gaýnaýan ýerinde kyn şertlerde ýaşap, özüniň hakyky şahyrdygyny ykrar etdirýär. Ol 1956-njy ýylda Garagum derýasynyň gurluşygynyň köp tiražly gazetinde gezme habarçy bolup işleýär. Eýýäm şol ýylda onuň «Ýaş kommunist» gazetinde Gyzgyn sähra» poemasy çap edilýär. Hut şu poema hem edebiýatymyza uly bir zehiniň gelendiginiň buşlukçysy bolýar. Poema şygryýet muşdaklarynyň arasynda uly seslenme döredýär. Berdinazar Hudaýnazarow 1957-nji ýylda Moskwanyň Maksim Gorkiý adyndaky Edebiýat institutyndaky Ýokary edebiýat kursuna okuwa iberilýär. Moskwada Edebiýat institutynda ol Mihail Swetlow, Ýaroslaw Smelýakow ýaly meşhur rus şahyrlaryndan tälim alýar. Edebiýat institutynda okaýan döwründe şahyryň «Gyzgyn sähra» poemasy Moskwada rus dilinde neşir edilýär. Berdinazar Hudaýnazarow köp ýyllaryň dowamynda çeper döredijilik işi bilen meşgullandy we okyjylaryň göwnünden turýan çeper eserleri döretdi. Berdinazar Hudaýnazarow Türkmenistan Ýazyjylar birleşiginiň başlyklygyna saýlanyldy, Magtymguly adyndaky Halkara baýraklary baradaky komitetiň başlygy wezipesinde işledi. Berdinazar Hudaýnazarowyň publisistikasy hakda-da, drama eserleri hakda-da, eserleri boýunça döredilen kinofilmler hakda-da giňişleýin gürrüň etmek mümkin. Ol rus şahyry Aleksandr Twardowskiniň, awar şahyry Resul Gamzatowyň we beýleki şahyrlaryň ençemesiniň eserlerini türkmen diline terjime etdi. Berdinazar Hudaýnazarowyň terjimesinde ol eserler terjime däl-de, ussat türkmen şahyrynyň hut özi tarapyndan ýazylan poeziýa eserleri ýaly ýaňlanýar. Berdinazar Hudaýnazarow tutuş ömrüniň dowamynda türkmen edebiýatyny ösdürmek aladalary bilen ýaşady, onuň ody bilen girip, küli bilen çykdy. Türkmen edebiýatynyň aýry-aýry meseleleri, ýaşlaryň döredijiligi barada makalalar bilen metbugat sahypalarynda yzy giderli çykyş etdi. BerdinazarHudaýnazarow 2001-nji ýylda aradan çykdy. Berdinazar Hudaýnazarow şygryýeti mukaddes hasaplap, onuň mertebesini hemişe belent tutan şahyr. Ol şahyryň borjuna, şygryýetiň wezipesine düýpli düşünmek bilen şeýle diýýär: Goşgy ýürekden çykýar, Meňzeşdir ol perzende. Aklym siňsin her bende, Şeklim siňsin her bende. Mährim siňsin her bende, Gahrym siňsin her bende. Her bir söz ussady çeper döredijilikde özüniň gowy bilýän, ýürekden söýýän, özüni tolgundyrýan, galama ýapyşmasa, öz erkine goýmaýan temasyna, meselesine ýüzlenýär. Ýerbentde dünýä inen Berdinazar üçin dogduk mekany, Garagumuň giň sährasy, depeleri, gollary, gum obasy, adamlary örän eziz hem mähriban. Geljekki şahyrda Wa tana bolan uly söýgi hut şu ýerden başlanýar. Şahyryň çagalygy çölüň jümmüşinde geçýär: Ýerbent çöli uzap ýatyr Garagumuň ýüreginde, Çagalygmyň yzy bardyr, Her golunda, her eginde. Şahyr üçin Garagumuň jana şypa beriji howasy-da, akylyňy haýran edýän gözel görnüşi-de, gazaply ýakyp–ýandyryp barýan jöwzasy-da biçak gymmatly. Hut şeýle çöl durmuşy-da onuň ýaşlygyny taplaýar: Ýumurtgany otsuz-zatsyz Gyzgyn gumda bişirdim men. Suwsuzlykda güni dogrup, Suwsuz güni ýaşyrdym men. Düňle sähra bolan söýgüsinden, oňa bäş barmagy ýaly beletliginden başga-da Berdinazar Hudaýnazarow gumlularyň häsiýetini, edim-gylymlaryny, endiklerini, däp-dessurlaryny, ruhy dünýäsini örän çuňdan bilýär, olaryň içki dünýäsine inçeden aralaşýar. Bu hakykaty şahyryň «Gumlular» goşgusy-da tassyklaýar: Göwünleri çäge ýaly arassa, Bedenleri gurşun ýaly berkdir. Sadalygy, sagdynlygy olara, Meger, tebigatyň özi beripdir.  Gadymlardan gelýän gymmatly däpler, Gum içinde namys kimin goralar. Tanyşmakçy bolsaň, öz adyň däl-de, Ilki ataň-babaň ady soralar. Şahyr öz eserlerinde ajaýyp ynsan häsiýetlerini wasp edýär. Gözel häsiýetler her döwürde-de ynsan bezegi. Şonuň üçin döwrüň üýtgemegi, durmuşyň täzelenmegi şahyryň eserlerini köneldip, many-mazmun taýdan gymmatyny pese gaçyryp bilmeýär. Şahyryň döredijiliginiň irki döwürlerinde ýazan we «Adam hakynda aýdym» atly goşgular ýygyndysynda (1964) ýerleşdirilen «Täze ýyl arzuwlary» goşgusyny okanymyzda-da, muňa göz ýetirmek mümkin: Adamzat eşretiň eýesi bolsun, Dynçlyk dünýämiziň söýesi bolsun. Adamyň adamda öji bolmasyn, Bar kişiniň güni ajy bolmasyn. Hatarlarmyz bolsun mydama jebis, Namysyň öňüne düşmesin nebis. Şu setirlerde ündelýän pikirler häzirki döwürde-de öz ähmiýetini ýitirenok. Şahyr ynsany bezeýän sypatlar hakynda oýlanýar. Ol türkmeni hakyky türkmen edýän, onuň milli merte besini, milli buýsanjyny belende göterýän häsiýetleri öz döwürdeşleriniň her birinde görmek isleýär. Şahyryň soňky döwürde neşir edilen «Meniň dünýäm» atly kitabynyň başynda ýerleşdirilen «Goşgular başy» diýen şygyrda şeýle setirler bar: Agzy aşa ýetse aýnaman bilýän, Synaga salynsa ownaman bilýän, Özüni oýnatman, oýnaman bilýän, Şeýleräk türkmeni göresim gelýär. Öz aslyny bilýän, pederin bilýän, Pähimiň, paýhasyň gadyryn bilýän, Umuman, özüniň ederin bilýän, Şeýleräk türkmeni göresim gelýär. Berdinazar Hudaýnazarow öz eserlerinde möwsümleýin, geldi-geçer wakalara däl-de, durmuşdaky durnukly ahlak hem ruhy gymmatlyklara ýüzlenýär. Şahyryň liriki gahrymany ynsany hakyky ynsan edýän, onuň mertebesini ýokary göterýän sypatlaryň goragçysy hökmünde çykyş edýär. Hakykata gol ýapmak, dogruçyllyk şahyryň döredijilikde baş ýörelgesi. Ol iňňän kyn şertlerde-de şol haky katy aýtmagyň ebeteýini tapýar. Şahyr ynsan mertebesini ýokary götermäge aýratyn üns berýär. Bu pikir onuň köp eserleriniň içinden eriş-argaç bolup geçýär. Ynsap, päklik, halallyk, ynsan mertebesi, ar-namys ýaly adamy bezeýän häsiýetler şahyryň eserlerinde gozgalýan baş meselelerdir. Şahyr eserlerinde adamlary özlerinde şeýle hä siýetleri terbiýelemäge, saklamaga, hiç bolmanda, ol ajaýyp häsiýetleriň ýok bolup gitmegine ýol bermezlige çagyrýar. Berdinazar Hudaýnazarow ululy-kiçili poemalaryň birnäçesini döretdi. Şahyra ilkinji meşhurlyk getiren iri göwrümli eseri «Gyzgyn sähra» poemasydyr. Şahyr Garagum derýasynyň gurluşygynyň köp tiražly gazetiniň gezme habarçysy bolup işlän döwründe çölde kanal gurujylaryň arasynda ýaşaýar we olaryň durmuşyndan bu eseri ýazýar. Öz gahrymanlary bilen bilelikde duz-çörek iýip, bir howadan dem alyp ýaşamagy, olaryň durmuşyna ýakyndan belet bolmagy, galyberse-de, tebigy zehin şahyra uly üstünlik getirýär. «Gyzgyn sähra» poemasynda täsirli wakalar poeziýanyň şirin-şerbedine, gahrymanlaryň çuňňur duýgusyna ýugrulyp çeper suratlandyrylýar. Eserde şygyr setirleri owazly, akgynly. Bu eser barada Tükmenistanyň halk ýazyjysy Kerim Gurbannepesow şeýle ýazýar: «Ellinji ýyllaryň or tasynda Berdinazar Hudaýnazarowyň biziň edebiýatymyza gelmegi bilen poeziýamyz täze öwüşgin aldy. Poeziýamyzyň «Gyzgyn sähra» diýen liro-epiki, soňra «Seniň ýaşlygyň bolupdy» diýen liriki poemalar bilen baýlaşmagy uly hadysa bolupdy. Sebäbi şundan ozalky türkmen sowet poeziýamyzda gahrymanyň pynhan içki dünýäsine, çylşyrymly ykbalyna, şeýle çuňňur, özboluşly aralaşylmandy. «Gyzgyn sähradaky» gahrymanlaryň döwrebaplygy, söweşjeňligi, baý ruhy, «Seniň ýaşlygyň bolupdydaky» liriki gahrymanyň uly şahsyýeti, kämil oýlanmalary biziň poeziýamyz üçin täzelikdi». Şahyryň her bir ýygyndysy, hatda her bir goşgusy çeper hadysa, çeper açyş hökmünde okyjylaryň aňyna siňdi. Onuň täsin, dürli reňklere, öwüşginlere baý şahyrana dünýäsi bar. Kerim Gurbannepesowyň aýdyşy ýaly, Berdinazar Hudaýnazarowyň poeziýa dünýäsi örän lezzetli. Ol dünýäniň içi giň. Howasy arassa. Ondan dem aldygyňça, dem alasyň gelýär. Şonuň bilen birlikde bolsa, ol dünýäniň howsalasy-da, aladasy–da özüne ýetik. Ol dünýäde gögem gürleýär, ýyldyrymam çakýar, tupanam turýar. Emma durmuş hemme bela-beteri ýeňýär. Durmuşy ykrar edijilik, ruhubelentlik şahyryň poeziýasyny tapawutlandyrýan esasy aýratynlykdyr. == Eserleri == - [[Ynsabyň yzasy (Roman)]] <br> - [[Gumlular (Roman)]] [[Kategoriýa:Edebiýat]] erbvoo1h6joy2qmnj2hirypsvq9ckpc MediaWiki:Gadget-HotCat.js 8 14782 268764 194487 2026-04-28T12:11:25Z Umarxon III 11129 268764 javascript text/javascript window.hotcat_translations_from_commons = true; /* This imports the latest version of HotCat from Commons. HotCat is a gadget to make changes to categories much easier. Full documentation can be found at http://commons.wikimedia.org/wiki/Help:Gadget-HotCat */ mw.loader.load( '//commons.wikimedia.org/w/index.php?title=MediaWiki:Gadget-HotCat.js&action=raw&ctype=text/javascript' ); 050rn29344h01x3e9o7x0k5vcs4cj2v Ulanyjy çekişme:Umarxon III 3 21630 268814 268247 2026-04-28T20:11:49Z MediaWiki message delivery 8652 /* You may be an eligible candidate for the U4C election */ täze bölüm 268814 wikitext text/x-wiki {{Welcome}} {{Allanur77}} 16:02, 2 oktýabr 2022 (UTC) == Deletion == Hello! Please don't delete the 22 articles listed on [[:Kategoriýa:Öçür]] yet. I will merge most of them like I did at [[Angliýa]] and [[Fransiýa]]. Thanks. [[Ulanyjy:Styyx|Styyx]] ([[Ulanyjy çekişme:Styyx|çekişme]]) 16:34, 16 maý 2024 (UTC) :Hello! Understandable, I will not delete it. Wish you nice edits! [[Ulanyjy:Umarxon III|Umarxon III]] ([[Ulanyjy çekişme:Umarxon III|gürleşme]]) 18:34, 16 maý 2024 (UTC). == Request == Can you please clear [[:Kategoriýa:Öçür]] by deleting pages? Most of them are tagged by yourself, so you can just go on and delete them yourself. [[Ulanyjy:TenWhile6|TenWhile6]] ([[Ulanyjy çekişme:TenWhile6|gürleşme]]) 16:51, 18 noýabr 2024 (UTC) :Yes. I do it. [[Ulanyjy:Umarxon III|Umarxon III]] ([[Ulanyjy çekişme:Umarxon III|gürleşme]]) 05:17, 19 noýabr 2024 (UTC). == Notice of expiration of your sysop right == <div dir="ltr">Hi, as part of [[:m:Global reminder bot|Global reminder bot]], this is an automated reminder to let you know that your permission "sysop" (Administratorlar) will expire on 2025-02-15 19:29:01. Please renew this right if you would like to continue using it. <i>In other languages: [[:m:Global reminder bot/Messages/default|click here]]</i> [[Ulanyjy:Leaderbot|Leaderbot]] ([[Ulanyjy çekişme:Leaderbot|gürleşme]]) 19:44, 8 fewral 2025 (UTC)</div> == Notice of expiration of your interface-admin right == <div dir="ltr">Hi, as part of [[:m:Special:MyLanguage/Global reminder bot|Global reminder bot]], this is an automated reminder to let you know that your permission "interface-admin" (Interfeýs dolandyryjylary) will expire on 2026-02-16 01:55:00. Please renew this right if you would like to continue using it. <i>In other languages: [[:m:Special:MyLanguage/Global reminder bot/Messages/default|click here]]</i> [[Ulanyjy:Leaderbot|Leaderbot]] ([[Ulanyjy çekişme:Leaderbot|gürleşme]]) 19:42, 9 fewral 2026 (UTC)</div> == Notice of expiration of your sysop right == <div dir="ltr">Hi, as part of [[:m:Special:MyLanguage/Global reminder bot|Global reminder bot]], this is an automated reminder to let you know that your permission "sysop" (Administratorlar) will expire on 2026-02-16 01:55:13. Please renew this right if you would like to continue using it. <i>In other languages: [[:m:Special:MyLanguage/Global reminder bot/Messages/default|click here]]</i> [[Ulanyjy:Leaderbot|Leaderbot]] ([[Ulanyjy çekişme:Leaderbot|gürleşme]]) 19:42, 9 fewral 2026 (UTC)</div> == Question == Hello. I noticed that the Turkmen Wikipedia has very little activity, and I would like to help develop it by creating and improving articles. I also wanted to ask how administrator rights are granted here. Is there a voting process in the Turkmen Wikipedia community, or is it done in another way? What are the usual requirements (number of edits, activity, etc.) to become an administrator? Thank you for your time. [[Ulanyjy:1nter pares|1nter pares]] ([[Ulanyjy çekişme:1nter pares|gürleşme]]) 10:44, 15 mart 2026 (UTC) :Greetings, dear colleague. I suggest you familiarize yourself [[Wikipediýa:Administratorlar|with the rules]]. [[Ulanyjy:Umarxon III|Umarxon III]] ([[Ulanyjy çekişme:Umarxon III|gürleşme]]) 15:08, 27 mart 2026 (UTC) == Help == Hello, I recently translated [[Gaza genosidi|this]] article into the Turkmen language and it needs improvement. Can you help me to improve it? [[Ulanyjy:جودت|جودت]] ([[Ulanyjy çekişme:جودت|gürleşme]]) 11:41, 27 mart 2026 (UTC) :I edited the article. [[Ulanyjy:Umarxon III|Umarxon III]] ([[Ulanyjy çekişme:Umarxon III|gürleşme]]) 15:08, 27 mart 2026 (UTC). == References == Hello. I am editing some articles in the Turkmen Wikipedia and I have a question about references and sources sections. Which section should be used for references with ref.../ref — "Bellikler" with {Bellikler} or "Salgylanmalar" with {Salgylanmalar}? And where should the general list of books and websites be placed — under "Çeşmeler"? I just want to follow the correct structure used in the Turkmen Wikipedia. Thank you. [[Ulanyjy:1nter pares|1nter pares]] ([[Ulanyjy çekişme:1nter pares|gürleşme]]) 09:29, 28 mart 2026 (UTC) == You may be an eligible candidate for the U4C election == <div lang="en" dir="ltr" class="mw-content-ltr"> Greetings, The [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee|Universal Code of Conduct Coordinating Committee (U4C)]] seeks candidates for the 2026 election. The U4C is the global committee responsible for overseeing enforcement of the [[foundation:Special:MyLanguage/Policy:Universal Code of Conduct|Universal Code of Conduct]]. Elections are held annually, if elected a committee member serves for two years. This year the U4C requires candidates to hold administrator rights on at least one wiki, which is why you are being contacted as you appear to hold this right. There are other requirements, such as candidates must be at least 18 years old and may not be employed by the Wikimedia Foundation or other related chapters and affiliates. You can find more information in the [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Election/2026#Call_for_Candidates|call for candidates on Meta-wiki]]. Additionally, the committee's working language is English; some ability to communicate in English is required. The election opens on 18 May, if you are eligible and interested you have until 10 May to submit your candidacy. There will be a week in between for candidates to answer questions from the community. Voting takes place privately in [[m:Special:MyLanguage/SecurePoll|SecurePoll]], successful candidates must receive at least 60% support. More information is available on [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Election/2026|the 2026 Elections page]], including timelines and other candidacy information. If you read over the material and consider yourself qualified, please consider submitting your name to run for the committee. If you think someone else in your community might be interested and qualified, please encourage them to run. In partnership with the U4C -- [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User_talk:Keegan (WMF)|talk]]) 20:11, 28 aprel 2026 (UTC) </div> <!-- Message sent by User:Keegan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Keegan_(WMF)/test&oldid=30472482 --> t34i1jzkhr10qntarx73hwspwvf6g91 Prezident Şawkat Mirziýoýewiň halkara saparlarynyň sanawy 0 22597 268815 265595 2026-04-29T00:12:32Z InternetArchiveBot 21623 Rescuing 0 sources and tagging 1 as dead.) #IABot (v2.0.9.5 268815 wikitext text/x-wiki [[Özbegistan|Özbegistan Respublikasynyň]] Prezidenti [[Şawkat Mirziýoýew]]iň halkara prezident saparlarynyň sanawy. [[File:Informal meeting with Nursultan Nazarabayev and Shavkat Mirziyoyev 02.jpg|thumb|250px|]] == 2017-ýyl == [[File:Vladimir Putin and Shavkat Mirziyoev (2017-04-05) 15.jpg|thumb|250px|Şawkat Mirziýoýew [[Moskwa]], 5-nji aprel, 2017-nji ýyl.]] {| class="wikitable" style="margin: 1em auto 1em auto" ! width="120" |Döwlet ! width="100" |Sapar edilen ýerler ! width="115" |Seneler ! width="550" |Düşündiriş |- |[[Türkmenistan]] |[[Aşgabat]], [[Türkmenabat]] |6-7 mart |Döwlet sapary. [[Gurbanguly Berdimuhamedow]] bilen duşuşdy. [[Türkmenabat]]da ýadygärlik toplumynyň we [[Yslam Kerimow]]yň büstüniň açylyşyna gatnaşdy |- |[[Gazagystan]] |[[Astana]] |22-23 mart |Döwlet sapary. Prezident [[Nursultan Nazarbaýew]] bilen duşuşdy. |- |[[Russiýa]] |[[Moskwa]] |4–5-aprel |Döwlet sapary. Prezident [[Wladimir Putin]] bilen duşuşdy. |- |[[Gazagystan]] |[[Günorta Gazagystan]] |29-aprel |Iş sapary. |- |[[Hytaý]] |[[Pekin]] |10–14-maý |Döwlet sapary. Şeýle hem Pekinde geçirilen "Bir guşak, bir ýol" halkara forumyna gatnaşdy. Türkiýäniň prezidenti [[Rejep Taýýyp Erdogan]] bilen duşuşdy. |- |[[Türkmenistan]] |[[Aşgabat]] |19–20-maý |Iş sapary.<ref>{{cite web|url=http://president.uz/en/lists/view/518|title=President of Uzbekistan Shavkat Mirziyoyev has departed on a working visit for Turkmenistan|website=president.uz|access-date=12-iyun 2017-yil}}</ref> |- |[[Saud Arabystany]] |[[Ar-Riýad]] |20–21-maý |Amerikan sammitine arap yslamy gatnaşdy. [[Azerbaýjan]], [[Täjigistan]], [[Gazagystan]], [[ABŞ]], [[Owganystan]] Prezidentler, [[Gyrgyzystan]] Premýer-ministr, [[Türkiýe]] Daşary işler ministri, Saud Arabystanynyň şasy bilen duşuşdy.<ref>{{cite web|url=http://president.uz/en/lists/view/529|title=President Shavkat Mirziyoyev attends the Arab Islamic American Summit|website=president.uz|language=inglizcha|access-date=12-iyun 2017-yil}}</ref> |- |[[Gazagystan]] |[[Astana]] |8–9-iýun |[[Şanhaý Hyzmatdaşlyk Guramasy]] (ŞHG) Döwlet baştutanlarynyň geňeşiniň mejlisine we Astana EXPO sergisiniň açylyşyna gatnaşdy. Ispaniýanyň şasy Gyrgyzystanyň we Owganystanyň prezidentleri, Pakistanyň we Hindistanyň premýer-ministrleri bilen duşuşdy.<ref>{{cite web|url=http://president.uz/en/lists/view/630|title=SCO Heads of State's meeting in private session|website=president.uz|language=inglizcha|access-date=12-iyun 2017-yil}}</ref> |- |[[Gyrgyzystan]] |[[Bişkek]] |5–6-sentýabr |Taryhy döwlet sapary. Hyzmatdaşlyk we serhetleri kesgitlemek boýunça resminamalar bukjasyna gol çekildi.<ref>{{cite web|url=http://www.tashkenttimes.uz/national/1370-shavkat-mirziyoyev-to-visit-kyrgyzstan-on-september-6|title=Shavkat Mirziyoyev to visit Kyrgyzstan on September 6}}{{Dead link|date=April 2026 |bot=InternetArchiveBot |fix-attempted=yes }}</ref> It was the first visit to Kyrgyzstan by an Uzbek president in 17 years.<ref>{{veb manbasi|url=http://central.asia-news.com/en_GB/articles/cnmi_ca/features/2017/09/18/feature-01|title = Uzbekistan and Kyrgyzstan reach historic new stage in relations}}</ref> |- |[[Gazagystan]] |[[Astana]] |9–10-sentýabr |Yslam Hyzmatdaşlyk Guramasynyň Ylym we Tehnologiýa Sammitiniň ýapylyş dabarasyna gatnaşan EXPO, [[Türkiýe], [[Eýran]] we [[Owganystan]] prezidentleri bilen ikitaraplaýyn duşuşyklar geçirdi. |- |[[Türkmenistan]] |[[Aşgabat]] |17-sentýabr |Ýapyk sport we söweş sungaty boýunça 5-nji Aziýa oýunlarynyň açylyş dabarasyna gatnaşdy, [[Türkmenistan]] we [[Täjigistan]] prezidentleri bilen duşuşdy.<ref>{{cite web|url=http://prezident.uz/en/lists/view/1034|title = President Shavkat Mirziyoyev will visit Turkmenistan on September 17}}</ref> |- |[[ABŞ]] |[[Nýu-Ýork]] |18-20-sentýabr |BMG Baş Assambleýasyna gatnaşdy, Bolgariýanyň prezidenti, Gürjüstanyň premýer-ministri, BMG-nyň Baş sekretary, Bütindünýä bankynyň toparynyň prezidenti, BMG-nyň Adam hukuklary boýunça ýokary komissary, Halkara walýuta gaznasynyň dolandyryjy müdiri bilen duşuşdy Özbegistan-ABŞ işewür forumynda we Nýu-Ýorkda ýaşaýan raýatlar bilen duşuşdy |- |[[Russiýa]] |[[Soçi]] |11-oktýabr |GDA sammitine gatnaşdy, [[Russiýa]] we [[Belarus]] prezidentleri bilen duşuşdy. |- |[[Türkiýe]] |[[Ankara]], [[Stambul]] |25–27-oktýabr |Döwlet sapary. |- |[[Günorta Koreýa]] |[[Seul]] |22–25-noýabr |Döwlet sapary. |- |[[Russiýa]] |[[Moskwa]] |26-dekabr |Iş sapary, GDA döwletleriniň baştutanlarynyň resmi däl ýygnagyna gatnaşdy. |} == 2018-ýyl == [[File:President of Uzbekistan Shavkat Mirziyoyev Signs the Department of State Guest Book (41454516094).jpg|thumb|Şawkat Mirziýoýew 2018-nji ýylyň 17-nji maýynda ABŞ-nyň Döwlet sekretary Maýk Pompeo bilen duşuşmazdan ozal myhmanlar kitabyna gol çekdi.]] {| class="wikitable" style="margin: 1em auto 1em auto" ! width="120" |Döwlet ! width="100" |Sapar edilen ýerler ! width="90" |Senelar ! width="550" |Düşündiriş |- |[[Täjigistan]] |[[Duşanbe]] |9-10 mart |Döwlet sapary<ref>{{cite web|url=https://thediplomat.com/2018/03/high-hopes-for-mending-tajikistan-uzbekistan-relations-ahead-of-state-visit/|title=High Hopes for Mending Tajikistan-Uzbekistan Relations Ahead of State Visit}}</ref> |- |[[Gazagystan]] |[[Astana]] |15 mart |Iş sapary. Merkezi Aziýanyň bäş ýurdunyň ýolbaşçylarynyň sammitine gatnaşdy.<ref>{{cite web|url=https://www.rferl.org/a/rahmon-nazarbaev-meeting-tajikistan-kazakhstan/29098957.html|title=The summit will also be attended by Kyrgyz President Sooronbai Jeenbekov and Uzbek President Shavkat Mirziyoev.|work=Radio Free Europe|accessdate=14-mart 2018-yil|date=14-mart 2018-yil|language=inglizcha}}</ref> |- |[[ABŞ]] |[[Waşington]] |15-17-maý |Resmi sapar [[Donald Trump]], [[Maýk Pompeo]] bilen duşuşdy, Kongresde we Pentagonda ýygnak geçirdi.<ref>{{cite web|url=http://www.atlanticcouncil.org/events/upcoming-events/detail/opening-in-uzbekistan-a-preview-of-president-mirziyoyevs-visit|title=Opening in Uzbekistan: A Preview of President Mirziyoyev's Visit}}</ref><ref>{{cite web|url=https://eadaily.com/en/news/2018/05/11/uzbekistan-and-us-to-resume-bilateral-strategic-partnership|title = Uzbekistan and U.S. To resume bilateral strategic partnership}}</ref> |- |[[Hytaý]] |[[Sindao]] |9-10-iýun |[[ŞHG] sammitine gatnaşdy, [[Hytaý]], [[Russiýa]], [[Hindistan]], [[Pakistan]], [[Owganystan]] we Döwlet sekretarynyň birinji orunbasarlary bilen duşuşdy. BMG-nyň generaly.<ref>{{cite web|url=https://en.trend.az/casia/uzbekistan/2910211.html|title=Mirziyoyev to meet Putin, Modi and Xi Jinping on the sidelines of the SCO Summit|website=Trend News Agency|date=30-may 2018-yil|language=inglizcha|access-date=3-iyun 2018-yil}}</ref> |- |[[Russiýa]] |[[Moskwa]] |14-iýun |2018 FIFA dünýä çempionatynyň açylyş dabarasyna gatnaşdy<ref>{{cite web|url=http://tass.com/sport/1009268/amp|title=Kremlin: Donald Trump welcome guest at FIFA World Cup|publisher=}}</ref> |- |[[Gazagystan]] |[[Astana]] |5-6-iýul |Iş sapary.<ref>{{cite web|url=https://m.kun.uz/news/2018/07/04/savkat-mirzieev-kozogistonga-boradi|title=Шавкат Мирзиёев Қозоғистонга боради|publisher=|access-date=2023-09-07|archive-date=2019-04-27|archive-url=https://web.archive.org/web/20190427001843/https://m.kun.uz/news/2018/07/04/savkat-mirzieev-kozogistonga-boradi|dead-url=yes}}</ref> |- |[[Türkmenistan]] |[[Aşgabat]] |24-awgust |Iş sapary, Aral deňziniň sammiti <ref>{{cite web|url=https://m.akipress.com/news:608358/&#|title = President of Turkmenistan invites President Mirziyoyev to visit Ashgabat this August}}</ref> |- |[[Gyrgyzystan]] |[[Cho'lpon-ota]] |3-4-sentýabr |Iş sapary<ref>{{cite web|url=https://www.azernews.az/region/135257.html|title=Mirziyoyev to take part in summit of Turkic Council in Kyrgyzstan|date=24-iyul 2018-yil}}</ref><ref>{{cite web|url=https://m.akipress.com/news:610078&#|title=Presidents of Kazakhstan, Azerbaijan, Turkey, Uzbekistan and the Prime Minister of Hungary to attend World Nomad Games opening ceremony}}</ref><ref>{{cite web|url=https://en.trend.az/casia/uzbekistan/2946505.html|title = Uzbek president to leave for Kyrgyzstan Sept. 3|date = 2018-yil sentabr}}</ref> |- |[[Täjigistan]] |[[Duşenbe]] |27-28-sentýabr |Iş sapary<ref>{{cite web|url=https://en.trend.az/casia/tajikistan/2944993.html|title = Uzbek president due in Tajikistan|date = 28-avgust 2018-yil}}</ref><ref>{{cite web|url = https://dnd.com.pk/uzbek-president-shavkat-mirziyoyev-greeted-prime-minister-imran-khan/148988/amp|title = Uzbek President Shavkat Mirziyoyev greeted Prime Minister Imran Khan|date = 20-avgust 2018-yil|qaralgan sana = 6-iyun 2022-yil|arxivsana = 29-avgust 2018-yil|arxivurl = https://web.archive.org/web/20180829095312/https://dnd.com.pk/uzbek-president-shavkat-mirziyoyev-greeted-prime-minister-imran-khan/148988/amp|access-date = 2023-09-07|archive-date = 2018-08-29|archive-url = https://web.archive.org/web/20180829095312/https://dnd.com.pk/uzbek-president-shavkat-mirziyoyev-greeted-prime-minister-imran-khan/148988/amp|dead-url = yes}}</ref><ref>{{cite web|url=https://m.akipress.com/news:610247/&#|title = President Mirziyoyev to attend CIS summit in Dushanbe}}</ref> |- |[[Hindistan]] |[[Nýu-Deli]], [[Agra]] |30-sentabr — 1-oktýabr Döwlet sapary<ref>{{cite web|url=https://www.uzdaily.com/articles-id-43274.htm|title=President of Uzbekistan plans to visit India in autumn|qaralgan sana=6-iyun 2022-yil|arxivsana=4-aprel 2018-yil|arxivurl=https://web.archive.org/web/20180404073731/https://www.uzdaily.com/articles-id-43274.htm|access-date=2023-09-07|archive-date=2018-04-04|archive-url=https://web.archive.org/web/20180404073731/https://www.uzdaily.com/articles-id-43274.htm|dead-url=yes}}</ref><ref>{{cite web|url=http://tehelka.com/president-kovind-accords-ceremonial-welcome-to-uzbekistan-president-shavkat-mirziyoyev/|title=President Kovind accords ceremonial welcome to Uzbekistan President Shavkat Mirziyoyev &#124; Tehelka|access-date=2023-09-07|archive-date=2018-10-01|archive-url=https://web.archive.org/web/20181001123345/http://tehelka.com/president-kovind-accords-ceremonial-welcome-to-uzbekistan-president-shavkat-mirziyoyev/|dead-url=yes}}</ref> |- |[[Fransiýa]] |[[Pariž]] |8-9-oktýabr |Döwlet sapary<ref>{{cite web|url=https://www.voanews.com/a/uzbek-president-visits-france-in-first-trip-to-eu-country/4605848.html|title = Uzbek President Visits France in First Trip to EU Country}}</ref> |- |[[Gazagystan]] |[[Sariagʻash]] |20-oktýabr |Iş sapary<ref>{{cite web | url=http://en.kremlin.ru/events/president/news/58864 | title=Informal meeting with Nursultan Nazarabayev and Shavkat Mirziyoyev }}</ref> |- |[[Russiýa]] |[[Sankt-Peterburg]] |6-dekabr |Iş sapary |} == 2019-ýyl == == 2020-ýyl == == 2021-ýyl == == 2022-ýyl == == 2023-ýyl == == Saparlaryň sany == [[File:Map of the international presidential trips made by Shavkat Mirziyoyev.jpg|right|thumb|550px|2022-nji ýylyň aprel aýy]] ''2023-nji ýylyň 24-nji ýanwaryna çenli.'' {| class="standard sortable" style="float:center; margin:2ex 0 2ex 2ex;" |- ! Döwlet ! Saparlaryň sany |- | [[Russiýa]] | 11 |- | [[Gazagystan]] | 11 |- | [[Türkmenistan]] | 9 |- | [[Hytaý]] | 5 |- | [[Täjigistan]] | 4 |- | [[Gyrgyzystan]] | 5 |- | [[Türkiýe]] | 3 |- | [[Hindistan]] | 2 |- | [[Koreýa]] | 2 |- | [[ABŞ]] | 2 |- | [[Azerbaýjan]] | 1 |- | [[Belarus]] | 1 |- | [[Fransiýa]] | 2 |- | [[Germaniýa]] | 2 |- | [[Ýaponiýa]] | 1 |- | [[Pakistan]] | 1 |- | [[Saud Arabystany]] | 2 |- | [[BAE]] | 2 |- | [[Wengriýa]] | 1 |- | [[Singapur]] |1 |} == Çeşmeler == {{Salgylanmalar|1}} [[Kategoriýa:Syýasatçylar]] tq57uuk8o1rr7z3qougkvshm0b46zyi MediaWiki:Gadget-extra-toolbar-buttons-core.js 8 24222 268786 266814 2026-04-28T14:50:07Z Umarxon III 11129 268786 javascript text/javascript /* global mw */ /* jshint strict: false, browser: true, jquery: true */ /** * Extra toolbar options * * Description: Adds extra buttons to the old (non-enhanced) editing toolbar. * * Maintainers: [[User:MarkS]], [[User:Voice of All]], [[User:R. Koot]] */ function addExtraButtons () { mw.toolbar.addButtons( { imageId: 'button-redirect', imageFile: '//upload.wikimedia.org/wikipedia/en/c/c8/Button_redirect.png', speedTip: 'Redirect', tagOpen: '#REDIRECT[[', tagClose: ']]', sampleText: 'Target page name' }, { imageId: 'button-strike', imageFile: '//upload.wikimedia.org/wikipedia/en/c/c9/Button_strike.png', speedTip: 'Strike', tagOpen: '<s>', tagClose: '</s>', sampleText: 'Strike-through text' }, { imageId: 'button-enter', imageFile: '//upload.wikimedia.org/wikipedia/en/1/13/Button_enter.png', speedTip: 'Line break', tagOpen: '<br/>', tagClose: '', sampleText: '' }, { imageId: 'button-subscript', imageFile: '//upload.wikimedia.org/wikipedia/en/7/70/Button_lower_letter.png', speedTip: 'Subscript', tagOpen: '<sub>', tagClose: '</sub>', sampleText: 'Subscript text' }, { imageId: 'button-superscript', imageFile: '//upload.wikimedia.org/wikipedia/en/8/80/Button_upper_letter.png', speedTip: 'Superscript', tagOpen: '<sup>', tagClose: '</sup>', sampleText: 'Superscript text' }, { imageId: 'button-small', imageFile: '//upload.wikimedia.org/wikipedia/en/5/58/Button_small.png', speedTip: 'Small', tagOpen: '<small>', tagClose: '</small>', sampleText: 'Small text' }, { imageId: 'button-hide-comment', imageFile: '//upload.wikimedia.org/wikipedia/en/3/34/Button_hide_comment.png', speedTip: 'Insert hidden Comment', tagOpen: '<!-- ', tagClose: ' -->', sampleText: 'Comment' }, { imageId: 'button-gallery', imageFile: '//upload.wikimedia.org/wikipedia/en/1/12/Button_gallery.png', speedTip: 'Insert a picture gallery', tagOpen: '\n<gallery>\n', tagClose: '\n</gallery>', sampleText: 'File:Example.svg|Caption1\nFile:Example.jpg|Caption2' }, { imageId: 'button-blockquote', imageFile: '//upload.wikimedia.org/wikipedia/en/f/fd/Button_blockquote.png', speedTip: 'Insert block of quoted text', tagOpen: '<blockquote>\n', tagClose: '\n</blockquote>', sampleText: 'Block quote' }, { imageId: 'button-insert-table', imageFile: '//upload.wikimedia.org/wikipedia/en/6/60/Button_insert_table.png', speedTip: 'Insert a table', tagOpen: '{| class="wikitable"\n|', tagClose: '\n|}', sampleText: '-\n! header 1\n! header 2\n! header 3\n|-\n| row 1, cell 1\n| row 1, cell 2\n| row 1, cell 3\n|-\n| row 2, cell 1\n| row 2, cell 2\n| row 2, cell 3' }, { imageId: 'button-insert-reflink', imageFile: '//upload.wikimedia.org/wikipedia/commons/7/79/Button_reflink.png', speedTip: 'Insert a reference', tagOpen: '<ref>', tagClose: '</ref>', sampleText: 'Insert footnote text here' } ); } mw.hook( 'mw.toolbar' ).add( addExtraButtons ); bfernoy87x1koj9btvwqiy9q40tsatx MediaWiki:Gadget-citations.js 8 24520 268759 2026-04-28T12:02:48Z Umarxon III 11129 Sahypa döretdi, mazmuny: '/* _____________________________________________________________________________ * | | * | === WARNING: GLOBAL GADGET FILE === | * | Changes to this page affect many users. | * | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. | * |_________________________________________________...' 268759 javascript text/javascript /* _____________________________________________________________________________ * | | * | === WARNING: GLOBAL GADGET FILE === | * | Changes to this page affect many users. | * | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. | * |_____________________________________________________________________________| * * Imported from version 1.0 as of 17:18, 9 April 2011 (UTC) from [[User:Smith609/citations.js]] * Adds a "Citation bot" link to the toolbox, and a button beneath edit fields, see [[User:Smith609/citations]] */ // @Version 1.0 - Adds an "Expand citations" link to the toolbox, and a button beneath edit fields. // @Version 1.1 - Modify gadget to use jQuery and Citation Bot's new gadgetapi on Tool Labs // @Version 1.2 - Make use of new oojs-ui widget style var $spinnerspan; var cbButton; function addCBToToolbox() { if ( mw.config.get( 'wgCanonicalNamespace' ) !== 'Special' ) { var pTb = document.getElementById("p-tb"); if ( !pTb ) { return; } var escPageName = encodeURIComponent( mw.config.get( 'wgPageName' )); mw.util.addPortletLink("p-tb", "//citations.toolforge.org/process_page.php?edit=toolbar&slow=1&page="+escPageName, 'Expand citations', 't-citationbot', "Expand citations and fix common formatting errors"); } } // Add a citation bot button next to the "Show changes" button function addCitationButton() { if ( document.getElementById( 'wpDiff' ) ) { var diff = document.getElementById( 'wpDiffWidget' ); cbButton = new OO.ui.ButtonWidget(); cbButton.setElementId( 'wpCitations' ) .setIcon( 'articleCheck' ) .setLabel( 'Citations' ) .setFlags( 'secondary' ); cbButton.on( 'click', function () { $.ajax( { timeout: 600000, // thousandths of a second, so 10 minutes type: 'POST', url: 'https://citations.toolforge.org/gadgetapi.php', data: { text: $( '#wpTextbox1' ).textSelection( 'getContents' ), summary: $( '#wpSummary' ).textSelection( 'getContents' ) }, beforeSend: function() { $( cbButton.$element ).replaceWith( $spinnerspan ); }, success: function( data ) { expandedText = data.expandedtext; editSummary = data.editsummary; $( '#loader' ).replaceWith( cbButton.$element ); if ( expandedText ) { // Populate text box with received expanded text $( '#wpTextbox1' ).textSelection( 'setContents', expandedText ); // Populate edit summary textbox with received edit summary $( '#wpSummary' ).textSelection( 'setContents', editSummary ); // Click 'Show preview' button $( '#wpDiff' ).click(); } else { $( '#loader' ).replaceWith( cbButton.$element ); alert( 'Error: Replacement text empty' ); } }, error: function( data ) { $( '#loader' ).replaceWith( cbButton.$element ); alert( 'Error: Citations request failed' ); } } ); } ); cbButton.$element.insertBefore( $(diff.nextSibling) ); } } // Add a button to allow expanding citations in the text in the edit textbox mw.hook( 'wikipage.editform' ).add( function() { if( !$spinnerspan ) { $spinnerspan = $( '<span id="loader"></span>'); } if ( document.images ) { // Loading gif when Citations request is processing var spinner = new Image(); spinner.src = "//upload.wikimedia.org/wikipedia/commons/4/42/Loading.gif"; $spinnerspan.append( spinner ); } if( $('#wpCitations').length === 0 ){ mw.loader.using( [ 'oojs-ui-core', 'oojs-ui.styles.icons-content', 'jquery.textSelection' ] ).then( addCitationButton ); } } ); // Add a toolbox button that runs Citation Bot on the most recent saved revision of the page if ( $.inArray( mw.config.get( 'skin' ), ['monobook', 'modern', 'vector', 'vector-2022', 'timeless'] ) !== -1 ) { $( addCBToToolbox ); } cld3ruibw9xyvlz4eeufp702gxy74a0 MediaWiki:Gadget-DotsSyntaxHighlighter 8 24521 268760 2026-04-28T12:05:38Z Umarxon III 11129 Sahypa döretdi, mazmuny: '<sup><abbr title="{{int:gadgets-sister}}">(S)</abbr></sup> [[mw:User:Remember the dot/Syntax highlighter|Sintaksis nyşanlandyryjysy]]: Redaktirleme gutusyndaky wiki sintaksisiniň standart reňklenişine alternatiwa ([[Mozilla Firefox|Firefox]]-da iň gowy işleýär we [[Google Chrome|Chrome]] we [[Opera (web brauzeri)|Opera]]-da diýen ýaly hemişe işleýär)' 268760 wikitext text/x-wiki <sup><abbr title="{{int:gadgets-sister}}">(S)</abbr></sup> [[mw:User:Remember the dot/Syntax highlighter|Sintaksis nyşanlandyryjysy]]: Redaktirleme gutusyndaky wiki sintaksisiniň standart reňklenişine alternatiwa ([[Mozilla Firefox|Firefox]]-da iň gowy işleýär we [[Google Chrome|Chrome]] we [[Opera (web brauzeri)|Opera]]-da diýen ýaly hemişe işleýär) r9jzl9m8gjqkgorh4lxsmslm9bvny4d MediaWiki:Gadget-DotsSyntaxHighlighter.js 8 24522 268761 2026-04-28T12:06:19Z Umarxon III 11129 Sahypa döretdi, mazmuny: 'mw.loader.load('//www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-DotsSyntaxHighlighter.js&action=raw&ctype=text/javascript');' 268761 javascript text/javascript mw.loader.load('//www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-DotsSyntaxHighlighter.js&action=raw&ctype=text/javascript'); 9o5mgo01jz5w6gheybov4hxdvtsozbi MediaWiki:Gadget-HotCat 8 24523 268762 2026-04-28T12:09:48Z Umarxon III 11129 Sahypa döretdi, mazmuny: '<sup><abbr title="{{int:gadgets-sister}}">(S)</abbr></sup> [[WP:HOTCAT|HotCat]]: at teklipleri bilen sahypadaky kategoriýalary aňsatlyk bilen goşuň, aýryň we üýtgediň ([[:File:HotCat.png|namuna]])' 268762 wikitext text/x-wiki <sup><abbr title="{{int:gadgets-sister}}">(S)</abbr></sup> [[WP:HOTCAT|HotCat]]: at teklipleri bilen sahypadaky kategoriýalary aňsatlyk bilen goşuň, aýryň we üýtgediň ([[:File:HotCat.png|namuna]]) nrruxywtez8vp2idi18isxumwqo6ik6 268763 268762 2026-04-28T12:10:32Z Umarxon III 11129 268763 wikitext text/x-wiki <sup><abbr title="{{int:gadgets-sister}}">(S)</abbr></sup> [[WP:HOTCAT|HotCat]]: at teklipleri bilen sahypadaky kategoriýalary aňsatlyk bilen goşmek, aýrmek we üýtmek ([[:File:HotCat.png|namuna]]) jbth6j0a464xxc81tt6fk83du66yx2z MediaWiki:Gadget-HotCat.js/local defaults 8 24524 268765 2026-04-28T12:13:29Z Umarxon III 11129 Sahypa döretdi, mazmuny: 'if (typeof (HotCat) != 'undefined') { HotCat.uncat_regexp = /((?=[^{]|^)| )\{\{\s*([Uu]ncat(egori[sz]ed)?|[Nn]ocat|[Cc]ategori[sz]e)[^}]*\}\}/gm; HotCat.single_minor = false; HotCat.use_up_down = false; HotCat.upload_disabled = true; HotCat.redir_category = 'Wikipedia soft redirected categories'; HotCat.disambig_category = 'Disambiguation categories'; HotCat.changeTag = "HotCat"; HotCat.messages.using = ' using [[WP:HC|HotCat]]'; //Blacklist...' 268765 wikitext text/x-wiki if (typeof (HotCat) != 'undefined') { HotCat.uncat_regexp = /((?=[^{]|^)| )\{\{\s*([Uu]ncat(egori[sz]ed)?|[Nn]ocat|[Cc]ategori[sz]e)[^}]*\}\}/gm; HotCat.single_minor = false; HotCat.use_up_down = false; HotCat.upload_disabled = true; HotCat.redir_category = 'Wikipedia soft redirected categories'; HotCat.disambig_category = 'Disambiguation categories'; HotCat.changeTag = "HotCat"; HotCat.messages.using = ' using [[WP:HC|HotCat]]'; //Blacklisted categories cannot be added through HotCat. HotCat.blacklist = /\b[Ss]tubs?$|^[Ss]tubs?\b|\b[Dd]isambiguation pages$|^[Rr]edirect(?:s|ed)?\b/; // Clicks on (-) will always go through the diff screen HotCat.del_needs_diff = true; // Non-confirmed users will always go through the diff screen. HotCat.no_autocommit = (function (default_setting) { if ((mw.config.get('wgUserGroups').join(' ') + ' ').indexOf('confirmed ') < 0) return true; return default_setting; })(HotCat.no_autocommit); // Disable for non-logged-in users HotCat.disable = (function (default_disable) { return function () { if (!mw.config.get('wgUserName')) return true; return default_disable(); }; })(HotCat.disable); // improve visual distinction between positive- and negative-indicator icons HotCat.existsNo = '//upload.wikimedia.org/wikipedia/commons/thumb/4/4c/P_no_red.svg/20px-P_no_red.svg.png'; } gt006etfqctdlksua6a4to7zye1jknb MediaWiki:Gadget-wikEdDiff 8 24525 268766 2026-04-28T12:34:33Z Umarxon III 11129 Sahypa döretdi, mazmuny: '<sup><abbr title="{{int:gadgets-user}}">(U)</abbr></sup> [[User:Cacycle/wikEdDiff|wikEdDiff]]: makala wersiýalarynyň arasyndaky tapawut görnüşi gowulandyrmek ([[User:Cacycle/wikEd|wikEd]] ulanylanda gerek däl)' 268766 wikitext text/x-wiki <sup><abbr title="{{int:gadgets-user}}">(U)</abbr></sup> [[User:Cacycle/wikEdDiff|wikEdDiff]]: makala wersiýalarynyň arasyndaky tapawut görnüşi gowulandyrmek ([[User:Cacycle/wikEd|wikEd]] ulanylanda gerek däl) hv44bytir9kfeuunkd6cqnicu4tbbpe MediaWiki:Gadget-wikEdDiff.js 8 24526 268767 2026-04-28T12:36:00Z Umarxon III 11129 Sahypa döretdi, mazmuny: '// _________________________________________________________________________________________ // | | // | === WARNING: GLOBAL GADGET FILE === | // | Changes to this page affect many users. | // | Please discuss changes on the talk page or on [[Wikipedia_talk:Gadget]] before edit...' 268767 javascript text/javascript // _________________________________________________________________________________________ // | | // | === WARNING: GLOBAL GADGET FILE === | // | Changes to this page affect many users. | // | Please discuss changes on the talk page or on [[Wikipedia_talk:Gadget]] before editing. | // |_________________________________________________________________________________________| // // Imports [[User:Cacycle/wikEdDiff.js]] // an improved diff view for article revisions, see [[User:Cacycle/wikEdDiff]] for details mw.loader.load( '/w/index.php?title=User:Cacycle/wikEdDiff.js&action=raw&ctype=text/javascript' ); ap5s0tcb6fj2edzdh146dtx1rwss390 MediaWiki:Gadget-ProveIt 8 24527 268768 2026-04-28T12:39:12Z Umarxon III 11129 Sahypa döretdi, mazmuny: '<sup><abbr title="{{int:gadgets-sister}}">(S)</abbr></sup> [[Wikipedia:ProveIt|ProveIt]] salgylanmalary tapmak, redaktirlemek, goşmak we sitirlemek üçin grafiki ulanyjy interfeýsini goşýan guraldyr (<span class="plainlinks">[{{fullurl:Fallacy|action=edit&withJS=MediaWiki:Gadget-ProveIt.js&withCSS=MediaWiki:Gadget-ProveIt.css}} demo]</span>)' 268768 wikitext text/x-wiki <sup><abbr title="{{int:gadgets-sister}}">(S)</abbr></sup> [[Wikipedia:ProveIt|ProveIt]] salgylanmalary tapmak, redaktirlemek, goşmak we sitirlemek üçin grafiki ulanyjy interfeýsini goşýan guraldyr (<span class="plainlinks">[{{fullurl:Fallacy|action=edit&withJS=MediaWiki:Gadget-ProveIt.js&withCSS=MediaWiki:Gadget-ProveIt.css}} demo]</span>) kgvdp5y784f298uf208rk0v2kql137c MediaWiki:Gadget-ProveIt.js 8 24528 268769 2026-04-28T12:39:50Z Umarxon III 11129 Sahypa döretdi, mazmuny: '/** * ProveIt is a reference manager for Wikipedia and any other MediaWiki wiki * Documentation: https://www.mediawiki.org/wiki/ProveIt * Source code: https://www.mediawiki.org/wiki/MediaWiki:Gadget-Global-ProveIt.js */ function loadProveIt() { mw.config.set( { // Citation templates (without namespace) 'proveit-templates': [ 'Citation', 'Cite arXiv', 'Cite AV media', 'Cite AV media notes', 'Cite book', 'Cite bioRxiv', 'Cite conferen...' 268769 javascript text/javascript /** * ProveIt is a reference manager for Wikipedia and any other MediaWiki wiki * Documentation: https://www.mediawiki.org/wiki/ProveIt * Source code: https://www.mediawiki.org/wiki/MediaWiki:Gadget-Global-ProveIt.js */ function loadProveIt() { mw.config.set( { // Citation templates (without namespace) 'proveit-templates': [ 'Citation', 'Cite arXiv', 'Cite AV media', 'Cite AV media notes', 'Cite book', 'Cite bioRxiv', 'Cite conference', 'Cite comic', 'Cite encyclopedia', 'Cite episode', 'Cite Hansard', 'Cite Instagram', 'Cite interview', 'Cite journal', 'Cite magazine', 'Cite mailing list', 'Cite map', 'Cite Metacritic', 'Cite news', 'Cite newsgroup', 'Cite newspaper The Times', 'Cite ODNB', 'Cite paper', 'Cite podcast', 'Cite press release', 'Cite report', 'Cite Rotten Tomatoes', 'Cite serial', 'Cite sign', 'Cite speech', 'Cite techreport', 'Cite thesis', 'Cite tweet', 'Cite video', 'Cite video game', 'Cite ssrn', 'Cite wikisource', 'Cite web', 'Cite Q', 'R', 'Sfn', 'Sfnm' ], // Citation templates that shouldn't go inside <ref> tags 'proveit-templates-noref': [ 'R', 'Sfn', 'Sfnm' ], // Preferred date format, see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat#using_options 'proveit-date-format': { year: 'numeric', month: 'long', day: 'numeric' }, // Revision tag defined at Special:Tags 'proveit-tag': 'ProveIt edit', // Automatic edit summary 'proveit-summary': 'Reference edited with [[Wikipedia:ProveIt|ProveIt]]', } ); // Load from the central, global version at MediaWiki.org mw.loader.load( '//www.mediawiki.org/w/load.php?modules=ext.gadget.Global-ProveIt' ); } // Only load when editing mw.hook( 'wikipage.editform' ).add( () => window.ProveIt || loadProveIt() ); mw.hook( 've.newTarget' ).add( target => target.constructor.static.name === 'article' && target.on( 'surfaceReady', loadProveIt ) ); 9x5twl8ctsrqs702cbjcwidvmaiiz0w MediaWiki:Gadget-ProveIt-classic 8 24529 268770 2026-04-28T12:41:56Z Umarxon III 11129 Sahypa döretdi, mazmuny: '[[Wikipedia:ProveIt|ProveIt]] (klassiki wersiýa) salgylanmalary tapmak, redaktirlemek, goşmak we sitirlemek üçin grafiki ulanyjy interfeýsini goşýan guraldyr (<span class="plainlinks">[{{fullurl:Fallacy|action=edit&withJS=MediaWiki:Gadget-ProveIt-classic.js&withCSS=MediaWiki:Gadget-ProveIt-classic.css}} demo]</span>). Bu gadjetiň nusgawy, asyl görnüşi.' 268770 wikitext text/x-wiki [[Wikipedia:ProveIt|ProveIt]] (klassiki wersiýa) salgylanmalary tapmak, redaktirlemek, goşmak we sitirlemek üçin grafiki ulanyjy interfeýsini goşýan guraldyr (<span class="plainlinks">[{{fullurl:Fallacy|action=edit&withJS=MediaWiki:Gadget-ProveIt-classic.js&withCSS=MediaWiki:Gadget-ProveIt-classic.css}} demo]</span>). Bu gadjetiň nusgawy, asyl görnüşi. 84dj8gdeiv11qwvsfdpuoqfq6fmct23 MediaWiki:Gadget-ProveIt-classic.js 8 24530 268771 2026-04-28T12:42:37Z Umarxon III 11129 Sahypa döretdi, mazmuny: '/* _____________________________________________________________________________ * | | * | === WARNING: GLOBAL GADGET FILE === | * | Changes to this page affect many users. | * | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. | * |_________________________________________________...' 268771 javascript text/javascript /* _____________________________________________________________________________ * | | * | === WARNING: GLOBAL GADGET FILE === | * | Changes to this page affect many users. | * | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. | * |_____________________________________________________________________________| */ // <nowiki> /* * Imported from Git commit 72b9abf17fe33ab8af55a7cfb074a9beb35365ab as of 2015-03-09 from https://github.com/proveit-js/proveit * Changes should be made through that GitHub project. */ /* * ProveIt ([[User:ProveIt GT]]) is a powerful GUI tool for viewing, adding, editing, and inserting references on Wikipedia. * * Copyright 2008 - 2011 * * Georgia Tech Research Corporation * * Atlanta, GA 30332-0415 * * Copyright 2011 - * * Matthew Flaschen * * ALL RIGHTS RESERVED * * ProveIt is available under the GNU Free Documentation License (GFDL-1.3.txt), Creative Commons * Attribution/Share-Alike License 3.0 (http://creativecommons.org/licenses/by-sa/3.0/), and the GNU * General Public License 2 (GPL-2.txt) * * Includes icons from the Silk set (http://www.famfamfam.com/lab/icons/silk/), by Mark James, used under * the Creative Commons Attribution 3.0 License. */ /** * Electronic Learning Communities * @module elc */ ( function ( mw, $ ) { /* Second parameter (pre-existing proveit object, if any) passed to extend overrides first. Gives users option to easily override initial constants, such as shouldAddSummary. If proveit is unintentionally imported more than once, the first import will take precedence. */ /** * Main class and namespace for ProveIt software. This is the only global variable. * @class proveit */ var proveit = window.proveit = $.extend({ /** * Approximately half the height of the edit box. Used in scrolling when highlighting text. * @type Number */ HALF_EDIT_BOX_HEIGHT: 200, // This could be preference-controlled, instead of hard-coded. /** * Language used for descriptions * @type String */ LANG: "en", /** * Text before param name (e.g. url, title, etc.) in creation box, to avoid collisions with unrelated ids. * @type String */ NEW_PARAM_PREFIX: "newparam", /** * Text before param name (e.g. url, title, etc.) in edit box, to avoid collisions with unrelated ids. * @type String */ EDIT_PARAM_PREFIX: "editparam", GUI_ID: "proveit", /* Used to map between keys, including citation parameter names, and human-readable text. It can be * internationalized easily. Add descriptions.xx , where xx is * the ISO 639-1 code for a language, then set proveit.LANG to "xx" * to use the new descriptions. */ descriptions : { en : { agency: "Agency", name: "Name", author: "Author (L, F)", author2: "Author two (L, F)", author3: "Author three (L, F)", author4: "Author four (L, F)", author5: "Author five (L, F)", author6: "Author six (L, F)", author7: "Author seven (L, F)", author8: "Author eight (L, F)", author9: "Author nine (L, F)", last: "Last name", last2: "Last name (auth. two)", last3: "Last name (auth. three)", last4: "Last name (auth. four)", last5: "Last name (auth. five)", last6: "Last name (auth. six)", last7: "Last name (auth. seven)", last8: "Last name (auth. eight)", last9: "Last name (auth. nine)", first: "First name", first2: "First name (auth. two)", first3: "First name (auth. three)", first4: "First name (auth. four)", first5: "First name (auth. five)", first6: "First name (auth. six)", first7: "First name (auth. seven)", first8: "First name (auth. eight)", first9: "First name (auth. nine)", authorlink: "Author article name", title: "Title", trans_title: "Title in English", publisher: "Publisher", year: "Year", location: "Location", place: "Location of work", isbn: "ISBN", id: "ID", doi: "DOI", page: "Page", pages: "Pages", quote: "Quote", month: "Month", journal: "Journal", edition: "Edition", volume: "Volume", issue: "Issue", url: "URL", date: "Publication date", accessdate: "Access date", coauthors: "Co-authors", booktitle: "Title of Proceedings", contribution: "Contribution/Chapter", encyclopedia: "Encyclopedia", newsgroup: "Newsgroup", version: "Version", site: "Site", newspaper: "Newspaper", "publication-place": "Publication location", editor: "Editor (L, F)", article: "Article", pubplace: "Publisher location", pubyear: "Publication year", inventor: "Inventor (L, F)", "issue-date": "Issue date", "patent-number": "Patent number", "country-code": "Country code (XX)", work: "Work", format: "Format", issn: "ISSN", pmid: "PMID", chapter: "Chapter", web: "Web", book: "Book", conference: "Conference", news: "News", paper: "Paper", "press release": "Press release", interview: "Interview", "AV media": "Audiovisual work", subject: "Subject", subjectlink: "Subject article name", subject2: "Subject two", subjectlink2: "Subject two article name", subject3: "Subject three", subjectlink3: "Subject three article name", subject4: "Subject four", interviewer: "Interviewer", cointerviewers: "Co-interviewers", type: "Type", program: "Program", callsign: "Call sign", city: "City", archiveurl: "Archive URL", archivedate: "Date archived", episode: "Episode", episodelink: "Episode article name", series: "Series", serieslink: "Series article name", credits: "Credits", network: "Network", station: "Station", airdate: "Airdate", began: "Start date", ended: "End date", season: "Season number", seriesno: "Season number", number: "Number", minutes: "Minutes", transcript: "Transcript", transcripturl: "Transcript URL", people: "People", medium: "Production medium", language: "Language", time: "Time", oclc: "OCLC", ref: "Anchor ID", deadurl: 'Dead URL?', raw: 'Unknown format' }, // Finnish translation by Olli (ollinpostit at gmail.com) fi: { agency: "Edustaja", name: "Nimi", author: "Tekijä", author2: "Tekijä kaksi", author3: "Tekijä kolme", author4: "Tekijä neljä", author5: "Tekijä viisi", author6: "Tekijä kuusi", author7: "Tekijä seitsemän", author8: "Tekijä kahdeksan", author9: "Tekijä yhdeksän", last: "Sukunimi", last2: "Sukunimi (tekijä 2)", last3: "Sukunimi (tekijä 3)", last4: "Sukunimi (tekijä 4)", last5: "Sukunimi (tekijä 5)", last6: "Sukunimi (tekijä 6)", last7: "Sukunimi (tekijä 7)", last8: "Sukunimi (tekijä 8)", last9: "Sukunimi (tekijä 9)", first: "Etunimi", first2: "Etunimi (tekijä 2)", first3: "Etunimi (tekijä 3)", first4: "Etunimi (tekijä 4)", first5: "Etunimi (tekijä 5)", first6: "Etunimi (tekijä 6)", first7: "Etunimi (tekijä 7)", first8: "Etunimi (tekijä 8)", first9: "Etunimi (tekijä 9)", authorlink: "Tekijästä kertova sivu", title: "Otsikko", publisher: "Julkaisija", year: "Vuosi", location: "Paikka", place: "Työn paikka", isbn: "ISBN", id: "ID", doi: "DOI", page: "Sivu", pages: "Sivuja", quote: "Lainaus", month: "Kuukausi", journal: "Aikakauslehti", edition: "Painos", volume: "Vuosikerta", issue: "Numero", url: "Osoite", date: "Julkaisupäivä", accessdate: "Luettu", coauthors: "Muut tekijät", booktitle: "Jatko-osien otsikko", contribution: "Osallistuminen/yhteistyö", encyclopedia: "Tietosanakirja", newsgroup: "Uutisryhmä", version: "Versio", site: "Sivusto", newspaper: "Sanomalehti", "publication-place": "Julkaisupaikka", editor: "Toimittaja", article: "Artikkeli", pubplace: "Julkaisijan paikka", pubyear: "Julkaisuvuosi", inventor: "Keksijä", "issue-date": "Saatavilla päivänä", "patent-number": "Patenttinumero", "country-code": "Maakoodi (XX)", work: "Työ", format: "Muoto", issn: "ISSN", pmid: "PMID", chapter: "Luku", web: "Verkko", book: "Kirja", conference: "Kokous", news: "Uutiset", paper: "Lehti", "press release": "Lehdistötiedote", interview: "Haastattelu", subject: "Otsikko", subjectlink: "Artikkelin otsikko", subject2: "Otsikko kaksi", subjectlink2: "Artikkelin kaksi otsikko", subject3: "Otsikko kolme", subjectlink3: "Artikkelin kolme otsikko", subject4: "Otsikko neljä", interviewer: "Haastattelija", cointerviewers: "Muut haastattelijat", type: "Tyyppi", program: "Ohjelma", callsign: "Call sign", city: "Kaupunki", archiveurl: "Arkiston osoite", archivedate: "Arkistointipäivämäärä", episode: "Jakso", episodelink: "Jakson sivun nimi", series: "Sarja", serieslink: "Sarjan sivun nimi", credits: "Tekijät", network: "Verkko", station: "Asema", airdate: "Lähetyspäivä", began: "Aloituspäivä", ended: "Lopetuspäivä", season: "Kauden numero", seriesno: "Kauden numero", number: "Numero", minutes: "Minuutit", transcript: "Puhtaaksi kirjoitettu teksti", transcripturl: "Puhtaaksikirjoitetun osoite", video: "Video", people: "Ihmiset", medium: "Tuotantomedia", language: "Kieli", time: "Aika", oclc: "OCLC", ref: "Ankkurin ID-tunnus" } }, /** * Optional preference to specify default date format for new references. * If set, it overrides the general date preference from Special:Preferences. * * @type {String} supported date format string */ dateFormatString: null, /** * Singleton used to format dates according to user preference * * @type DateFormatter */ dateFormatter: null, /** * Gets the effective preference for date format. If there is no ProveIt-specific * preference already at proveit.dateFormatString, it will determine the correct preference * from MW user preferences. Then, it will store that value to proveit.dateFormatString * * @return {String} format string to use for dates */ getDatePreference: function () { if (this.dateFormatString === null) { this.dateFormatString = mw.user.options.get('date'); } return this.dateFormatString; }, /** * Returns descriptions for the current language. * @return {Object} descriptions */ getDescriptions: function() { //this could be made Cite-specific if needed. return this.descriptions[proveit.LANG]; }, /** * String added to logs for easy search * @type String */ LOG_MARKER: "[ProveIt] ", /** * Convenience log function * @param {...Object} var_args objects (including strings) to log */ log: function() { var args = Array.prototype.slice.call(arguments); args.unshift(this.LOG_MARKER); mw.log.apply(mw, args); }, /** * Log error object if possible, using error (preferable), or log, if available. * @param {Error} ex error object */ logException: function(ex) { var args = [ex, ex.stack]; if(typeof(console) === "object" && $.isFunction(console.error)) { args.unshift(this.LOG_MARKER); console.error.apply(null, args); } else { this.log.apply(this, args); } }, /** * Returns true if the page has a wikitext edit box * * @return {Boolean} true if the page has a wikitext edit box, false otherwise */ isEditPage: function() { var contentModel = mw.config.get( 'wgPageContentModel' ), action = mw.config.get( 'wgAction' ); return contentModel === 'wikitext' && ( action === 'edit' || action === 'submit' ); }, /** * Returns true if the page is likely to contain references * @return {Boolean} true if page is supported, false otherwise */ isSupportedPage: function() { var namespace = mw.config.get( 'wgCanonicalNamespace' ), pageName = mw.config.get( 'wgPageName' ); // "Regular" article, userspace, or Wikipedia:Sandbox (exception for testing). return ( namespace === '' || namespace === 'User' || pageName === 'Wikipedia:Sandbox'); }, /** * Convenience function. Returns the refbox element. * @return {$Node} reference box */ getReferenceBox: function() { return $("#refs"); }, /** * Provides the x (left) and y (top) offsets to a given element. From QuirksMode (http://www.quirksmode.org/js/findpos.html), a freely available site by Peter-Paul Koch * @param {Node} node any HTML node * @return {Object} offsets to node, as object with left and top properties. */ getPosition: function(node) { var left = 0, top = 0; do { left += node.offsetLeft; top += node.offsetTop; } while (node = node.offsetParent); return {"left": left, "top": top}; }, /** * Highlights a given length of text, at a particular index. * @param {Number} startInd start index in Wikipedia edit box * @param {Number} length length of string to highlight * @return {Boolean} always true */ highlightLengthAtIndex: function(startInd, length) { if(startInd < 0 || length < 0) { this.log("highlightStringAtIndex: invalid negative arguments"); } var box = this.getTextbox(); var origText = box.value; var editTop = this.getPosition(box).top; box.value = origText.substring(0, startInd); box.focus(); box.scrollTop = 1000000; //Larger than any real textarea (hopefully) var curScrollTop = box.scrollTop; box.value += origText.substring(startInd); if(curScrollTop > 0) { box.scrollTop = curScrollTop + this.HALF_EDIT_BOX_HEIGHT; } $(box).focus().textSelection('setSelection', { start: startInd, end: startInd + length }); editTop = this.getPosition(box).top; window.scroll(0, editTop); return true; }, /** * Highlights the first instance of a given string in the MediaWiki edit box. * @param {String} targetStr the string in the edit box to highlight * @return {Boolean} true if successful, false otherwise */ highlightTargetString: function(targetStr) { var origText = this.getTextboxText(); var startInd = origText.indexOf(targetStr); if(startInd == -1) { this.log("Target string \"" + targetStr + "\" not found."); return false; } return this.highlightLengthAtIndex(startInd, targetStr.length); }, /** * Convenience function. Returns the raw MediaWiki textarea element. * @return {Node} the edit box element */ getTextbox: function() { return $("#wpTextbox1")[0]; }, /** * Provides value of edit box with CR normalization * * @return {String} value of edit box with CRs stripped if document.selection exists */ getTextboxText: function() { var box = this.getTextbox(); var value = box.value; if(!box.selectionStart && document.selection) // IE 8-like behavior { value = value.replace(/\r\n/g, "\n"); } return value; }, /** * Returns raw edit form element, which contains MWEditBox, among other things. * @return {Node} the edit form element */ getMWEditForm: function() { return $("#editform")[0]; }, /** * Runs a given function on submission of edit form * @param {Function} subFunc function to run on submission */ addOnsubmit: function(subFunc) { var form = this.getMWEditForm(); if(!form) { throw new Error("No edit form, possibly due to protected page."); } form.addEventListener("submit", subFunc, false); }, /** * Returns the raw MW edit summary element * @return {Node} the edit summary element */ getSummary: function() { return $("#wpSummary")[0]; }, /** * Keep track of whether we have already added an onsubmit function to include ProveIt in the summary. * This guarantees the function will not be run twice. * @type Boolean */ summaryFunctionAdded: false, /** * Does the user want us to ever add "Edited by ProveIt" summary? * @type Boolean */ shouldAddSummary: true, /** * ProveIt should be visible on load (rather than requiring toolbar button click) on supported edit pages * @type Boolean */ loadVisible: true, /** * Maximize ProveIt when it first becomes visible. If false, it will start minimized. This has no effect on when it becomes visible. * @type Boolean */ loadMaximized: false, /** * Specifies to include ProveIt edit summary on next save. * Can be disabled by modifying shouldAddSummary */ includeProveItEditSummary: function() { if(this.shouldAddSummary && !this.summaryFunctionAdded) { try { var thisproveit = this; this.addOnsubmit(function() { var summary = thisproveit.getSummary(); if(summary.value.indexOf("ProveIt") == -1) { summary.value += " (edited with [[User:ProveIt_GT|ProveIt]])"; } }); this.summaryFunctionAdded = true; } catch(e) { this.log("Failed to add onsubmit handler. e.message: " + e.message); } } }, /** * Setup button so users can load ProveIt on demand */ setupButton: function() { var $box = $(this.getTextbox()); // Ensures wikiEditor is loaded $box.on('wikiEditor-toolbar-buildSection-main', function(event, section) { delete section.groups.insert.tools.reference; section.groups.insert.tools.proveit = { label: 'ProveIt', type: 'button', icon: '//upload.wikimedia.org/wikipedia/commons/thumb/1/19/ProveIt_logo_for_user_boxes.svg/22px-ProveIt_logo_for_user_boxes.svg.png', action: { type: 'callback', execute: function() { proveit.toggleVisibility(); } } }; }); }, /** * Sets up ProveIt if we're on an edit page. This includes setting up the toolbar button. Depending on configuration and the current page, it may also call load to show ProveIt. */ setup: function() { if(this.isEditPage()) { if(this.loadVisible && this.isSupportedPage()) { this.load(); } this.setupButton(); } }, /** * Loads dependencies and creates GUI */ load: function() { $(function() { var dependencies = ['jquery.ui', 'jquery.textSelection', 'mediawiki.util']; var preference = proveit.getDatePreference(); proveit.dateFormatter = new proveit.DateFormatter(preference); mw.loader.using(dependencies, function() { try { proveit.createGUI(); if(proveit.loadMaximized) { proveit.toggleViewAddVisibility(); } } catch(ex) { proveit.logException(ex); } }, function(ex, errorDependencies) { proveit.log('Failed to load one of: ', errorDependencies); }); }); }, /** * Clears the refBox of refBoxRows, except for dummy rows. * @return {Boolean} false if refBox wasn't found */ clearRefBox: function() { var box = this.getReferenceBox(); if(box == null) { this.log("Ref box is not loaded yet."); return false; } $("tr:not('tr#dummyRef')", box).remove(); return true; }, /** Inserts ref text into MW edit box. * @param {String} ref Reference text to insert * @param {Boolean} full Insert the full reference text if true, citation otherwise. * @return {Boolean} false if errors */ insertRefIntoMWEditBox: function(ref, full) { var txtarea = this.getTextbox(); if(!txtarea) { this.log("insertRefIntoMWEditBox: txtarea is null"); return false; } txtarea = $(txtarea); var insertionText = ref.getInsertionText(full); // Replace existing selection (if any), then scroll txtarea.textSelection('encapsulateSelection', { peri: insertionText, replace: true }); var caretPos = txtarea.textSelection('getCaretPosition', {startAndEnd: true}); // This is slightly redundant. It is called primarily for the scrollig workaround this.highlightLengthAtIndex(caretPos[0], caretPos[1] - caretPos[0]); this.includeProveItEditSummary(); }, /** * Modifies reference object from user-edited GUI. The reference object is mutated in place, so the return value is only for convenience. * * @param {Node} editPane the raw element of the editPane * @param {AbstractReference} ref the original citation object we're modifying * * @return {AbstractReference} same ref that was passed in */ changeRefFromEditPane: function(ref, editPane) { var paramBoxes = $(editPane).find("div.input-row"); var refName = $('#editrefname').val(); ref.name = refName != "" ? refName : null; // Save blank names as null // Clear old params ref.params = {}; var paramName, paramVal; for (var i = 0; i < paramBoxes.length; i++) { var paramRow = paramBoxes[i]; var valueTextbox = $(paramRow).find(".paramvalue")[0]; if($(paramRow).hasClass("addedrow")) // Added with "Add another field" { paramName = $.trim($(paramRow).find(".paramdesc")[0].value); } else { paramName = valueTextbox.id.substring(this.EDIT_PARAM_PREFIX.length); } this.log("paramName: " + paramName); paramVal = $.trim(valueTextbox.value); this.log("paramVal: " + paramVal); if (paramName != "" && paramVal != "") { ref.params[paramName] = paramVal; } } if (ref.toString() != ref.orig) { ref.save = false; } ref.update(); return ref; }, /** * Creates refBoxRow, updates numbering for all refBoxRows, replaces old refBoxRow with new one, and updates ref text in MWEditBox. * @param {AbstractReference} ref the ref we want to save. */ saveRefFromEdit: function(ref) { if(!ref.save) { var newRichItem = this.makeReferenceBoxRow(ref, true); var oldRichItem = $('.selected', this.getReferenceBox()).get(0); var oldNumber = $('td.number', oldRichItem).text(); $('td.number', newRichItem).text(oldNumber); // preserve old numbering oldRichItem.parentNode.replaceChild(newRichItem, oldRichItem); $(newRichItem).addClass('selected'); ref.updateInText(); this.includeProveItEditSummary(); } }, /** * Updates the edit pane when you choose a reference to edit. * @param {AbstractReference} ref the ref that was chosen. */ updateEditPane: function(ref) { $('#editrefname').val(ref.name || ""); // Don't contaminate actual object with junk params. var tempParams = {}; for(var param in ref.params) { tempParams[param] = ref.params[param]; } // Add default params with blank values. var defaults = ref.getDefaultParams(); for(var i = 0; i < defaults.length; i++) { if(!tempParams[defaults[i]]) { tempParams[defaults[i]] = ""; } } var required = ref.getRequiredParams(); var paramNames = []; for(var item in tempParams) //First run through just to get names. { paramNames.push(item); } var sorter = ref.getSorter(); if(sorter) { paramNames.sort(sorter); } else { paramNames.sort(); } /* Sort them to provide consistent interface. Uses custom sort order (which is easily tweaked) where possible. Javascript does destructive sorting, which in this case, is convenient... */ $('#edit-fields').children('.paramlist').children().remove('div:not(.hidden)'); // clear all fields in the edit box (except the hidden ones) for(var j = 0; j < paramNames.length; j++) { this.addPaneRow($("#edit-pane").get(), tempParams, this.getDescriptions(), paramNames[j], required[paramNames[j]], true); } var acceptButton = $('#edit-buttons .accept'); var acceptEdit = function() { proveit.changeRefFromEditPane(ref, $("#edit-pane").get()); proveit.saveRefFromEdit(ref); $("#edit-pane").hide(); $("#view-pane").show(); }; // Without setTimeout, scoll reset doesn't work in Firefox. setTimeout(function() { // Reset scroll $('#edit-fields').scrollTop(0); }, 0); acceptButton.off('click.proveit').on('click.proveit', acceptEdit); }, /** * Add a row to an editPane or addPane. * @param {Node} root root element for pane * @param {Object} params the param object from the reference, or null for added rows. * @param {Object} descs description object to use, or null for no description * @param {String} item the current param name * @param {Boolean} req true if current param name is required, otherwise not required. * @param {Boolean} fieldType true for label, false for textbox. */ addPaneRow: function(root, params, descs, item, req, fieldType) { var id = fieldType ? "preloadedparamrow" : "addedparamrow"; var newline = $('#'+id).clone(); // clone the hidden row $(newline).attr('id',''); // clear the ID (can't have two elements with same ID) //this.activateRemoveField(newline); var paramName = $('.paramdesc', newline).eq(0); var paramValue = $('.paramvalue', newline).eq(0); $('.paramlist', root).append(newline); if(req) // if field is required... { $(paramName).addClass('required'); // visual indicator that label is required $('.delete-field', newline).remove(); // don't let people remove required fields } else { this.activateRemoveField(newline); } if(fieldType) // the description/name is a label (not a textbox) { paramName.attr("for", this.EDIT_PARAM_PREFIX + item); paramValue.attr('id',this.EDIT_PARAM_PREFIX + item); var desc = descs[item]; if(!desc) { this.log("Undefined description for param: " + item + ". Using directly as description."); desc = item; } $(paramName).text(desc).attr('title', item); $(paramValue).val(params[item]); } else { // added a new row, so make it fancy $(newline).show('highlight',{},'slow'); $('.inputs', root).scrollTop(100000); } }, /* * these are the current style and insert values to denote which one is * currently active */ /** * true signifies cite-style references, citation-style otherwise. Used when creating a reference. * @type Boolean */ togglestyle: true, // TODO: This should be eliminated if only name only inserts are allowed. /** true signifies full references, name-only otherwise. Used when inserting. * Note that new references are always inserted in full. * * @type Boolean */ toggleinsert: false, /* Cross-Browser Split 1.0.1 (c) Steven Levithan <stevenlevithan.com>; MIT License http://blog.stevenlevithan.com/archives/cross-browser-split An ECMA-compliant, uniform cross-browser split method */ /** * Cross-browser implementation of ECMAScript String.prototype.split function. * * @param {String} str input string to split * @param separator separator to split on, as RegExp or String * @param {Number} limit limit on number of splits. If the parameter is absent, no limit is imposed. * @return {Array} array resulting from split */ split: function (str, separator, limit) { // if `separator` is not a regex, use the native `split` if (Object.prototype.toString.call(separator) !== "[object RegExp]") { return proveit.split._nativeSplit.call(str, separator, limit); } var output = [], lastLastIndex = 0, flags = (separator.ignoreCase ? "i" : "") + (separator.multiline ? "m" : "") + (separator.sticky ? "y" : ""), separator = RegExp(separator.source, flags + "g"), // make `global` and avoid `lastIndex` issues by working with a copy separator2, match, lastIndex, lastLength; str = str + ""; // type conversion if (!proveit.split._compliantExecNpcg) { separator2 = RegExp("^" + separator.source + "$(?!\\s)", flags); // doesn't need /g or /y, but they don't hurt } /* behavior for `limit`: if it's... - `undefined`: no limit. - `NaN` or zero: return an empty array. - a positive number: use `Math.floor(limit)`. - a negative number: no limit. - other: type-convert, then use the above rules. */ if (limit === undefined || +limit < 0) { limit = Infinity; } else { limit = Math.floor(+limit); if (!limit) { return []; } } while (match = separator.exec(str)) { lastIndex = match.index + match[0].length; // `separator.lastIndex` is not reliable cross-browser if (lastIndex > lastLastIndex) { output.push(str.slice(lastLastIndex, match.index)); // fix browsers whose `exec` methods don't consistently return `undefined` for nonparticipating capturing groups if (!proveit.split._compliantExecNpcg && match.length > 1) { match[0].replace(separator2, function () { for (var i = 1; i < arguments.length - 2; i++) { if (arguments[i] === undefined) { match[i] = undefined; } } }); } if (match.length > 1 && match.index < str.length) { Array.prototype.push.apply(output, match.slice(1)); } lastLength = match[0].length; lastLastIndex = lastIndex; if (output.length >= limit) { break; } } if (separator.lastIndex === match.index) { separator.lastIndex++; // avoid an infinite loop } } if (lastLastIndex === str.length) { if (lastLength || !separator.test("")) { output.push(""); } } else { output.push(str.slice(lastLastIndex)); } return output.length > limit ? output.slice(0, limit) : output; }, // TODO: Remove the split code, and just use a regular regex (with two main groups for name and val), iteratively. Regex.find? Make name and val indices match, and rework calling code as needed. Also, check how this was done in the original code. /** * Overly clever regex to parse template string (e.g. |last=Smith|first=John|title=My Life Story) into name and value pairs. * * names is an array of all names, and values is an array of all values. They have equal lengths. * * @param {String} workingString template string to parse. * @return {Object} object with two properties, names and values. */ splitKeysAndValues: function (workingString) { var split = {}; // The first component is "ordinary" text (no pipes), while the second is a correctly balanced wikilink, with optional pipe. Any combination of the two can appear. split.names = proveit.split(workingString.substring(workingString.indexOf("|") + 1), /=(?:[^|]*?(?:\[\[[^|\]]*(?:\|(?:[^|\]]*))?\]\])?)+(?:\||\}\})/); split.names.length--; // Remove single empty element at end split.values = proveit.split(workingString.substring(workingString.indexOf("=") + 1, workingString.indexOf("}}")), /\|[^|=]*=/); return split; }, /** * Scan for references in the MWEditBox, and create a reference object and refBoxRow for each. */ scanForReferences: function() { // these are strings used to allow the correct parsing of the ref var workingstring; var cutupstring; this.clearRefBox(); var textValue = this.getTextboxText(); // since we should pick the name out before we get to the reference type, here's a variable to hold it var name; // key - name // value - // object - key - "reference", value - reference obj . Avoids repeating same object in references array. // key - "strings", value - array of orig strings var citations = {}; // Array of reference objects. At end of function, addNewElement called on each. var references = []; // allRefs should count opening refs, but not ref citation (not <ref name="..."" />) var allRefs = textValue.match(/<[\s]*ref[^\/>]*>/gi); // currentScan holds the parsed (match objects) list of references. Regex matches full or name-only reference. var currentScan = textValue.match(/<[\s]*ref[^>]*>(?:[^<]*<[\s]*\/[\s]*ref[\s]*>)?/gi); // [^<]* doesn't handle embedded HTML tags (or comments) correctly. // if there are results, if (currentScan) { for (var i = 0; i < currentScan.length; i++) { var reference = this.makeReference(currentScan[i]); if(reference) // Full reference object { name = reference.name; if(!name) // with no name, no possibility of repeat name. { references.push(reference); } } else // Not full reference. Possibly citation. { var match = currentScan[i].match(this.REF_REGEX); name = match && (match[1] || match[2] || match[3]); } if(name) { if(!citations[name]) { // Create array of original reference strings citations[name] = {}; if(!citations[name].strings) { citations[name].strings = []; } } if(reference && !citations[name].reference) // reference, and not already one for this name { citations[name].reference = reference; references.push(reference); } // Add to array citations[name].strings.push(currentScan[i]); } } } for(var j = 0; j < references.length; j++) { if(references[j].name) { var citation = citations[references[j].name]; references[j].setCitationStrings(citation.strings); } this.addNewElement(references[j]); } }, /** * Regex for parsing any reference text. * @type RegExp */ REF_REGEX: /<[\s]*ref[\s]*name[\s]*=[\s]*(?:(?:\"(.*?)\")|(?:\'(.*?)\')|(?:(.*?)))[\s]*\/?[\s]*>/, /** * Factory function for references. Takes text of a reference, and returns instance of the appropriate class. * @param {String} refText reference string * @return {AbstractReference} null if refText isn't a ref, otherwise the reference object */ makeReference: function(refText) { var isReference = /<[\s]*ref[^>]*>[^<]*\S[^<]*<[\s]*\/[\s]*ref[\s]*>/.test(refText); // Tests for reference (non-citation); if(!isReference) { return null; } var citeFunction = refText.match(/{{[\s]*cite/i) ? this.CiteReference : refText.match(/{{[\s]*Citation/i) ? this.CitationReference : this.RawReference; if(citeFunction != this.RawReference) { var workingstring = refText.match(/{{[\s]*(cite|Citation)[\s\S]*?}}/i)[0]; var match = refText.match(this.REF_REGEX); if(match && match != null) { var name = match[1] || match[2] || match[3]; // 3 possibilities, corresponding to above regex, are <ref name="foo">, <ref name='bar'>, and <ref name=baz> } var cutupstring = workingstring.split(/\|/g); // This little hack relies on the fact that 'e' appears first as the last letter of 'cite', and the type is next. if(citeFunction == this.CiteReference) { var beforeBar = cutupstring[0]; var typeStart = beforeBar.toLowerCase().indexOf('e'); // First end curly brace var rightCurly = beforeBar.indexOf('}'); // Usually, rightCurly will be -1. But this takes into account empty references like <ref>{{cite web}}</ref> var typeEnd = rightCurly != -1 ? rightCurly : beforeBar.length; // grab the type, then trim it. var type = $.trim(beforeBar.substring(typeStart + 1, typeEnd)); } } // type may be undefined, but that's okay. var citation = new citeFunction({"name": name, "type": type, "save": true, "inMWEditBox": true, "orig": refText}); if(citeFunction != this.RawReference) { var split = this.splitKeysAndValues(workingstring); var names = split.names; var values = split.values; for (var j = 0; j < names.length; j++) { /* Drop blank space, and |'s without params, which are never correct for citation templates.*/ var paramName = $.trim(names[j]).replace(/(?:\s*\|)*(.*)/, "$1"); var paramVal = $.trim(values[j]); // Should there be a setParam function? It could handle empty values, and even drop (siliently or otherwise) invalid parameters. Alternatively, should params be passed in the constructor? if (paramVal != "") { citation.params[paramName] = paramVal; } } } return citation; }, // TODO: Use https://gerrit.wikimedia.org/r/#/c/67166/ when merged. /** * Date-formatting class * * @param {String} format one of the format strings supported by MW core. * Currently, the supported values are 'default', 'mdy', 'dmy', 'ymd', and 'ISO 8601'. * If an unknown value is passed, it will use wgDefaultDateFormat. */ DateFormatter: function (format) { // 1-indexed (due to filler item at 0), in page content language. var monthNames = mw.config.get('wgMonthNames'); var supportedFormats = ['mdy', 'dmy', 'ymd', 'ISO 8601']; if($.inArray(format, supportedFormats) === -1) { format = mw.config.get('wgDefaultDateFormat'); } function getMonthName(date) { return monthNames[date.getMonth() + 1]; } this.formatAsMdy = function(date) { return getMonthName(date) + ' ' + date.getDate() + ', ' + date.getFullYear(); }; this.formatAsDmy = function(date) { return date.getDate() + ' ' + getMonthName(date) + ' ' + date.getFullYear(); }; this.formatAsYmd = function(date) { return date.getFullYear() + ' ' + getMonthName(date) + ' ' + date.getDate(); }; this.formatAsISO8601 = function(date) { return date.getFullYear() + '-' + (date.getMonth() < 9 ? '0' : '') + (date.getMonth() + 1) + '-' + (date.getDate() < 10 ? '0' : '') + date.getDate(); }; var formatters = { mdy: this.formatAsMdy, dmy: this.formatAsDmy, ymd: this.formatAsYmd, 'ISO 8601': this.formatAsISO8601 }; /** * Formats date according to stored preference * * @param {Date} date date to format * * @return {String} formatted date as String */ this.format = function(date) { return formatters[format](date); }; }, /** * Root reference type. Parent of RawReference, CiteReference, and CitationReference. * @class AbstractReference * @for proveit * @constructor * @param {Object} argObj argument object with keys for each option */ AbstractReference: function(argObj) { // CiteReference has a non-trivial override of this. This is defined early (and conditionally) because it is used in the constructor. if(!this.setType) { /** * @param {String} type type of reference */ this.setType = function(type) { this.type = type; }; } /** * Update citation strings after changing reference. This runs after modifying a reference's fields (name, params), but before changing orig */ this.update = function() { var newCiteText = this.toString(); var strings = this.getCitationStrings(); /* * Update main citation in strings list. * * TODO: * Use strings array here to find and update citations that are not main references. As is, they are orphaned. * Both array and textbox should be updated. * It may be enough to just set all non-main citations in text and array to this.getInsertionText(false). * However, if they remove the name entirely (not recommended), that would be a problem. */ if(strings.length > 0) // This implies there was a name before { for(var i = 0; i < strings.length; i++) { // If we find the full citation as a citation, update to the new text. if(strings[i] == this.orig) { // this.orig itself is updated in updateInText strings[i] = newCiteText; } } } else if(this.name != null) // They have added a name, so we should have a main citation. { // Now that it has a name, it is a citation to itself. strings.push(newCiteText); } }; /** * &lt;ref name /&gt; for reference * @type String */ this.name = argObj.name != "" ? argObj.name : null; // Save blank names as null /* type of reference, e.g. cite web, cite news. Also used (including for CitationReference objects) to determine default fields. */ this.setType(argObj.type); //TODO: Re-examine whether both (or indeed either) of save or inMWEditBox are really necessary. Can it be determined from context? /** * flag to determine whether citation must be saved. false indicates "dirty" citation that has yet to be updated in text and metadata. * @type Boolean */ this.save = argObj.save; /** * true if and only if the ref is in the MW edit box with the same value as this object's orig. * @type Boolean */ this.inMWEditBox = argObj.inMWEditBox; /** * original wikitext for reference * @type String */ this.orig = argObj.orig; /** * mapping of parameter names to values * @type Object */ this.params = {}; /** * Convenience method. Returns sorter for parameters. * @return {Function} sorter for parameters */ this.getSorter = function() { var thisCite = this; // Make closure work as intended. // Sorter uses paramSortKey first, then falls back on alphabetical order. return function(paramA, paramB) { var aInd = thisCite.getSortIndex(paramA); var bInd = thisCite.getSortIndex(paramB); if(aInd != -1 && bInd != -1) { return aInd - bInd; } else { proveit.log('Parameter missing from getSortIndex, which causes the sort to be invalid. paramA: ', paramA, ', aInd: ', aInd, ', paramB: ', paramB, ', bInd: ', bInd); if(paramA < paramB) { return -1; } else if(paramA == paramB) { return 0; } else { return 1; } } }; }; /** * Returns true if this reference is valid, false otherwise. * Assume all AbstractReference objects are valid. Can be overridden in subtypes. * @return {Boolean} AbstractReference.isValid always returns true */ this.isValid = function(){return true;}; /** * Generates label for reference using title, author, etc. * @return {String} the label that was generated */ this.getLabel = function() { var label = ""; if (this.params.author) { label = this.params.author + "; "; } else if (this.params.last) { label = this.params.last; if (this.params.first) { label += ", " + this.params.first; } label += "; "; } if (this.params.title) { label += this.params.title; } if(label == "") { var value; for (value in this.params) { break; } if(value) // There could be no parameters { label = value; } } return label; }; /** * Gets insertion text (for edit box). * * TODO: Generate a regex object instead (getInsertionRegExp), so highlighting would not fail due to trivial changes (e.g. spacing). * @param {Boolean} full If true, insert full text, otherwise ref name only * @return {String} insertion text */ this.getInsertionText = function(full) { if(full) { return this.toString(); } else { if(this.name) { return "<ref name=\"" + this.name + "\" />"; } else { throw new Error("getInsertionText: ref.name is null"); } } }; /** * Updates this reference in the edit box. */ this.updateInText = function() { var txtarea = proveit.getTextbox(); if (!txtarea || txtarea == null) return; txtarea.focus(); var text = proveit.getTextboxText(); text = text.replace(this.orig, this.toString()); // Do replacement in textarea. txtarea.value = text; // Baseline for future modifications this.orig = this.toString(); this.save = true; proveit.highlightTargetString(this.toString()); }; /** * Internal helper method for toString. * @param {String} template template for ref (currently "cite" or "Citation" * @param {Boolean} includeType true to include this.type, false otherwise * @return {String} string for current reference */ this.toStringInternal = function(template, includeType) { if(this.name) { var returnstring = "<ref name=\"" + this.name + "\">"; } else { var returnstring = "<ref>"; } returnstring += "{{" + template + (includeType ? " " + this.type : ""); for (var name in this.params) { returnstring += " | " + name + "=" + this.params[name]; } returnstring += "}}</ref>"; return returnstring; }; /** * Array of citation strings for this reference. * @type Array */ this.citationStrings = []; /** * Sets citationStrings to an array * @param {Array} strings array of citation strings, not null */ this.setCitationStrings = function(strings) { this.citationStrings = strings; }; /** * Gets array of citationStrings. * @return {Array} (possibly empty) array of citation strings. Will not return null. */ this.getCitationStrings = function() { return this.citationStrings; }; /** * Get icon URL for reference * @return {String} icon URL */ this.getIcon = function() { return '//upload.wikimedia.org/wikipedia/commons/d/dd/Silk-Page_white.png'; }; }, /** * Constructor for CiteReference type. * @class CiteReference * @for proveit * @constructor * @extends AbstractReference * @param {Object} argObj the argument object, with keys for each option */ CiteReference: function(argObj) { /* This is basically a fast representation of the template redirects, along with * self-mappings. */ var typeNameMappings = { web: "web", book: "book", journal: "journal", conference: "conference", encyclopedia: "encyclopedia", news: "news", newsgroup: "newsgroup", paper: "journal", "press release": "press release", "pressrelease": "press release", interview: "interview", episode: "episode", "AV media": "AV media", DVD: "AV media", audio: "AV media", "av media": "AV media", cd: "AV media", dvd: "AV media", media: "AV media", movie: "AV media", "music video": "AV media", video: "AV media", visual: "AV media" }; // Sets the type (e.g. web for cite web), applying the mappings. This is up top because it is used in AbstractReference constructor. this.setType = function(rawType) { var mappedType = typeNameMappings[rawType]; if(mappedType != null) this.type = mappedType; else this.type = rawType; // Use naive type as fallback. }; /** * Returns the type for display purposes, based on description messages. For example, for "AV media" it currently returns "Audiovisual work". * * @return {String} type for display */ this.getTypeForDisplay = function() { return proveit.getDescriptions()[this.type]; }; proveit.AbstractReference.call(this, argObj); // TODO: Should CiteReference.getSortIndex and CitationReference.getSortIndex be merged into AbstractCitation? Less fine-grained, but simpler to maintain. /** * Returns the sort index for a given parameter * @param {String} param parameter name * @return {Number} sort index if found, otherwise -1 */ this.getSortIndex = function(param) { // This is the order fields will be displayed or outputted. return $.inArray(param, [ "url", "title", "trans_title", "encyclopedia", "publisher", "work", "date", "agency", "accessdate", "author", "last", "first", "subject", "subjectlink", "inventor", "editor", "author2", "last2", "first2", "subject2", "subjectlink2", "author3", "last3", "first3", "subject3", "subjectlink3", "author4", "last4", "first4", "subject4", "author5", "last5", "first5", "author6", "last6", "first6", "author7", "last7", "first7", "author8", "last8", "first8", "author9", "last9", "first9", "authorlink", "coauthors", "interviewer", "cointerviewers", "type", "newsgroup", "journal", "booktitle", "program", "episodelink", "series", "serieslink", "credits", "network", "station", "callsign", "city", "airdate", "began", "ended", "season", "seriesno", "number", "minutes", "transcript", "transcripturl", "people", "year", "month", "article", "contribution", "format", "medium", "newspaper", "conference", "volume", "edition", "issue", "location", "pages", "page", "language", "isbn", "issn", "oclc", "doi", "pmid", "id", "archiveurl", "archivedate", "deadurl", "time", "quote", "ref" ]); }; /** * Returns this reference as a string. * @return {String} reference as string */ this.toString = function() { return this.toStringInternal("cite", true); }; // References without these parameters will be flagged in red. // True indicates required (null, or undefined, means not required) var requiredParams = { web: { "url": true, "title": true}, book: { "title": true }, journal: { "title": true }, conference: { "title": true }, encyclopedia: { "title": true, "encyclopedia": true }, news: { "title": true, "work": true, "date": true }, newsgroup: { "title": true }, "press release" : { "title": true }, interview: { "last": true }, // TODO: Interview requires last *or* subject. Currently, we can't represent that. episode: { "title": true }, "AV media": { "title": true } }; /** * Return required parameters for this citation type. * @return {Object} object with required parameters as keys and true as value; empty object for unknown type */ this.getRequiredParams = function() { var curReq = requiredParams[this.type]; if(curReq) return curReq; else return {}; // Return empty object rather than null to avoid dereferencing null. }; // These paramaters will be auto-suggested when editing. var defaultParams = { web: [ "url", "title", "author", "accessdate", "work", "publisher", "date", "pages"], book: [ "title", "author", "authorlink", "year", "isbn", "publisher", "location", "pages", "url" ], journal: [ "title", "author", "journal", "volume", "issue", "year", "month", "pages", "url", "doi", "pmid" ], conference: [ "conference", "title", "booktitle", "author", "editor", "year", "month", "url", "id", "accessdate", "location", "pages", "publisher" ], encyclopedia: [ "title", "encyclopedia", "author", "editor", "accessdate", "edition", "year", "publisher", "volume", "location", "pages" ], news: [ "title", "author", "url", "work", "date", "accessdate", "pages", "location", "agency" ], newsgroup: [ "title", "author", "date", "newsgroup", "id", "url", "accessdate" ], "press release" : [ "title", "url", "publisher", "date", "accessdate" ], interview: ["last", "first", "subjectlink", "interviewer", "title", "callsign", "city", "date", "program", "accessdate"], episode: ["title", "series", "credits", "airdate", "city", "network", "season"], "AV media": ["people", "date", "url", "title", "medium", "location", "publisher"] }; /** * Returns default parameters (to be suggested when editing) for current reference * @return {Array} array of default parameter names; empty array if unknown */ this.getDefaultParams = function() { var curDefault = defaultParams[this.type]; if(curDefault) return curDefault; else return []; // Return empty array rather than null to avoid dereferencing null. }; this.isValid = function() { if(this.type == '') { return false; } var req = this.getRequiredParams(); var i = 0; var allFound = true; for(var reqParam in req) { /* Ignore parameters in req object that are null, undefined, or false. They are not required. */ if(!req[reqParam]) continue; allFound &= (reqParam in this.params); if(!allFound) break; } return allFound; }; var iconMapping = { web: "//upload.wikimedia.org/wikipedia/commons/f/f0/Silk-Page_white_world.png", book: "//upload.wikimedia.org/wikipedia/commons/1/1e/Silk-Book.png", journal: "//upload.wikimedia.org/wikipedia/commons/f/f8/Silk-Page_white_text.png", news: "//upload.wikimedia.org/wikipedia/commons/3/32/Silk-Newspaper.png", newsgroup: "//upload.wikimedia.org/wikipedia/commons/5/5c/Silk-Comments.png", "press release": "//upload.wikimedia.org/wikipedia/commons/b/bd/Silk-Transmit_blue.png", interview: "//upload.wikimedia.org/wikipedia/commons/f/f7/Silk-Telephone.png", episode: "//upload.wikimedia.org/wikipedia/commons/b/b2/Silk-Television.png", "AV media": "//upload.wikimedia.org/wikipedia/commons/1/1a/Silk-film.png" }; var superGetIcon = this.getIcon; this.getIcon = function() { var icon = iconMapping[this.type]; if(icon) { return icon; } return superGetIcon.call(this); }; }, /** * A function for citation style refs. * @class CitationReference * @for proveit * @constructor * @extends AbstractReference * @param {Object} argObj argument object with keys for each option */ CitationReference: function(argObj) { proveit.AbstractReference.call(this, argObj); // None currently required; var requiredParams = {}; // These paramaters will be auto-suggested when editing. var defaultParams = { web: [ "url", "author", "title", "date", "accessdate"], news: [ "author", "title", "newspaper", "url", "publication-place", "volume", "issue", "date", "pages"], encyclopedia: ["author", "editor", "contribution", "title", "publisher", "place", "year", "volume", "pages"], book: ["author", "title", "publisher", "place", "year"], journal: ["author", "title", "journal", "volume", "issue", "year", "pages"], patent: ["inventor", "title", "issue-date", "patent-number", "country-code"] }; /** * Returns the sort index for a given parameter * @param {String} param parameter name * @return {Number} sort index if found, otherwise -1 */ this.getSortIndex = function(param) { // This is the order fields will be displayed or outputted. return $.inArray(param, [ "last", "first", "url", "author", "editor", "contribution", "author-link", "last2", "first2", "author2-link", "publication-date", "inventor", "title", "issue-date", "patent-number", "country-code", "journal", "volume", "newspaper", "issue", "date", "publisher", "place", "year", "edition", "publication-place", "series", "version", "pages", "page", "id", "isbn", "doi", "oclc", "accessdate" ]); }; /** * Returns this reference as a string. * @return {String} reference as string */ this.toString = function() { return this.toStringInternal("Citation", false); }; /** * Return required parameters for this citation type. * @return {Object} object with required parameters as keys and true as value; empty object for unknown type */ this.getRequiredParams = function() { return requiredParams; }; /** * Returns default parameters (to be suggested when editing) for current reference * @return {Array} array of default parameter names; empty array if unknown */ this.getDefaultParams = function() { if(this.type) { return defaultParams[this.type]; } else { return ["url", "title", "author", "date", "publisher"]; // Can't determine more specific defaults when editing a pre-existing Citation. } }; }, /** * Constructor for RawReference type. * @class RawReference * @for proveit * @constructor * @extends AbstractReference * @param {Object} argObj the argument object, with keys for each option */ RawReference: function(argObj) { proveit.AbstractReference.call(this, argObj); this.type = 'raw'; /** * Returns this reference as a string. * @return {String} reference as string */ this.toString = function() { return this.orig; }; this.params['title'] = this.orig; this.getIcon = function() { return 'https://upload.wikimedia.org/wikipedia/commons/d/db/Silk-Page_white_code_red.png'; }; this.getTypeForDisplay = function() { return proveit.getDescriptions()['raw']; }; }, // TODO: This should be unified with changeRefFromEditPane /** * Convert the current contents of the add citation panel to a reference (i.e CiteReference(), CitationReference()) * @for proveit * @param {Node} box typepane root of add GUI (pane for specific type, e.g. journal) * @return {AbstractReference} ref or null if no panel exists yet. */ getReferenceFromAddPane: function(box) { var $box = $(box); var type = $box.data('proveitRefType'); // get <ref> name var refName = $('#addrefname').val(); var citeFunc = this.togglestyle ? this.CiteReference : this.CitationReference; var ref = new citeFunc({"name": refName, "type": type}); var paramName, paramVal; var paramList = $(".paramlist", box)[0]; var paramRows = $('div', paramList); for (var i = 0; i < paramRows.length; i++) { var paramRow = paramRows[i]; var valueTextbox = $(".paramvalue", paramRow)[0]; if($(paramRow).hasClass("addedrow")) // Added with "Add another field" { paramName = $.trim($(".paramdesc", paramRow)[0].value); } else { paramName = valueTextbox.id.substring(this.NEW_PARAM_PREFIX.length); } paramVal = $.trim(valueTextbox.value); if(paramName != "" && paramVal != "") { // Non-blank ref.params[paramName] = paramVal; } } ref.update(); return ref; }, /** * Called from the add citation panel, this is the function used to * add the actual citation. * * @param {AbstractReference} ref reference being added */ addReference: function(ref) { // get this working, lots of typing here. this.addNewElement(ref); ref.orig = ref.toString(); /* * Cycle through the boxes and grab the id's versus the values, watch * for the final box and make sure to grab the type as well */ this.insertRefIntoMWEditBox(ref, true); // true means insert full text here, regardless of global toggle. ref.save = true; ref.inMWEditBox = true; }, /** * Clear all rows of passed in add citation panes. * @param {Node} citePanes raw DOM element */ clearCitePanes: function(citePanes) { if(citePanes.hasChildNodes()) { citePanes.removeChild(citePanes.firstChild); } }, /** * Add event handler to Delete Field button in Add/Edit Reference panes * @param {Node} fieldRow the fieldRow DOM element to remove */ activateRemoveField: function(fieldRow) { $('.delete-field', fieldRow).click(function() { $(fieldRow).hide( 'highlight',{},'slow', function() { $(fieldRow).remove(); } ); }); }, /** * Changes the panel for the add reference panel to the correct type of entry * @param {Node} menu Raw HTML menu element */ changeAddPane: function(menu) { // Reset scroll $('#add-fields').scrollTop(0); $(menu.parentNode).show(); // cite/citation vbox. var citePanes = $(".addpanes", menu.parentNode.parentNode).get(0); this.clearCitePanes(citePanes); var newRefType = menu.value; var genPane = document.getElementById("dummyCitePane").cloneNode(true); var $genPane = $(genPane).attr('id', ''); $genPane.data('proveitRefType', newRefType); // name the ref-name-row $('.ref-name-row', $genPane).children('input').attr('id','addrefname'); $('.ref-name-row', $genPane).children('label').attr('for','addrefname'); // Somewhat hackish. What's a better way? var newRef; if(menu.id == "citemenu") { newRef = new this.CiteReference({}); } else { newRef = new this.CitationReference({}); } newRef.type = newRefType; var descs = this.getDescriptions(); var defaultParams = newRef.getDefaultParams().slice(0); // copy defaultParams.sort(newRef.getSorter()); //var required = newRef.getRequiredParams(); // Possibly, Cite objects should automatically include default parameters in their param maps. That would seem to make this simpler. for(var i = 0; i < defaultParams.length; i++) { newRef.params[defaultParams[i]] = ""; } // Should there be a getParamKeys or similar function for this, or even getSortedParamKeys? var newParams = []; for(param in newRef.params) { newParams.push(param); } newParams.sort(newRef.getSorter()); var required = newRef.getRequiredParams(); var paramList = $(".paramlist", $genPane)[0]; for(var i = 0; i < newParams.length; i++) { var param = newParams[i]; var paramBox; if(descs[param]) { paramBox = document.getElementById("preloadedparamrow").cloneNode(true); var label = $('.paramdesc', paramBox); if(required[param]) { label.addClass("required"); $('.delete-field', paramBox).remove(); // don't let people remove required fields } else { this.activateRemoveField(paramBox); } label.text(descs[param]); // Basically the same code as nameHbox above label.attr("for", this.NEW_PARAM_PREFIX + param); if(param == 'accessdate') $('.paramvalue', paramBox).val(this.dateFormatter.format(new Date)); } else { // Throwing an error here doesn't make sense if user-added fields can be copied over. // throw new Error("Undefined description for param: " + param); paramBox = document.getElementById("addedparamrow").cloneNode(true); var nameTextbox = $(".paramdesc", paramBox)[0]; nameTextbox.setAttribute("value", param); } paramBox.id = ""; this.activateRemoveField(paramBox); $(".paramvalue", paramBox)[0].id = this.NEW_PARAM_PREFIX + param; //paramBox.childNodes[2].value = newRef.params[param]; // Causes parameters to disappear. Why? paramList.appendChild(paramBox); } $(citePanes).prepend($genPane); }, /** * Creates and returns a hidden element holding the template elements * (placeholder elements later cloned and filled with real data) * * @return {jQuery} $root Hidden root element holding templates */ createTemplateElement: function() { var $root = $('<div>', { id: 'proveit-templates' }); // Dummy cite pane var dummyCite = $('<div>', { id: 'dummyCitePane', "class": 'typepane' }); var $addRefNameRow = this.createReferenceNameRow(); //$('input', $addRefNameRow).attr('id', 'addrefname'); //$('label', $addRefNameRow).attr('for', 'addrefname'); dummyCite.append($addRefNameRow); dummyCite.append($('<div>', {"class": 'paramlist'})); $root.append(dummyCite); var preloadedparam = $('<div>', { id: 'preloadedparamrow', "class": 'preloadedrow input-row' }).append($('<label>', { "class": 'paramdesc' })); var paramvalue = $('<input>', { "class": 'paramvalue', tabindex: 0 }); preloadedparam.append(paramvalue); var deleteButton = $('<button>', { "class": 'delete-field', tabindex: -1 }).text('delete field'); deleteButton.button({ icons: { primary: 'ui-icon-close' }, text: false }); preloadedparam.append(deleteButton); $root.append(preloadedparam); var addedparam = $('<div>', { id: 'addedparamrow', "class": 'addedrow input-row'}). append($('<input>', { "class": 'paramdesc', tabindex: 0 })). append(paramvalue.clone()). append(deleteButton.clone()); $root.append(addedparam); return $root; }, /** * Creates a row to be used to input name attribute of the ref (<ref name="..." />) * * @return {jQuery} <ref> name row */ createReferenceNameRow: function() { // div.ref-name-row var $refNameRow = $('<div>', { "class": 'ref-name-row', tabindex: -1 }); var refLabel = $('<label>', { "for": 'editrefname', title: 'This is a unique identifier that can be used to refer to this reference elsewhere on the page.', "class": 'paramdesc' }).text('<ref> name'); $refNameRow.append(refLabel); $refNameRow.append($('<input>', { id: 'editrefname', "class": 'paramvalue', tabindex: 0 })); return $refNameRow; }, /** * Create ProveIt HTML GUI */ createGUI: function() { if(this.getGUI().length > 0) { // GUI already created return false; } // more JqueryUI CSS: http://blog.jqueryui.com/2009/06/jquery-ui-172/ var gui = $('<div>', {id: this.GUI_ID}); var $tabs = $('<div>', {id: 'proveit-tabs'}); var created = $('<h1>'); var createdLink = $('<a>').attr({title: 'Created by the ELC Lab at Georgia Tech', href: 'http://proveit.cc.gatech.edu', target: '_blank'}); // Main logo in upper-right var logo = $('<img>' ).attr( {src: 'https://upload.wikimedia.org/wikipedia/commons/0/0d/ProveIt_user_interface_logo.png', alt: 'ProveIt', height: 30, width: 118 } ); createdLink.append(logo); created.append(createdLink); // Minimize/maximize button var showHideButton = $('<button>', { id: 'proveit-show-hide-toggle' } ).text('show/hide'); created.append(showHideButton); $tabs.append(created); var header = $('<ul>'); var view = $('<li>'); // View tab link var viewTab = $('<a/>', {id: 'proveit-view-tab', "class": 'tab-link', href: '#proveit-view-edit-panel'}).text('References ('); var numRefs = $('<span>').attr({id: 'numRefs'}).text('0'); viewTab.append(numRefs, ')'); view.append(viewTab); header.append(view); var add = $('<li>'); // Add tab link var addTab = $('<a>').attr({id: 'proveit-add-tab', "class": 'tab-link', href: '#proveit-add-panel'}).text('Add a Reference'); add.append(addTab); header.append(add); $tabs.append(header); // View and edit panel var viewEditPanel = $('<div>', {id: 'proveit-view-edit-panel'}); // View pane used for displaying references; within view tab var viewPane = $('<div>', {id: 'view-pane'}); var viewScroll = $('<div>', {"class": 'scroll', style: 'height: 210px;'}); // Ref list root element var refTable = $('<table>', {id: 'refs'}); var dummyRef = $('<tr>', {id: 'dummyRef', style: 'display: none;'}); dummyRef.append($('<td>', {"class": 'number'})). append($('<td>', {"class": 'type'})). append($('<td>', {"class": 'title'})); //append($('<td>', {"class": 'details'})); var editTd = $('<td>', {"class": 'edit'}). append($('<button>', {text: 'edit'})); dummyRef.append(editTd); refTable.append(dummyRef); viewScroll.append(refTable); viewPane.append(viewScroll); viewEditPanel.append(viewPane); // div#edit-pane, within view tab var editPane = $('<div>', {id: 'edit-pane', style: 'display: none'}); // div#edit-fields var editFields = $('<div>', {id: 'edit-fields', "class": 'inputs scroll', style: 'height: 170px', tabindex: -1}); var refNameRow = this.createReferenceNameRow(); // div.paramlist var paramList = $('<div/>', {"class": 'paramlist'}); editFields.append(refNameRow); editFields.append(paramList); editPane.append(editFields); // div#edit-buttons, part of edit pane var editButtons = $('<div/>', {id: 'edit-buttons'}); var addFieldButton = $('<button/>', {style: 'margin-right: 50px;'}). append('add field'); editButtons.append(addFieldButton); var reqSpan = $('<span/>', {"class": 'required', text: 'bold'}); editButtons.append(reqSpan). append(' = required field'); var saveButton = $('<button/>', {"class": 'right-side accept', text: 'update edit form'}); editButtons.append(saveButton); var cancelButton = $('<button/>', {"class": 'right-side cancel', text: 'cancel'}); editButtons.append(cancelButton); editPane.append(editButtons); viewEditPanel.append(editPane); $tabs.append(viewEditPanel); // Add panel var addPanel = $('<div/>', {id: 'proveit-add-panel'}); var addFields = $('<div/>', {id: 'add-fields', "class": 'inputs scroll', style: 'height: 170px', tabindex: -1}); var cite = $('<div/>', {style: 'display: none', id: 'cite', "class": 'input-row'}); var refCiteTypeLabel = $('<label/>', {'for': 'citemenu', "class": 'paramdesc required', text: 'Reference type'}); cite.append(refCiteTypeLabel); var citemenu = $('<select/>', {id: 'citemenu', change: function() { proveit.changeAddPane(citemenu.get(0)); }}); var citeTypes = this.CiteReference.getTypes(); var descs = this.getDescriptions(); for(var i = 0; i < citeTypes.length; i++) { citemenu.append($('<option/>', {value: citeTypes[i], text: descs[citeTypes[i]]})); } cite.append(citemenu); addFields.append(cite); addFields.append($('<div/>', {"class": 'addpanes', id: 'citepanes', tabindex: -1})); var citation = $('<div/>', {style: 'display: none', id: 'citation', "class": 'input-row'}); var refCitationTypeLabel = refCiteTypeLabel.clone().attr('for', 'citationmenu'); citation.append(refCitationTypeLabel); var citationmenu = $('<select/>', {id: 'citemenu', change: function() { proveit.changeAddPane(citationmenu.get(0)); }}); var citationTypes = ['web', 'book', 'journal', 'encyclopedia', 'news', 'patent']; for(var j = 0; j < citationTypes.length; j++) { citationmenu.append($('<option/>', {value: citationTypes[i], text: descs[citationTypes[i]]})); } citation.append(citationmenu); addFields.append(citation). append($('<div/>', {"class": 'addpanes', id: 'citationpanes', style: 'display: none;'})); addPanel.append(addFields); // Add buttons, part of add tab var addButtons = $('<div/>', {id: 'add-buttons'}); addButtons.append($('<button/>', {style: 'margin-right: 50px;', text: 'add field'})). append(reqSpan.clone()). append(" = required"). append(saveButton.clone().text('insert into edit form')). append(cancelButton.clone()); addPanel.append(addButtons); $tabs.append(addPanel); gui.append($tabs); $(document.body).prepend(gui); var cancelEdit = function() { $("#edit-pane").hide(); $("#view-pane").show(); }; // set up tabs $tabs.tabs({ collapsible: true, active: false, // Initially all collapsed beforeActivate: function(event, ui) { // TODO: Select just-added item in reference list, upon moving from add tab to view tab // Is this event caused by a click on a tab? var isClickOnTab = event.currentTarget && $(event.currentTarget).is('.tab-link'); // Moving to add (including maximizing) if(ui.newPanel.is(addPanel)) { cancelEdit(); proveit.changeAddPane(document.getElementById(proveit.togglestyle ? 'citemenu' : 'citationmenu')); } if(ui.newPanel.length === 0) { if(isClickOnTab) { // Don't allow collapsing by clicking a tab. event.preventDefault(); // Clicked view tab when either view or edit was showing if(ui.oldPanel.is(viewEditPanel)) { // Cancel the edit and show reference list cancelEdit(); } } else { // They clicked the show/hide button; let it collapse and update the icon. showHideButton.button("option", "icons", { primary: 'ui-icon-triangle-1-n' } ); } } else { // There is a visible new panel; update the icon. showHideButton.button("option", "icons", { primary: 'ui-icon-triangle-1-s' } ); } } }); // add panel buttons $("#add-buttons button:first").button({ icons: { primary: 'ui-icon-circle-plus' } }).click(function() { proveit.addPaneRow(document.getElementById("proveit-add-panel")); }) .next().next().button({ icons: { primary: 'ui-icon-circle-check', secondary: 'ui-icon-circle-arrow-e' } }).click(function() { proveit.addReference(proveit.getReferenceFromAddPane($('#proveit-add-panel .typepane').get(0))); $tabs.tabs( { active: 0 } ); // Activate view panel $("div.scroll, #view-pane").scrollTop(100000); // scroll to new ref }).next(). button({ icons: { primary: 'ui-icon-circle-close' } }).click(function() { $tabs.tabs( { active: 0 } ); // Activate view panel }); // cancel buttons $("button.cancel").click(cancelEdit); // edit panel buttons $("#edit-buttons button:first").button({ icons: { primary: 'ui-icon-circle-plus' } }).click(function() { proveit.addPaneRow($("#edit-pane")); }). next().next(). button({ icons: { primary: 'ui-icon-circle-check' } }).next().button({ icons: { primary: 'ui-icon-circle-close' } }); // create the minimize button showHideButton.button({ icons: { primary: 'ui-icon-triangle-1-n' }, text: false }); var viewAndAdd = $(viewEditPanel).add(addPanel); this.viewAndAddPanes = viewAndAdd; var prevActiveTabPaneIndex = 0; function minimize() { prevActiveTabPaneIndex = $tabs.tabs('option', 'active'); // Collapse all tabs $tabs.tabs('option', 'active', false); } function maximize() { $tabs.tabs('option', 'active', prevActiveTabPaneIndex); } this.toggleViewAddVisibility = function() { // All tabs collapsed if($tabs.tabs('option', 'active') === false) { maximize(); } else { minimize(); } }; showHideButton.click(this.toggleViewAddVisibility); this.scanForReferences(); $("#refs tr").eq(0).click().click(); // select first item in list. TODO: Why two .click? // alternate row colors $("#refs tr:even").addClass('light'); $("#refs tr:odd").addClass('dark'); gui.append(this.createTemplateElement()); }, /** * A reference to the set containing two items, the view and add tabs. Will be initialized by createGUI, so it is non-null if ProveIt is visible * * @type {$NodeSet} */ viewAndAddPanes: null, /* * Gets jQuery set for ProveIt GUI, which will be empty if ProveIt has not initialized * * @return {$Node} root of ProveIt */ getGUI: function() { return $('#' + this.GUI_ID); }, /** * Hides ProveIt completely */ hide: function() { this.getGUI().hide(); }, /** * Show ProveIt */ show: function() { this.createGUI(); this.getGUI().show(); }, /** * Toggle overall visiblility. If currently hidden, go to minimized. If minimized, maximize. If maximize, hide */ toggleVisibility: function() { if(this.getGUI().is(':visible')) { if(this.viewAndAddPanes.is(':visible')) // maximized { this.hide(); } /* * If previously maximized, we minimize after hiding, so when we show, it will already be minimized. * If minimized, we maximize */ this.toggleViewAddVisibility(); } else { this.show(); } }, /** * Toggle visibility of view and add panes. Initialized by createGUI * * @method toggleViewAddVisibility */ toggleViewAddVisibility: null, /** * Generates refbox row and all children, to be used by addNewElement, and when updating * * @param {AbstractReference} ref reference to generate from * @param {Boolean} isReplacement if true, this replaces another refbox item, so no number will be assigned, and the count will not be updated. * @return {Node} new refbox row for refbox */ makeReferenceBoxRow: function(ref, isReplacement) { var refName = ref.name; //may be null or blank //var refbox = this.getReferenceBox(); var newchild = $('<tr><td class="number"></td><td class="type"></td><td class="title"></td><td class="edit"></td></tr>').get(0); // removed <span class="pointers"></span> // removed <td class="details"></td> if(!ref.isValid()) { // Flag as invalid. $(newchild).addClass('invalid'); } // grab the nodes that need changed out of it var neweditimage = $('.edit button', newchild).get(0); var thisproveit = this; var title = ''; var shortTitle = ''; if(ref.params['title'] != null) { title = ref.params['title']; shortTitle = this.truncateTitle(title); } $('td.title', newchild).text(shortTitle); $('td.title', newchild).attr('title', title); // deal with variations of date info var formattedYear = ''; if(ref.params['year']) formattedYear = ref.params['year']; else if (ref.params['date']) { var yearMatch = ref.params['date'].match(/^([12]\d{3})/); if(yearMatch) { formattedYear = yearMatch[1]; } } //$('td.year', newchild).text(formattedYear); // deal with variations of author info var formattedAuthor = ''; if(ref.params['author']) formattedAuthor = ref.params['author']; else if (ref.params['last']) { // if(ref.params['first']) // formattedAuthor = ref.params['last'] + ', ' + ref.params['first']; // else formattedAuthor = ref.params['last']; } if(ref.params['coauthors'] || ref.params['last2']) formattedAuthor += ' <i>et al.</i>'; // build the "details" cell based on presence of author/year data // var details = ''; // if (formattedYear != '' && formattedAuthor != '') // details = '(' + formattedAuthor + ', ' + formattedYear + ')'; // else if (formattedYear != '') // details = '(' + formattedYear + ')'; // else if (formattedAuthor != '') // details = '(' + formattedAuthor + ')'; // $('td.details', newchild).html(details); // generate a URL based on ref type var icon = ref.getIcon(), url = '', refType = ref.type; switch(refType) { case 'web': url = ref.params['url']; break; case 'book': if(ref.params['isbn'] != null) url = mw.util.getUrl( 'Special:BookSources', { isbn: ref.params['isbn'] } ); break; case 'journal': case 'conference': if(ref.params['doi'] != null) url = 'http://dx.doi.org/' + ref.params['doi']; break; case 'news': url = ref.params['url']; break; case 'episode': url = 'http://www.imdb.com/find?s=ep&q=' + escape(ref.params['title']); break; } $('td.type', newchild).css('background-image','url('+icon+')'); var authorByline = '', yearByline = '', refTypeByline = ''; if(formattedAuthor != '') authorByline = 'By: <span class="author">' + formattedAuthor + '</span>'; if(formattedYear != '') yearByline = 'Date: <span class="date">' + formattedYear + '</span>'; if(refType != null) { var displayType = ref.getTypeForDisplay(), formattedRefType = displayType; $('td.type', newchild).attr('title', displayType); if(url != '') formattedRefType = '<a href="' + url + '" target="_blank">' + formattedRefType + '</a>'; refTypeByline = 'Type: <span class="type">' + formattedRefType + '</span>'; } //alert("authorByline: " + authorByline + "\n yearByline: " + yearByline + "\n refTypeByline: " + refTypeByline); var byline = '', separator = ' | '; if(refType == 'raw') { byline = refTypeByline + separator + mw.html.escape(ref.toString()); } else if(authorByline != '') // a?? { if(yearByline != '') // ad? { if(refTypeByline != '') // adt byline = authorByline + separator + yearByline + separator + refTypeByline; else // ad- byline = authorByline + separator + yearByline; } else // a-? { if(refTypeByline != '') // a-t byline = authorByline + separator + refTypeByline; else // a-- byline = authorByline; } } else // -?? { if(yearByline != '') // -d? { if(refTypeByline != '') // -dt byline = yearByline + separator + refTypeByline; else // -d- byline = yearByline; } else // --? { if(refTypeByline != '') // --t byline = refTypeByline; // no need for --- } } byline = '<p>' + byline + '</p>'; //alert(byline); // create expanded <div> var expanded = $('<div />',{ "class": 'expanded' }); // append the infobar to the expanded info box $(expanded).append(byline); // append the expanded info box to the title <td> $('td.title', newchild).append(expanded); if(!isReplacement) { // get ref number by counting number of refs (this includes dummy ref, but not the one we're creating) var numRefs = $('#refs tr').length; $('td.number', newchild).text(numRefs); $('#numRefs').text(numRefs); // update the number of refs in the view tab } // event handler for selecting a ref) $(newchild).click(function() { thisproveit.highlightTargetString(ref.orig); //thisproveit.highlightTargetString(ref.orig); $("#refs tr").removeClass('selected'); $(newchild).addClass('selected'); }); var doEdit = function() { thisproveit.updateEditPane(ref); $("#view-pane").hide(); $("#edit-pane").show(); }; var citationStrings = ref.getCitationStrings(); //var pointers = $('.pointers', newchild); var allCitations = $('<span class="all-citations" />'); for(var i = 0; i < citationStrings.length; i++) { var dividend = i + 1; var colName = ""; while(dividend > 0) { var mod = --dividend % 26; colName = String.fromCharCode(97 + mod) + colName; // a = 97 dividend = Math.floor(dividend / 26); } var citationHolder = $('<a href="#">' + colName + '</a>'); // Bind i var clickFunc = (function(i) { return function() { var last = 0, j = 0; var text = proveit.getTextboxText(); for(j = 0; j < i; j++) { last = text.indexOf(citationStrings[j], last); // Shouldn't happen. Indicates citation strings are out of date. if(last == -1) { proveit.log("citationStrings[" + j + "]: " + citationStrings[j] + " not found. Returning."); return false; } last += citationStrings[j].length; } var startInd = text.indexOf(citationStrings[i], last); if(startInd == -1) { proveit.log("citationStrings[" + i + "]: " + citationStrings[i] + " not found."); } else { proveit.highlightLengthAtIndex(startInd, citationStrings[i].length); } return false; }; })(i); citationHolder.click(clickFunc); allCitations.append(citationHolder); } if(citationStrings.length > 1) { var newP = $('<p />'); newP.append('This reference is cited in the article <span class="num-citations">' + citationStrings.length + ' times</span>: ').append(allCitations); expanded.append(newP); } // edit buttons if(ref.type != 'raw') { // SMALL EDIT BUTTON // create button var smallEditBtn = $('<button />',{ text: 'edit' }); // transform button $(smallEditBtn).button({ icons: { primary: 'ui-icon-pencil' }, text: false }); // button click event handler smallEditBtn.click(doEdit); // append button $('.edit', newchild).append(smallEditBtn); // LARGE EDIT BUTTON // create button var editBtn = $('<button />',{ "class": 'edit', text: 'edit this reference' }); // transform button $(editBtn).button({ icons: { primary: 'ui-icon-pencil' }, text: true }); // button click event handler editBtn.click(doEdit); // append button expanded.append(editBtn); // ROW EVENT HANDLER $(newchild).dblclick(doEdit); } else { // needed to keep all rows the same height $('.edit', newchild).append('&nbsp;'); } // ibid button if(citationStrings.length > 0) { // create button var ibidBtn = $('<button />',{ "class": 'insert', text: 'insert this reference at cursor' }); // transform button $(ibidBtn).button({ icons: { primary: 'ui-icon-arrowthick-1-e' }, text: true }); // button click event handler ibidBtn.click(function(){ thisproveit.insertRefIntoMWEditBox(ref, false); return false; }); // append button expanded.append(ibidBtn); } return newchild; }, /** * Truncates title to fit ProveIt refbox row. * @param {String} title title to truncate * @return {String} truncated title */ truncateTitle: function(title) { var MAX_LENGTH = 86; var truncated = title; if(title.length > MAX_LENGTH) { truncated = truncated.substring(0, MAX_LENGTH); var lastSpacePos = truncated.lastIndexOf(' '); if(lastSpacePos != -1) { truncated = truncated.substr(0, lastSpacePos); truncated += " ..."; } } return truncated; }, /** * Only to be used internally to add the citations to the list * * @param {AbstractReference} ref the reference to add */ addNewElement: function(ref) { var refbox = this.getReferenceBox(); $(refbox).append(this.makeReferenceBoxRow(ref, false)); } }, window.proveit); /** * Static method. Returns valid Cite reference types * @for CiteReference * @static * @return {Array} array of cite method types */ proveit.CiteReference.getTypes = function() { return ["web", "book", "journal", "conference", "encyclopedia", "news", "newsgroup", "press release", "interview", "episode", "AV media"]; }; proveit.split._compliantExecNpcg = /()??/.exec("")[1] === undefined; // NPCG: nonparticipating capturing group proveit.split._nativeSplit = String.prototype.split; proveit.setup(); }( mediaWiki, jQuery ) ); // Local Variables: // js2-basic-offset: 8 // End: // </nowiki> ae0bv1hegg6hvhmhcv4azguzva5kkal MediaWiki:Gadget-ProveIt-classic.css 8 24531 268772 2026-04-28T12:43:18Z Umarxon III 11129 Sahypa döretdi, mazmuny: '/* _____________________________________________________________________________ * | | * | === WARNING: GLOBAL GADGET FILE === | * | Changes to this page affect many users. | * | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. | * |_________________________________________________...' 268772 css text/css /* _____________________________________________________________________________ * | | * | === WARNING: GLOBAL GADGET FILE === | * | Changes to this page affect many users. | * | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. | * |_____________________________________________________________________________| */ /* * Imported from Git commit 72b9abf17fe33ab8af55a7cfb074a9beb35365ab as of 2015-03-09 from https://github.com/proveit-js/proveit * Changes should be made through that GitHub project. */ div#proveit { position: fixed; bottom: 0px; right: 20px; z-index: 10000; /*height: 300px;*/ width: 750px; background: #fff; /* border: 1px solid #666; font-size: small !important; opacity: 0.3; filter: alpha(opacity=30); // older IE */ font-size: small; } div#proveit a img { border: 0; } div#proveit h1 { float: right; width: 50%; text-align: right; font-size: 11px; margin: 5px 5px 0 0; padding: 0; font-weight: normal; border: none; } div#proveit h1 a { /* color: #00254c; text-decoration: none; */ margin: 0 30px 0 0; padding: 0; } /* div#proveit h1 span { font-weight: bold; /* font-size: 14px; */ div#proveit h1 button.ui-button-icon-only { margin: 3px 5px 0 0; height: 25px; width: 25px; } div#proveit div#proveit-view-edit-panel, div#proveit div#proveit-add-panel { padding: 5px; } /*** BEGIN CSS FOR REFLIST ***/ div#proveit table { border-collapse: collapse; width: 100%; margin: 0; padding: 0; } div#proveit tr.light td { background-color: #fff; } div#proveit tr.dark td { background-color: #eeeeee; } div#proveit tr.invalid td { color: #ff0000; } div#proveit tr.selected td { background-color: #2682c7; } div#proveit tr:hover td { background-color: #fddc05; color: #000; } div#proveit tr.selected:hover td { background-color: #2682c7; } div#proveit td { padding: 5px 3px 3px 3px; vertical-align: top; } div#proveit td.number { font-size: 12px; color: #666; text-align: right; } div#proveit tr.selected td.number { color: #ccc; } /* td.author { padding-left: 0.5em; } td.year{ width: 50px; text-align: center; } */ /*div#proveit td.details {}*/ div#proveit td.type { width: 20px; background-repeat: no-repeat; background-position: 50% 5px; padding: 0 5px; } div#proveit td.title { /* width: 460px; */ font-size: 12px; color: #000; text-align: left; /* font-weight: bold; */ } div#proveit tr.selected td.title { color: #fff; } div#proveit td.edit {} div#proveit td.edit button { height: 20px; width: 20px; } div#proveit tr.selected td.edit button { visibility: hidden; } /* div#proveit td.ibid button { width: 20px; height: 20px; } */ div#proveit tr.selected div.expanded { display: block; } div#proveit div.expanded { font-size: x-small; padding: 5px 0; display: none; width: auto; } div#proveit div.expanded p { color: #ccc; } div#proveit div.expanded p span { color: #fff; } div#proveit div.expanded a:link, div#proveit div.expanded a:visited { color: #fff; text-decoration: underline; } div#proveit div.expanded a:hover { color: #fff; text-decoration: none; } div#proveit div.expanded span.all-citations a { margin: 0 0.5em; text-transform: uppercase; } div#proveit div.expanded button { margin-right: 1em; } /*** END CSS FOR REFLIST ***/ div#proveit div.inputs { border: 0; margin: 0; padding: 3px; } div#proveit div.inputs div.input-row, div#proveit div.inputs div.ref-name-row { display: block; margin: 0 0 0.8em 0; padding: 0; } /*div.inputs div.hidden{ display: none; }*/ div#proveit div.ref-name-row label { cursor: help; } div#proveit div.inputs label.paramdesc { display: block; font-size: 12px; text-transform: none; float: left; width: 200px; text-align: left; padding-top:5px; } div#proveit div.inputs input.paramdesc { /*display: block;*/ font-size: 12px; text-transform: none; /*float: left;*/ width: 180px; text-align: left; padding-right: 10px; } div#proveit div.inputs input.paramvalue { width: 480px; height: 18px; font-size: 12px; border: 1px solid #ccc; } div#proveit div.inputs select { width: auto; font-size: 12px; } div#proveit div.inputs button { font-size: 11px; } div#proveit div.input-row button.delete-field { height: 20px; width: 20px; margin-left: 5px; line-height: 0; } div#proveit div#add-buttons, div#proveit div#edit-buttons { margin-top: 5px; font-size: 11px; } div#proveit button.right-side { float: right; } div#proveit .pointers { width: 2em; overflow: scroll; } div#proveit div#edit-fields { color: #fff; background-color: #2682c7; } div#proveit .scroll { display: block; overflow: scroll; overflow-y: scroll; overflow-x: hidden; border: 1px solid #dddddd !important; } div#proveit .required { font-weight: bold; /*color: #FF0084;*/ /*color: #ff0000;*/ } /*** MISC STYLES ***/ div#proveit .notification { font-size: 10px; padding-left: 8px; display: none; } div#proveit .hidden { display: none; } div#proveit input { padding: 0px; } /* jqueryUI class modifications start here */ div#proveit a.tab-link { font-weight: bold; } div#proveit ul.ui-tabs-nav { position: static; } div#proveit button.ui-button-icon-only { margin: 0; padding: 0; height: 20px; width: 20px; font-size: 11px; vertical-align: top; } /* Template elements */ #proveit-templates { display: none; } ay0o6lo07hl7ddag6lmkfh4k37hxeqf MediaWiki:Gadget-Shortdesc-helper 8 24532 268773 2026-04-28T12:47:20Z Umarxon III 11129 Sahypa döretdi, mazmuny: '[[Wikipedia:Shortdesc helper|Gysga düşündiriş kömekçisi]]: sahypanyň [[Wikipedia:Gysga düşündiriş|gysga düşündirişlerini]] aňsatlyk bilen goşuň we redaktirlämek' 268773 wikitext text/x-wiki [[Wikipedia:Shortdesc helper|Gysga düşündiriş kömekçisi]]: sahypanyň [[Wikipedia:Gysga düşündiriş|gysga düşündirişlerini]] aňsatlyk bilen goşuň we redaktirlämek jlizzz3cb505w1fgo2hmcsfvvltxegw 268774 268773 2026-04-28T12:48:21Z Umarxon III 11129 268774 wikitext text/x-wiki [[WP:Gysga düşündiriş kömekçisi|Gysga düşündiriş kömekçisi]]: sahypanyň [[WP:Gysga düşündiriş|gysga düşündirişlerini]] aňsatlyk bilen goşuň we redaktirlämek gr9vm96p9lsr1ze4wyfoqdeyh3yzkbp MediaWiki:Gadget-Shortdesc-helper.js 8 24533 268775 2026-04-28T12:51:31Z Umarxon III 11129 Sahypa döretdi, mazmuny: '// <nowiki> /* _____________________________________________________________________________ * | | * | === WARNING: GLOBAL GADGET FILE === | * | Changes to this page affect many users. | * | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. | * |_____________________________________...' 268775 javascript text/javascript // <nowiki> /* _____________________________________________________________________________ * | | * | === WARNING: GLOBAL GADGET FILE === | * | Changes to this page affect many users. | * | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. | * |_____________________________________________________________________________| * */ /** * Shortdesc helper: v3.5.3 * Documentation at en.wikipedia.org/wiki/Wikipedia:Shortdesc_helper * The documentation includes instructions for using this gadget on other wikis. * Shows short descriptions, and allows importing wikidata descriptions, adding descriptions, * and easier editing of them by giving buttons and inputbox for doing so. * Forked from [[MediaWiki:Gadget-Page descriptions.js]] written by the TheDJ. */ 'use strict'; window.sdh = window.sdh || {}; /** * Set messages using mw.message. * window.sdh.messages can be used to override these messages (for e.g translations). */ window.sdh.initMessages = function () { /* These messages are used on all wikis and so need translation. */ var messages = { /** Uncomment the following to change messages used in settings dialog */ /* "libSettings-settings-title": "Settings", "libSettings-save-label": "Save settings", "libSettings-cancel-label": "Cancel", "libSettings-showDefaults-label": "Show defaults", "libSettings-showCurrentSettings-label": "Show current settings", "libSettings-save-success-message": "Settings for $1 successfully saved.", "libSettings-save-fail-message": "Could not save settings for $1.", */ /* Settings messages */ 'sdh-settingsDialog-title': 'Settings for Shortdesc helper', 'sdh-header-general': 'General', 'sdh-header-appearance': 'Appearance', 'sdh-AddToRedirect-label': 'Allow additions of short descriptions to redirects', 'sdh-AddToRedirect-help': 'When checked, redirects will have an "add" button to add a short description. (default off)', 'sdh-InputWidth-label': 'Width of editing input in characters (default 40)', 'sdh-FontSize-label': 'Font size, as a percentage (default 100%)', /* Initial view messages */ 'sdh-missing-description': 'Missing <a href="/wiki/Wikipedia:Short description">$1 description</a>', 'sdh-article-label': 'article', 'sdh-redirect-label': 'redirect', /* Initial view buttons */ 'sdh-add-label': 'Add', 'sdh-add-title': 'Add short description', 'sdh-edit-label': 'Edit', 'sdh-edit-title': 'Edit short description', /* Editing messages */ 'sdh-description-placeholder': 'Short description', 'sdh-summary-placeholder': 'Custom edit summary', 'sdh-save-label': 'Save', 'sdh-save-title': 'Save description', 'sdh-cancel-label': 'Cancel', 'sdh-cancel-title': 'Cancel editing', 'sdh-summary-label': 'Summary', 'sdh-summary-title': 'Show edit summary box', 'sdh-settings-title': 'Settings', /* Wikidata summary messages */ 'sdh-wd-summary': '([[w:en:Wikipedia:Shortdesc helper|Shortdesc helper]])', 'sdh-wd-edit-failed': 'Saving the edit to Wikidata failed.', 'sdh-wd-edit-failed-prefix': '\n\nThe info given by Wikidata is that:\n\n' }; /** * These messages don't need translation as they are only used on enwiki * because enwiki has the {{SHORTDESC:}} magic word. */ var enwikiMessages = { /* Settings messages */ 'sdh-MarkAsMinor-label': 'Mark edits as minor', 'sdh-header-Wikidata': 'Wikidata', 'sdh-SaveWikidata-label': 'Save changes to Wikidata', 'sdh-SaveWikidata-help': 'Whether to update the Wikidata description when using the script.', 'sdh-SaveWikidata-add-label': 'Only when no Wikidata description exists (default)', 'sdh-SaveWikidata-all-label': 'On all edits', 'sdh-SaveWikidata-never-label': 'Never', 'sdh-ShowWikidataOption-label': 'Show the Wikidata description', 'sdh-ShowWikidataOption-always-label': 'Always', 'sdh-ShowWikidataOption-nolocal-label': 'Only when no local description exists (default)', 'sdh-ShowWikidataOption-never-label': 'Never', 'sdh-ExportButton-label': 'Add a button, "export", to update the Wikidata description to match the local description.', /* Initial view messages */ 'sdh-wikidata-link-label': 'Wikidata', 'sdh-no-description': 'This page intentionally has no description.', /* Initial view buttons */ 'sdh-infoClicky-label': '?', 'sdh-infoClicky-title': 'Click for info', 'sdh-override-label': 'Override', 'sdh-override-title': 'Override current short description', 'sdh-import-label': 'Import', 'sdh-import-title': 'Import description from Wikidata', 'sdh-editimport-label': 'Edit and import', 'sdh-editimport-title': 'Edit and import description from Wikidata', 'sdh-export-label': 'Export', 'sdh-export-title': 'Export local short description to Wikidata', /* Popup text */ 'sdh-no-description-popup': 'This description is intentionally empty. See <a href = "/wiki/Wikipedia:Short_description#SDNONE">our policy page on (none) short descriptions</a> for more info.', 'sdh-override-popup': 'While this description can be overridden with another local short description, it cannot be directly edited. This is most likely because it is automatically generated by the article\'s infobox or some other template. See <a href = "/wiki/Wikipedia:WikiProject_Short_descriptions#Auto-generated_and_bot-generated_descriptions"> our policy on auto-generated and bot-generated descriptions</a> for more info.', 'sdh-disambig-popup': 'This short description should not be edited because it is automatically generated by the disambiguation template and does not need to be changed.', 'sdh-useless-popup': 'Importing of this description has been disabled as it is too generic to be useful.', /* Summary messages */ 'sdh-summary-changing': 'Changing [[Wikipedia:Short description|short description]] from $1 to $2', 'sdh-summary-adding-custom': 'Adding [[Wikipedia:Short description|short description]]: $2, overriding automatically generated description', 'sdh-summary-importing-wikidata': 'Importing Wikidata [[Wikipedia:Short description|short description]]: $2', 'sdh-summary-adding-local': 'Adding local [[Wikipedia:Short description|short description]]: $2, overriding Wikidata description $1', 'sdh-summary-adding': 'Adding [[Wikipedia:Short description|short description]]: $2', /* Summary none messages */ 'sdh-summary-changing-none': 'Changing [[Wikipedia:Short description|short description]] from $1 to one that is [[WP:SDNONE|intentionally blank]]', 'sdh-summary-adding-custom-none': 'Adding [[WP:SDNONE|intentionally blank]] description, instead of automatically generated description', 'sdh-summary-adding-local-none': 'Adding [[WP:SDNONE|intentionally blank]] description, overriding Wikidata description $1', 'sdh-summary-adding-none': 'Adding [[WP:SDNONE|intentionally blank]] description', /* Failure message */ 'sdh-edit-failed': 'Saving the addition of or edit to the short description failed.', 'sdh-edit-failed-no-template': 'Edit failed, as no short description template was found in the page wikitext. This is probably due to an edit conflict.' }; /** * Setting window.sdh.messages last means it overrides previous messages * Thus allowing translations to override previous messages. */ mw.messages.set( messages ); mw.messages.set( enwikiMessages ); mw.messages.set( window.sdh.messages ); }; window.sdh.main = function () { /** * What section the short description is in, to be determined later * by searching the DOM. Used so that if the short description is in the lead * only the wikitext of section 0 needs to be downloaded. * * @type {number} */ var section; // Consts /** * Selector to find the short description in the DOM. * * @type {string} */ var SDELEMENT = '.shortdescription'; /** * Selector to find disambiguation template. * * @type {string} */ var DISAMBIGELEMENT = '#disambigbox'; /** * Search pattern for finding short description in wikitext. * Group 1 in the regex is the short description. * * @type {RegExp} */ var PATTERN = /\{\{\s*[Ss]hort description\s*\|(.*?)\}\}/; /** * List of Wikidata descriptions that are not useful enough to be directly imported. * * @type {Array} */ var USELESS_DESCRIPTIONS = [ 'Wikimedia project page' ]; /** * Pattern for date spans, to replace hyphen with en dash. * * @type {RegExp} */ var DATEPATTERN = /(\d\d+)-(\d\d+)/; /** * Replace for date spans. * * @type {string} */ var DATEREPLACEMENT = '$1–$2'; // Config variables var title = mw.config.get( 'wgPageName' ); var namespace = mw.config.get( 'wgNamespaceNumber' ); var wgQid = mw.config.get( 'wgWikibaseItemId' ); var language = mw.config.get( 'wgContentLanguage' ); var canEdit = mw.config.get( 'wgIsProbablyEditable' ); var isRedirect = mw.config.get( 'wgIsRedirect' ); var DBName = mw.config.get( 'wgDBname' ); /** * onlyEditWikidata is a site-wide flag. * If it is true, then the only descriptions for the wiki are assumed to be on Wikidata. * If it is false, then that means descriptions can also be added through {{SHORTDESC:}} * (currently, this is only the case on enwiki). * This flag modifies the behaviour of various methods to display the appropriate buttons and * settings, and make the description saved to the right place. * * @type {boolean} */ var onlyEditWikidata = ( DBName !== 'enwiki' ); /** * Check if the user can edit the page, * and disallow editing of templates and categories to prevent accidental addition. * * @type {boolean} */ var allowEditing = ( ( canEdit && [ 10, 14, 710, 828, 2300, 2302 ].indexOf( namespace ) === -1 ) ); // Define user agent when accessing the API var APIoptions = { ajax: { headers: { 'Api-User-Agent': 'Short description editer/viewer gadget (w:en:Wikipedia:Shortdesc helper)' } } }; var API = new mw.Api( APIoptions ); var wikidataAPI = new mw.ForeignApi( 'https://www.wikidata.org/w/api.php', APIoptions ); /** * Get the wikitext of the page. * * @return {Promise} */ var getText = function () { return API.get( { action: 'query', prop: 'revisions', titles: title, rvprop: 'content', rvsection: section, rvslots: 'main', formatversion: 2 } ); }; /** * Download wikitext. Whether to download the whole wikitext, * or only the lead section wikitext is determined. * * @type {Promise} */ var callPromiseText = ( function () { var elements; if ( onlyEditWikidata ) { return; } /** * Find whether the short description is in the first section, to determine * if we need to download the wikitext of the entire page. * Do this by searching elements above the first heading for ".shortdescription" */ // eslint-disable-next-line no-jquery/no-global-selector, no-jquery/variable-pattern elements = $( '.mw-parser-output > h2' ).first().prevAll(); /** * Need to check sibling elements with filter and their children * with find to find short description. If length > 0 then found * short description before the first heading, so get wikitext of section 0. */ if ( elements.filter( SDELEMENT ).add( elements.find( SDELEMENT ) ).length > 0 ) { section = 0; } // Get the wikitext return getText(); }() ); /** * Get the local short description * * @type {Promise} */ var callPromiseDescription = API.get( { action: 'query', titles: title, prop: 'description', formatversion: 2 } ); /** * Load settings using libSettings if it exists * Otherwise gracefully fallback to defaults. */ var usinglibSettings = !!mw.libs.libSettings; var ls, optionsConfig, settings, options; if ( usinglibSettings ) { ls = mw.libs.libSettings; optionsConfig = new ls.OptionsConfig( [ new ls.Page( { title: mw.msg( 'sdh-header-general' ), preferences: [ new ls.CheckboxOption( { name: 'MarkAsMinor', label: mw.msg( 'sdh-MarkAsMinor-label' ), defaultValue: false, hide: onlyEditWikidata } ), new ls.CheckboxOption( { name: 'AddToRedirect', label: mw.msg( 'sdh-AddToRedirect-label' ), help: mw.msg( 'sdh-AddToRedirect-help' ), defaultValue: false } ), new ls.CheckboxOption( { name: 'ExportButton', label: mw.msg( 'sdh-ExportButton-label' ), defaultValue: false, hide: onlyEditWikidata } ), new ls.DropdownOption( { name: 'ShowWikidata', label: mw.msg( 'sdh-ShowWikidataOption-label' ), defaultValue: 'nolocal', values: [ { data: 'always', label: mw.msg( 'sdh-ShowWikidataOption-always-label' ) }, { data: 'nolocal', label: mw.msg( 'sdh-ShowWikidataOption-nolocal-label' ) }, { data: 'never', label: mw.msg( 'sdh-ShowWikidataOption-never-label' ) } ], hide: onlyEditWikidata } ), // Option for all disabled due to issues with people not using it properly new ls.DropdownOption( { name: 'SaveWikidata', label: mw.msg( 'sdh-SaveWikidata-label' ), help: mw.msg( 'sdh-SaveWikidata-help' ), defaultValue: 'add', values: [ { data: 'add', label: mw.msg( 'sdh-SaveWikidata-add-label' ) }, // { data: 'all', label: mw.msg( 'sdh-SaveWikidata-all-label' ) }, { data: 'never', label: mw.msg( 'sdh-SaveWikidata-never-label' ) } ], hide: onlyEditWikidata } ) ] } ), new ls.Page( { title: mw.msg( 'sdh-header-appearance' ), preferences: [ new ls.NumberOption( { name: 'InputWidth', label: mw.msg( 'sdh-InputWidth-label' ), defaultValue: 40, UIconfig: { min: 10, max: 999 } } ), new ls.NumberOption( { name: 'FontSize', label: mw.msg( 'sdh-FontSize-label' ), defaultValue: 100, UIconfig: { min: 10, max: 500 } } ) ] } ) ] ); settings = new mw.libs.libSettings.Settings( { title: mw.msg( 'sdh-settingsDialog-title' ), scriptName: 'Shortdesc-helper', helpInline: true, size: 'large', height: 350, optionsConfig: optionsConfig } ); options = settings.get(); } else { // Use defaults options = { MarkAsMinor: false, AddToRedirect: false, InputWidth: 40, FontSize: 100, ExportButton: false, SaveWikidata: 'add', ShowWikidata: 'nolocal' }; } /** * Get the Wikidata short description * * @type {Promise} */ var callPromiseWDDescription = ( options.ShowWikidata === 'never' || wgQid === null ) ? null : wikidataAPI.get( { action: 'wbgetentities', ids: wgQid, props: 'descriptions', formatversion: 2, languages: language } ); // Dynamic CSS based on options mw.util.addCSS( '#sdh { font-size:' + options.FontSize + '%}' + '#sdh-descriptionbox { width:' + ( options.InputWidth + 3 ) + 'ch };' // Do +3 since width includes char counter ); /* Main code to be run once both the local and Wikidata short description is gotten */ var onResponses = function ( response, responseWD ) { /** * These two variables are UI elements that need to be closed and reopened, * and so need to be accessed outside the scope of the functions * that define them. */ /** * Used in InfoClickyPopup * * @type {OO.ui.PopupWidget} */ var infoPopup; /** * Used in textInput * * @type {OO.ui.ActionFieldLayout} */ var actionField; /** * Used in textInput * * @type {OO.ui.TextInputWidget} */ var descriptionInput; /** * These three variables are defined by the button being clicked */ /** * The message to be used for the summary * * @type {string} */ var summaryMsg; /** * Is the action a change to an existing local description * or an addition, importation etc. * * @type {boolean} */ var change; /** * True when there is no description anywhere, and so * description should be added to Wikidata when options.SaveWikidata is 'add'. * * @type {boolean} */ var addWikidata; /** * Whether there should be text initially in the input box. * * @type {boolean} */ var emptyPreload = false; /** * Various HTML elements */ var $sdh = $( '<div>' ).prop( 'id', 'sdh' ); var $description = $( '<div>' ).addClass( 'sdh-showdescrip' ); var $clickies = $( '<span>' ).addClass( 'sdh-clickies' ); var pages = response[ 0 ].query.pages[ 0 ]; /** * Is the description from Wikidata (non local) or the {{SHORTDESC:}} magic word? * * @type {boolean} */ var isLocal = ( pages.descriptionsource === 'local' ); /** * The Wikidata descriptions. */ var wikidataDescriptions = responseWD ? responseWD[ 0 ].entities[ wgQid ].descriptions : {}; /** * The Wikidata description, if it exists. */ var wikidataDescription = Object.keys( wikidataDescriptions ).length !== 0 ? wikidataDescriptions[ language ].value : ''; /** * The page short description. * * @type {string} */ var pageDescription = ( isLocal ? pages.description : wikidataDescription ).trim(); /** * Whether this is a disambiguation/set index page or not, determined by searching the DOM. * If it is, then the option to override the short description will be disabled. * * @type {boolean} */ var disambigPage = $( DISAMBIGELEMENT ).length > 0; /** * Whether a Wikidata description is too generic to be useful. * * @type {boolean} */ var uselessDescription = !isLocal && USELESS_DESCRIPTIONS.indexOf( pageDescription ) !== -1; /** * Whether to append the Wikidata description * * @type {boolean} */ var appendWDDescription = options.ShowWikidata === 'always' && isLocal && wikidataDescription; /** * Creates "clickies", simple link buttons. * Things are made nice per https://stackoverflow.com/a/10510353 * Links are wrapped in spans to allow separators to be added using css * without becoming part of the link. * * @param {string} msgName * @param {Function} func * @return {Object} */ var Clicky = function ( msgName, func ) { return $( '<span>' ) .addClass( 'sdh-clicky' ) .append( $( '<a>' ) .attr( { title: mw.msg( msgName + '-title' ), role: 'button', tabindex: '0' } ) .text( mw.msg( msgName + '-label' ) ) .on( 'click', func ) .on( 'keydown', function ( e ) { if ( [ 13, 32 ].indexOf( event.which ) !== -1 ) { // Space and enter e.preventDefault(); return func(); } } ) ); }; /** * Create a Clicky that opens a OOui PopupWidget. * * @param {string} text * @return {Clicky} */ var InfoClickyPopup = function ( text ) { var self = this; self.text = text; self.infoClicky = new Clicky( 'sdh-infoClicky', function () { if ( !infoPopup ) { mw.loader.using( [ 'oojs-ui-core', 'oojs-ui-widgets' ] ).then( function () { infoPopup = new OO.ui.PopupWidget( { $content: $( '<span>' ).append( self.text ), $autoCloseIgnore: self.infoClicky, padded: true, autoClose: true, width: 300, position: 'after' } ); $clickies.append( infoPopup.$element ); infoPopup.toggle( true ); } ); } else { infoPopup.toggle( false ); } } ); return self.infoClicky; }; /** * Creates OOui buttons, which are used for save and cancel. * * @param {string} msgName * @param {Function} func * @param {Array<string>} flags * @param {string} icon * @return {OO.ui.ButtonWidget} */ var OOuiClicky = function ( msgName, func, flags, icon ) { return new OO.ui.ButtonWidget( { label: mw.msg( msgName + '-label' ), icon: icon, title: mw.msg( msgName + '-title' ), flags: flags, classes: [ 'sdh-ooui-clicky' ] } ).on( 'click', func ); }; /** * Function to check if the short description is in the wikitext. * If it is, return the wikitext and short description as defined in the text * * @param {Object} wikitextResult * @return {Array} */ var shortdescInText = function ( wikitextResult ) { var wikitext = wikitextResult.query.pages[ 0 ].revisions[ 0 ].slots.main.content; var match = wikitext && wikitext.match( PATTERN ); if ( match ) { return [ wikitext, match[ 1 ] ]; } else { return [ wikitext, false ]; } }; /** * Notify the user that the edit failed and log any debug info. * * @param {string} msgName * @param {*} debug * @param {string} extraMsg */ var editFailed = function ( msgName, debug, extraMsg ) { var message = mw.msg( msgName ) + extraMsg; mw.notify( message, { autoHide: false } ); if ( debug ) { mw.log.warn( debug ); } }; /** * Set the Wikidata description using the API. * * @param {string} newDescription * @param {string} summary Custom edit summary. * @return {Promise} */ var setWikidataDescription = function ( newDescription, summary ) { return mw.loader.using( 'mediawiki.ForeignApi' ).then( function () { return wikidataAPI.postWithToken( 'csrf', { action: 'wbsetdescription', id: wgQid, language: language, summary: ( summary || '' ) + mw.message( 'sdh-wd-summary', language ).plain(), value: newDescription } ); } ); }; /** * This function edits Wikidata descriptions and is used on wikis that aren't enwiki. * Beyond what setWikidataDescription does, it reloads the page on success * and gives an informative error notification. * * @param {string} newDescription * @param {string} summary Custom edit summary. */ var editWikidataDescription = function ( newDescription, summary ) { setWikidataDescription( newDescription, summary ).then( function () { window.location.reload(); }, function () { editFailed( 'sdh-wd-edit-failed', arguments, arguments[ 1 ].error.info ? ( mw.msg( 'sdh-wd-edit-failed-prefix' ) + arguments[ 1 ].error.info ) : '' ); } ); }; /** * This function adds or replaces short descriptions. * * @param {string} newDescription * @param {string} summary Custom edit summary. */ var editDescription = function ( newDescription, summary ) { var replacement, prependText, appendText, text, prependDescription; /** * Helper function to add quotes around text, * used when generating the summary. * * @param {string} textToQuote * @return {string} */ var quotify = function ( textToQuote ) { return '"' + textToQuote + '"'; }; /** * Appends, prepends, or replaces the wikitext. * depending on which of text, prependText, and appendText exists. */ var makeEdit = function () { API.postWithEditToken( { action: 'edit', section: section, text: text, title: title, prependtext: prependText, appendtext: appendText, summary: summary, nocreate: true, minor: options.MarkAsMinor, tags: 'shortdesc helper' } ).then( function () { // Reload the page window.location.reload(); }, function () { editFailed( 'sdh-edit-failed', arguments ); } ); }; /** * Replaces the current local short description with the new one. * If the short description doesn't exist in the text, return false. * * @param {string} wikitextResult Result of getText() * @return {boolean} Whether there was a description in the wikitext * and so whether makeEdit could be called. */ var replaceAndEdit = function ( wikitextResult ) { var output = shortdescInText( wikitextResult ); var oldtext = output[ 0 ]; var descriptionFromText = output[ 1 ]; if ( descriptionFromText ) { text = oldtext.replace( PATTERN, replacement ); makeEdit(); return true; } else { return false; } }; // Fix manual entry of "none" if ( newDescription.toLowerCase() === 'none' ) { newDescription = ''; } // Replace hyphens in dates with en dashes newDescription = newDescription.replace( DATEPATTERN, DATEREPLACEMENT ); // Make edits to Wikidata as appropiate if ( wgQid && ( options.SaveWikidata === 'add' && addWikidata ) && // options.SaveWikidata === 'all' newDescription !== '' ) { setWikidataDescription( newDescription ); } // Capitalize first letter by default unless editing local description if ( !isLocal ) { newDescription = ( newDescription.charAt( 0 ).toUpperCase() + newDescription.slice( 1 ) ); } if ( newDescription === '' ) { newDescription = 'none'; } // Use 1= if the description has an '=' if ( newDescription.indexOf( '=' ) !== -1 ) { prependDescription = '1='; } else { prependDescription = ''; } replacement = '{{Short description|' + prependDescription + newDescription + '}}'; // Link guideline if changing to none description summary = summary || mw.message( summaryMsg + ( newDescription === 'none' ? '-none' : '' ), quotify( pageDescription ), quotify( newDescription ) ).plain(); /** * change = true means there was a previous short description in the wikitext * that needs to be replaced. */ if ( change ) { /** * Get the wikitext again right before making the edit * to avoid issues with edit conflicts, and make the edit. */ getText().then( function ( result ) { if ( !replaceAndEdit( result ) ) { editFailed( 'sdh-edit-failed-no-template' ); } } ); } else { if ( isRedirect ) { appendText = '\n' + replacement; } else { prependText = replacement + '\n'; } makeEdit(); } }; /** * Creates input box with save and cancel buttons. * If input box was created before, show it again. * Otherwise, create the input box using OOui. */ var textInput = function () { if ( actionField ) { $description.addClass( 'sdh-showdescrip-hidden' ); actionField.toggle( true ); descriptionInput.focus(); } else { mw.loader.using( [ 'oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui.styles.icons-interactions' ] ).then( function () { var length, saveInput, buttons; // Define the input box, summary box, and buttons. descriptionInput = new OO.ui.TextInputWidget( { autocomplete: false, autofocus: true, id: [ 'sdh-descriptionbox' ], label: '0', value: emptyPreload ? '' : pageDescription, placeholder: mw.msg( 'sdh-description-placeholder' ) } ); var summaryInput = new OO.ui.TextInputWidget( { autocomplete: false, autofocus: true, id: [ 'sdh-summarybox' ], placeholder: mw.msg( 'sdh-summary-placeholder' ) } ); var saveButton = new OOuiClicky( 'sdh-save', function () { saveInput(); }, [ 'primary', 'progressive' ] ); var cancelButton = new OOuiClicky( 'sdh-cancel', function () { actionField.toggle( false ); $description.removeClass( 'sdh-showdescrip-hidden' ); }, [ 'safe', 'destructive' ] ); var summaryButton = new OOuiClicky( 'sdh-summary', function () { summaryInput.toggle(); }, [ 'safe' ] ); var settingsButton = new OO.ui.ButtonWidget( { icon: 'settings', framed: false, title: mw.msg( 'sdh-settings-title' ), flags: [ 'safe' ], classes: [ 'sdh-ooui-clicky' ] } ).on( 'click', function () { settings.display(); } ); /** * On change, update character count label. * If local description has not been modified, prevent */ var updateOnChange = function () { var description = descriptionInput.getValue().trim(); length = descriptionInput.getInputLength(); var classes = [ '' ]; if ( length > 40 ) { if ( length > 60 ) { classes = [ 'sdh-very-long' ]; } else { classes = [ 'sdh-too-long' ]; } } descriptionInput.setLabel( $( '<span>' ) .addClass( classes ) .text( String( length ) ) ); if ( isLocal && description === pageDescription ) { saveButton.setDisabled( true ); } else { saveButton.setDisabled( false ); } }; var items = [ saveButton, summaryButton, cancelButton ]; if ( usinglibSettings ) { items.push( settingsButton ); } buttons = new OO.ui.ButtonGroupWidget( { items: items } ); /** * This is bound to the save button. * Disables all the elements and calls the relevant function * responsible for saving the the entered short description. */ saveInput = function () { var description = descriptionInput.getValue().trim(); var summary = summaryInput.getValue().trim(); descriptionInput .setDisabled( true ) .pushPending( true ); summaryInput .setDisabled( true ) .pushPending( true ); items.forEach( function ( item ) { item.setDisabled( true ); } ); if ( onlyEditWikidata ) { editWikidataDescription( description, summary ); } else { editDescription( description, summary ); } }; actionField = new OO.ui.ActionFieldLayout( descriptionInput, buttons, { align: 'top', id: 'sdh-editbox' } ); summaryInput.toggle( false ); // Initial character count updateOnChange(); descriptionInput.on( 'change', updateOnChange ); descriptionInput.on( 'enter', saveInput ); summaryInput.on( 'enter', saveInput ); summaryInput.on( 'toggle', function ( visible ) { if ( visible ) { summaryInput.focus(); } else { descriptionInput.focus(); } } ); actionField.$element.append( summaryInput.$element ); // Hide previous displayed clickies and add to DOM $description.addClass( 'sdh-showdescrip-hidden' ); $sdh.append( actionField.$element ); descriptionInput.focus(); } ); } }; /** * Create the html and append it to the DOM * * @param {Object} textElement * @param {Array<Clicky>} clickyElements * @param {InfoClickyPopup} popupElement */ var updateSDH = function ( textElement, clickyElements, popupElement ) { if ( popupElement ) { clickyElements.push( popupElement ); } $description.append( textElement ); if ( clickyElements.length > 0 ) { $clickies.append( clickyElements ); $description.append( $clickies ); } $sdh.append( $description ); $sdh.addClass( 'noprint' ); var hideSDH = function () { $sdh.addClass( 'sdh-ve-hidden' ); }; var showSDH = function () { $sdh.removeClass( 'sdh-ve-hidden' ); }; $.ready.then( function () { // Undo padding used to fix content jump mw.util.addCSS( '.skin-vector.ns-0 #mw-content-subtitle::after {content: none;}' ); // Add the main div to the subtitle mw.util.addSubtitle( $sdh[0] ); mw.hook( 've.activationComplete' ).add( function () { hideSDH(); } ); mw.hook( 've.deactivationComplete' ).add( function () { showSDH(); } ); } ); }; /** * Disable all buttons and create processing (...) animation * Used by export and import buttons. */ var setProcessing = function () { var x; var $processing = $( '<div>' ) .addClass( 'sdh-processing' ); // Disable all clicky buttons $clickies .children( '.sdh-clicky' ) .addClass( 'sdh-clicky-disabled' ) .children( 'a' ) .off(); // Add processing ... animation $description.append( $processing ); for ( x = 0; x < 3; x++ ) { $processing.append( $( '<div>' ) .addClass( [ 'sdh-processing-dot', 'sdh-processing-dot-' + x ] ) .text( '.' ) ); } }; /** * Texts, clickies, and popups contain * elements that could make up the initial display. */ var texts = { noDescription: $( '<span>' ) .addClass( 'sdh-no-description' ) .text( mw.msg( 'sdh-no-description' ) ), missingDescription: $( '<span>' ) .addClass( 'sdh-missing-description' ) .html( mw.msg( 'sdh-missing-description', mw.msg( 'sdh-' + (isRedirect ? 'redirect' : 'article') + '-label' ) ) ), pageDescription: $( '<span>' ) .addClass( 'mw-page-description ' ) .text( pageDescription + ( appendWDDescription ? ( ' (Wikidata: ' + wikidataDescription + ')' ) : '' ) ) }; var clickies = { add: new Clicky( 'sdh-add', function () { summaryMsg = 'sdh-summary-adding'; addWikidata = true; // Description should be added to wikidata in this case textInput(); } ), addNone: new Clicky( 'sdh-add', function () { summaryMsg = 'sdh-summary-changing'; change = true; emptyPreload = true; textInput(); } ), addUseless: new Clicky( 'sdh-add', function () { summaryMsg = 'sdh-summary-adding-local'; emptyPreload = true; textInput(); } ), edit: new Clicky( 'sdh-edit', function () { summaryMsg = 'sdh-summary-changing'; change = true; textInput(); } ), editimport: new Clicky( 'sdh-editimport', function () { summaryMsg = 'sdh-summary-adding-local'; textInput(); } ), export: new Clicky( 'sdh-export', function () { setProcessing(); editWikidataDescription( pageDescription ); } ), import: new Clicky( 'sdh-import', function () { setProcessing(); summaryMsg = 'sdh-summary-importing-wikidata'; editDescription( pageDescription ); } ), override: new Clicky( 'sdh-override', function () { summaryMsg = 'sdh-summary-adding-custom'; textInput(); } ), wikidataLink: $( '<span>' ) .addClass( [ 'sdh-clicky', 'sdh-wikidata-description' ] ) .append( $( '<a>' ) .attr( 'href', 'https://www.wikidata.org/wiki/Special:SetLabelDescriptionAliases/' + wgQid + '/' + language ) .text( mw.msg( 'sdh-wikidata-link-label' ) ) ) }; var popups = { disambig: new InfoClickyPopup( mw.message( 'sdh-disambig-popup' ).plain() ), noDescription: new InfoClickyPopup( mw.message( 'sdh-no-description-popup' ).plain() ), override: new InfoClickyPopup( mw.message( 'sdh-override-popup' ).plain() ), useless: new InfoClickyPopup( mw.message( 'sdh-useless-popup' ).plain() ) }; /** * Depending on various factors, such as * whether the description exists, * whether the description is on wikidata or not, * and whether the page is in mainspace, * this code determines what elements should make up the initial display. * updateSDH() is then called to generate the html * and add that to the DOM. * * @param {Object} wikitextResult */ var determineElements = function ( wikitextResult ) { /** * The description as determined from the wikitext. * * @type {string} */ var descriptionFromText; /** * The short description or a message saying no description exists etc. * * @type {Object} */ var textElement; /** * What the relevant buttons ("clickies") are. * * @type {Array<Clicky>} */ var clickyElements = []; /** * What clickable popup explanation is there if any * * @type {InfoClickyPopup} */ var popupElement; /** * Whether the description is none * * @type {boolean} */ var isNone; // Whether to show "Missing article description" if applicable var showMissing = ( ( namespace === 0 || namespace === 118 ) && ( !isRedirect || options.AddToRedirect ) ); // If not enwiki, complete logic for non-enwiki case and exit. if ( onlyEditWikidata ) { if ( pageDescription ) { textElement = pageDescription; clickyElements.push( clickies.edit ); } else if ( showMissing ) { textElement = texts.missingDescription; clickyElements.push( clickies.add ); } updateSDH( textElement, clickyElements, popupElement ); return; } /** * Determine if the short description is in the wikitext * or if it is generated by an infobox. */ descriptionFromText = shortdescInText( wikitextResult )[ 1 ]; /** * Determine if the description is none. */ isNone = descriptionFromText && descriptionFromText.toLowerCase() === 'none'; // Show wikidata link at beginning if displaying non-local description. if ( pageDescription && !isLocal ) { clickyElements.push( clickies.wikidataLink ); } if ( isNone ) { // Handle {{Short description|none}} isLocal = true; textElement = texts.noDescription; clickyElements.push( clickies.addNone ); popupElement = popups.noDescription; } else { // Handle remaining cases if ( pageDescription ) { textElement = texts.pageDescription; if ( isLocal ) { if ( descriptionFromText ) { clickyElements.push( clickies.edit ); } else { if ( disambigPage ) { popupElement = popups.disambig; } else { clickyElements.push( clickies.override ); popupElement = popups.override; } } } else { if ( uselessDescription ) { popupElement = popups.useless; clickyElements.push( clickies.addUseless ); } else { clickyElements.push( clickies.import, clickies.editimport ); } } } else if ( showMissing ) { textElement = texts.missingDescription; clickyElements.push( clickies.add ); } } // Don't show clickies for editing if not allowing editing if ( !allowEditing ) { clickyElements = []; } if ( isLocal && !isNone && options.ExportButton ) { clickyElements.push( clickies.export ); } updateSDH( textElement, clickyElements, popupElement ); }; if ( callPromiseText ) { callPromiseText.then( function ( wikitextResult ) { determineElements( wikitextResult ); } ); } else { determineElements(); } }; $.when( callPromiseDescription, callPromiseWDDescription ).then( onResponses ); }; /* Load if viewing a page normally (not in diff view) */ if ( mw.config.get( 'wgIsArticle' ) && !mw.config.get( 'wgDiffOldId' ) && mw.config.get( 'wgArticleId' ) !== 0 ) { /** * Commented out due to issues reported at * [[Special:PermaLink/925885151#Doubled_short_descriptions_from_Template:Infobox_settlement]]. * Fire on postEdit hook to load after Visual Editor saves, * as VE does not actually reload the page. * Unfortunately, postEdit fires both after regular edits and VE edits, * so duplicate instances will be caused after a regular edit if run always * on postEdit. * window.sdh.hasRun is set to true below, and will be undefined after a proper reload, * but not after a dynamic VE reload. * FIXME: Post edit hook fires too early, meaning if an editor adds a short description using VE * it won't show the right description. * * mw.hook( 'postEdit' ).add( function () { * if ( window.sdh.hasRun ) { * window.sdh.main(); * } * } ); * * if ( !window.sdh.hasRun ) { // Don't run twice * window.sdh.hasRun = true; * window.sdh.initMessages(); * window.sdh.main(); * } */ window.sdh.initMessages(); window.sdh.main(); } // </nowiki> sl3btwptzcckzpblowt5t979kp7qskt MediaWiki:Gadget-Shortdesc-helper-pagestyles-vector.css 8 24534 268776 2026-04-28T12:52:26Z Umarxon III 11129 Sahypa döretdi, mazmuny: '/* This is its own file/gadget because a CSS-only gadget like this is page blocking, but CSS in a JavaScript gadget is loaded later. Doing it this way avoids a flash of unstyled content where the short description jumps around. */ /* Fix content jump */ .skin-vector.ns-0 #mw-content-subtitle::after { content: '\200B'; } .skin-vector.ns-0 .noarticletext { margin-top: -1.008em; /* 0.84 * 1.2em */ } /* Fix layout for deleted mainspace pages */ .skin-vector.ns-0...' 268776 css text/css /* This is its own file/gadget because a CSS-only gadget like this is page blocking, but CSS in a JavaScript gadget is loaded later. Doing it this way avoids a flash of unstyled content where the short description jumps around. */ /* Fix content jump */ .skin-vector.ns-0 #mw-content-subtitle::after { content: '\200B'; } .skin-vector.ns-0 .noarticletext { margin-top: -1.008em; /* 0.84 * 1.2em */ } /* Fix layout for deleted mainspace pages */ .skin-vector.ns-0:not(.skin-vector-2022) #contentSub2 { margin-top: -1.2em; } .skin-vector.ns-0 .mw-warning-with-logexcerpt { margin-bottom: 1.2em; } a0ny5pgcmp01m9qmqh63b6pin8d7t6o MediaWiki:Gadget-wikEd 8 24535 268777 2026-04-28T12:57:28Z Umarxon III 11129 Sahypa döretdi, mazmuny: '<sup><abbr title="{{int:gadgets-user}}">(U)</abbr></sup> [[en:User:Cacycle/wikEd|wikEd]]: [[Mozilla Firefox|Firefox]], [[Safari (web brauzeri)|Safari]] we [[Google Chrome]] üçin alternatiw doly funksiýaly integrasiýa edilen tekst redaktory ([[en:User:Cacycle/wikEd help|documentation]])' 268777 wikitext text/x-wiki <sup><abbr title="{{int:gadgets-user}}">(U)</abbr></sup> [[en:User:Cacycle/wikEd|wikEd]]: [[Mozilla Firefox|Firefox]], [[Safari (web brauzeri)|Safari]] we [[Google Chrome]] üçin alternatiw doly funksiýaly integrasiýa edilen tekst redaktory ([[en:User:Cacycle/wikEd help|documentation]]) ggdb6d60ecz2furtsaqvnw11t01yc8x MediaWiki:Gadget-afchelper 8 24536 268778 2026-04-28T13:45:58Z Umarxon III 11129 Sahypa döretdi, mazmuny: '[[Wikipedia:WikiProject Articles for creation/Helper script|AFC Helper Script]]: Makalalar döretmek üçin iberilen [[WP:AFC|taslamalarny]] aňsatlyk bilen gözden geçirmek' 268778 wikitext text/x-wiki [[Wikipedia:WikiProject Articles for creation/Helper script|AFC Helper Script]]: Makalalar döretmek üçin iberilen [[WP:AFC|taslamalarny]] aňsatlyk bilen gözden geçirmek cgjrl1o552ha67rlmx02zxw7ou9kqd4 MediaWiki:Gadget-afchelper.css 8 24537 268779 2026-04-28T13:47:57Z Umarxon III 11129 Sahypa döretdi, mazmuny: '/** * General styling for AFCH */ /* Nice colors */ /* General styles */ .hidden { display: none !important; } .centered { text-align: center; } .text-left { text-align: left; } .text-right { text-align: right; } .text-smaller { font-size: 0.7em; } .link:hover { cursor: pointer; text-decoration: underline; } /* Button styling */ div.gradient-button, .gradient-button { cursor: pointer; text-decoration: none; -webkit-user-select: none; user-...' 268779 css text/css /** * General styling for AFCH */ /* Nice colors */ /* General styles */ .hidden { display: none !important; } .centered { text-align: center; } .text-left { text-align: left; } .text-right { text-align: right; } .text-smaller { font-size: 0.7em; } .link:hover { cursor: pointer; text-decoration: underline; } /* Button styling */ div.gradient-button, .gradient-button { cursor: pointer; text-decoration: none; -webkit-user-select: none; user-select: none; transition: box-shadow 0.1s ease-in-out; } div.gradient-button:hover, .gradient-button:hover { text-decoration: none; background-image: linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1)); box-shadow: 0 1px rgba(0, 0, 0, 0.1), inset 0 -3px rgba(0, 0, 0, 0.2); } div.gradient-button:active, .gradient-button:active { color: #111111; background-image: linear-gradient(bottom, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1)); box-shadow: 0 1px rgba(0, 0, 0, 0.2); } div.gradient-button.disabled, .gradient-button.disabled { background-color: #DDDDDD; text-decoration: none; -webkit-user-select: none; user-select: none; cursor: not-allowed; } div.gradient-button.disabled:active, .gradient-button.disabled:active, div.gradient-button.disabled:hover, .gradient-button.disabled:hover { background-image: none; box-shadow: none; } /* Form styling */ .afch .afch-option, .afch-form .afch-option { display: block; padding: 5px; } .afch .afch-label, .afch-form .afch-label { padding: 5px; } .afch select .afch-input, .afch-form select .afch-input { vertical-align: baseline; } .afch .afch-textfield, .afch-form .afch-textfield { -webkit-appearance: none; border: 1px solid #DDDDDD; border-collapse: collapse; box-sizing: border-box; cursor: auto; display: inline-block; font-size: 14px; height: 30px; margin: 0px; padding-left: 5px; vertical-align: middle; width: 25%; min-width: 150px; } .afch .afch-textfield:focus, .afch-form .afch-textfield:focus { border: 1px solid #979797; outline: 0; } .afch .afch-textarea, .afch-form .afch-textarea { height: 150px; width: 50%; margin-top: 5px; margin-left: auto; margin-right: auto; } .afch label, .afch-form label, .afch input, .afch-form input { display: inline-block; } .afch label, .afch-form label { text-align: left; font-size: 0.8em; } .afch label + input[type=text], .afch-form label + input[type=text] { width: 30%; min-width: 250px; } .afch input + input, .afch-form input + input { float: right; } .afch-preferences label.afch-label { font-size: 1em; padding: 0; } .afch-preferences div + div { border-top: 1px dashed gray; padding: 8px 0; } .afch-preferences .details { padding-bottom: 10px; } .afch-preferences > div { margin: 5px; } .afch-preferences > div > label, .afch-preferences > div > [input="checkbox"] { display: inline; } /** * Styling for submissions.js */ /* Link that opens the review panel */ .afch-open { font-size: 0.5em; padding-left: 5px; line-height: 1em; cursor: pointer; } .afch { /* Reset base sizes, thanks typography refresh :P */ font-size: 13px; line-height: 19px; /* This mixin sets the color of the panel */ /* Constant UI elements */ /* MAIN (+SPLASH) */ /* ACCEPT */ /* DECLINE */ /* COMMENT */ /* TAG FOR G13 DELETION */ /* POSTPONE G13 */ /* SUBMIT */ /* MARK/UNMARK AS UNDER REVIEW */ /* OTHER */ } .afch .review-panel { border-width: 2px; border-style: solid; font-family: Helvetica, sans-serif; font-size: 1.2em; margin-bottom: 20px; } .afch .top-bar { position: relative; width: 100%; z-index: 999; } .afch .top-bar div { color: #FFFFFF; font-size: 1em; cursor: pointer; position: absolute; padding: 5px; } .afch .top-bar .back-link { font-size: 0.9em; text-transform: uppercase; } .afch .top-bar .close-link { right: 0; margin-top: -0.4em; font-size: 1.2em; } .afch .header { height: 60px; line-height: 1.2em; font-size: 60px; color: #FFFFFF; font-weight: bold; text-align: right; text-transform: uppercase; overflow: hidden; vertical-align: top; } .afch #afchEditConflict { display: none; color: red; } .afch #afchSubmitForm { text-align: center; width: 30%; padding: 5px; margin-top: 10px; margin-left: auto; margin-right: 0px; } .afch #afchSubmitForm.button-centered { margin-left: auto; margin-right: auto; } .afch #afchStatus { list-style-position: inside; text-align: left; } .afch .content { background-color: #FFFFFF; padding: 10px; } .afch .bad-input, .afch .bad-input:focus { border-width: medium; border-color: #FF4136; } .afch .initial, .afch .splash { background-color: #111111; border-color: #111111; } .afch .initial-header { font-size: 25px; color: #FFFFFF; text-align: center; margin: 10px; position: relative; } .afch .initial-header > span { display: block; font-size: 15px; padding-bottom: 4px; } .afch .warnings { text-align: center; background-color: #FF851B; margin: 0px 10px 10px; padding: 5px; } .afch .afch-warning { padding: 8px 0px; } .afch .afch-warning > a { padding-left: 5px; font-size: 0.8em; color: #111111; } .afch .afch-warning + .afch-warning { border-top: 1px solid black; } .afch .deletion-log { background-color: #FFFFFF; text-align: left; padding: 5px; margin: 10px 20px; border: 1px dashed black; max-height: 90px; overflow: auto; } .afch .deletion-log td { padding: 5px; } .afch .deletion-log .timestamp { color: #979797; text-align: right; white-space: nowrap; vertical-align: top; } .afch .deletion-log .reason { font-family: monospace, Courier; } .afch .deletion-log .actor { color: #979797; font-size: 0.75em; white-space: nowrap; } .afch div.code-wrapper > pre { padding: 0.1em; /* Wrap lines */ white-space: pre-wrap; word-wrap: break-word; } .afch .button-wrapper { width: 100%; display: table; table-layout: fixed; } .afch .afch-button { vertical-align: middle; line-height: 2em; font-family: arial, sans-serif; font-size: 1.5em; color: #111111; text-align: center; padding: 5px; display: table-cell; } .afch #afchDecline { font-size: 1.3em; } .afch .extra { background-color: #FFFFFF; height: 100%; width: 20px; vertical-align: top; } .afch .extra .wrapper { position: relative; } .afch .extra .wrapper .open { position: absolute; height: 100%; font-size: 1.5em; cursor: pointer; } .afch .extra .wrapper .open:hover { font-weight: bold; } .afch .extra .wrapper .links { text-align: left; padding-left: 26px; padding-top: 8px; } .afch .extra .wrapper .links a { display: none; line-height: 1em; font-size: 0.7em; color: #111111; } .afch .accept { background-color: #2ECC40; border-color: #2ECC40; /* Supplement jquery.chosen hackery; this is for the "manually add project" link. */ /* Since we are hacking this dynamic suggestion feature into jquery.chosen, we have to manually set the width of the input. (see "Offer dynamic category suggestions" in submissions.js) */ } .afch .accept .afch-label { margin-top: 12px; width: 20%; min-width: 150px; } .afch .accept select#lifeStatus.afch-input { vertical-align: middle; } .afch .accept #titleStatus { font-size: 0.75em; color: #FF4136; } .afch .accept #stubSorterContainer { display: inline-block; } .afch .accept #stub-sorter-save { display: none; } .afch .accept .chzn-container { margin-top: 10px; vertical-align: bottom; } .afch .accept #newWikiProjects_chzn a { cursor: pointer; } .afch .accept #newCategories_chzn input { width: 350px !important; } .afch .decline { background-color: #FF4136; border-color: #FF4136; } .afch .decline #declineInputWrapper { padding-top: 5px; } .afch .decline #declineInputPreview, .afch .decline #rejectInputPreview { text-align: left; } .afch .decline #previewTrigger { font-size: 80%; } .afch .decline #previewContainer { border: thin dotted gray; width: 50%; margin: 0.5em auto; text-align: left; padding: 0 0.5em; } .afch .decline #previewContainer:empty { display: none; } .afch .decline #declineRejectWrapper { font-size: 120%; padding: 0; border: 0; margin: 0 0 0.5em 0; } .afch .comment { background-color: #FFDC00; border-color: #FFDC00; } .afch #commentText { height: 100px; width: 60%; } .afch #commentPreview { text-align: left; } .afch .g13 { background-color: #FF851B; border-color: #FF851B; } .afch .postpone-g13 { background-color: #FFDC00; border-color: #FFDC00; } .afch .submit { background-color: #0074D9; border-color: #0074D9; } .afch .submit select { vertical-align: baseline; } .afch .submit .error { font-size: 0.8em; color: #FF4136; } .afch .mark { background-color: #0074D9; border-color: #0074D9; } .afch .other-action { background-color: #FFDC00; border-color: #FFDC00; } lv2dyhvfzregjgrqrehgbstanliu8nn MediaWiki:Gadget-charinsert 8 24538 268780 2026-04-28T13:55:16Z Umarxon III 11129 Sahypa döretdi, mazmuny: '<sup><abbr title="{{int:gadgets-default}}">(D)</abbr></sup> [[Help:CharInsert|CharInsert]]: wiki belliklerini we ýörite simwollary çalt goşmak üçin redaktirleme penjiresiniň aşagynda gurallar panelini goşmek ([[WP:VPT|troubles?]])' 268780 wikitext text/x-wiki <sup><abbr title="{{int:gadgets-default}}">(D)</abbr></sup> [[Help:CharInsert|CharInsert]]: wiki belliklerini we ýörite simwollary çalt goşmak üçin redaktirleme penjiresiniň aşagynda gurallar panelini goşmek ([[WP:VPT|troubles?]]) kxed7vk79i151pm75xnnj0graatk0j5 MediaWiki:Gadget-charinsert-core.js 8 24539 268781 2026-04-28T13:56:41Z Umarxon III 11129 Sahypa döretdi, mazmuny: '/** * <https://en.wikipedia.org/wiki/MediaWiki:Gadget-charinsert-core.js> * * Originally based on [[mw:User:Alex Smotrov/edittools.js]], modified for use on the English Wikipedia. * * Configuration (to be set from [[Special:MyPage/common.js]]): * window.charinsertCustom – Object. Merged into the default charinsert list. For example, setting * this to { Symbols: '‽' } will add the interrobang to the end of the Symbols section. * window.editTo...' 268781 javascript text/javascript /** * <https://en.wikipedia.org/wiki/MediaWiki:Gadget-charinsert-core.js> * * Originally based on [[mw:User:Alex Smotrov/edittools.js]], modified for use on the English Wikipedia. * * Configuration (to be set from [[Special:MyPage/common.js]]): * window.charinsertCustom – Object. Merged into the default charinsert list. For example, setting * this to { Symbols: '‽' } will add the interrobang to the end of the Symbols section. * window.editToolsRecall – Boolean. Set true to create a recall switch. * window.charinsertDontMove – Boolean. Set true to leave the box in its default position, rather * than moving it above the edit summary. * window.updateEditTools() – Function. Call after updating window.charinsertCustom to regenerate the * EditTools window. */ /* global $, mw, charinsertCustom */ window.updateEditTools = function () { }; $( function () { var $currentFocused, editTools; function getSelectedSection() { var selectedSection = mw.storage.get( editTools.storageKey ) || mw.storage.session.get( editTools.storageKey ); return selectedSection; } function saveSelectedSection( newIndex ) { mw.storage.set( editTools.storageKey, newIndex ) || mw.storage.session.set( editTools.storageKey, newIndex ); } editTools = { // Entries prefixed with ␥ (U+2425 SYMBOL FOR DELETE FORM TWO) will not appear in the article namespace (namespace 0). // Please make any changes to [[MediaWiki:Edittools]] as well, however, instead of using the ␥ symbol, use {{#ifeq:{{NAMESPACE}}|{{ns:0}}| | }}. charinsert: { 'Insert': ' – — ° ′ ″ ≈ ≠ ≤ ≥ ± − × ÷ ← → · § ␥Sign_your_posts_on_talk_pages: ␥~~\~~ Cite_your_sources: <ref>+</ref>', 'Wiki markup': 'Insert: – — ° ′ ″ ≈ ≠ ≤ ≥ ± − × ÷ ← → · § ␥~~\~~ <ref>+</ref> Wiki_markup: {\{+}} {\{\{+}}} | [+] [\[+]] [\[Category:+]] #REDIRECT.[\[+]] &nbsp; <s>+</s> <sup>+</sup> <sub>+</sub> <code>+</code> <pre>+</pre> <blockquote>+</blockquote> <ref.name="+"_/> {\{#tag:ref|+|group="nb"|name=""}} {\{Reflist}} <references./> <includeonly>+</includeonly> <noinclude>+</noinclude> {\{DEFAULTSORT:+}} <nowiki>+</nowiki> <!--.+_--> <span.class="plainlinks">+</span>', 'Symbols': '~ | ¡¿†‡↔↑↓•¶#∞ ‹+› «+» {\{angle.bracket|+}} ¤₳฿₵¢₡₢$₫₯€₠₣ƒ₴₭₤ℳ₥₦₧₰£៛₨₪৳₮₩¥ ♠♣♥♦ 𝄫♭♮♯𝄪 ¼½¾ © ◌ ☉☾☿♀🜨♂♃♄⛢♆', 'Latin': 'A a Á á À à  â Ä ä Ǎ ǎ Ă ă Ā ā à ã Å å Ą ą Æ æ Ǣ ǣ B b C c Ć ć Ċ ċ Ĉ ĉ Č č Ç ç D d Ď ď Đ đ Ḍ ḍ Ð ð E e É é È è Ė ė Ê ê Ë ë Ě ě Ĕ ĕ Ē ē Ẽ ẽ Ę ę Ẹ ẹ Ɛ ɛ Ǝ ǝ Ə ə F f G g Ġ ġ Ĝ ĝ Ğ ğ Ģ ģ H h Ĥ ĥ Ħ ħ Ḥ ḥ I i İ ı Í í Ì ì Î î Ï ï Ǐ ǐ Ĭ ĭ Ī ī Ĩ ĩ Į į Ị ị J j Ĵ ĵ K k Ķ ķ L l Ĺ ĺ Ŀ ŀ Ľ ľ Ļ ļ Ł ł Ḷ ḷ Ḹ ḹ M m Ṃ ṃ N n Ń ń Ň ň Ñ ñ Ņ ņ Ṇ ṇ Ŋ ŋ O o Ó ó Ò ò Ô ô Ö ö Ǒ ǒ Ŏ ŏ Ō ō Õ õ Ǫ ǫ Ọ ọ Ő ő Ø ø Œ œ Ɔ ɔ P p Q q R r Ŕ ŕ Ř ř Ŗ ŗ Ṛ ṛ Ṝ ṝ S s Ś ś Ŝ ŝ Š š Ş ş Ș ș Ṣ ṣ ß T t Ť ť Ţ ţ Ț ț Ṭ ṭ Þ þ U u Ú ú Ù ù Û û Ü ü Ǔ ǔ Ŭ ŭ Ū ū Ũ ũ Ů ů Ų ų Ụ ụ Ű ű Ǘ ǘ Ǜ ǜ Ǚ ǚ Ǖ ǖ V v W w Ŵ ŵ X x Y y Ý ý Ŷ ŷ Ÿ ÿ Ỹ ỹ Ȳ ȳ Z z Ź ź Ż ż Ž ž ß Ð ð Þ þ Ŋ ŋ Ə ə Ɂ ɂ Ꞌ ꞌ ʻ ʼ ʽ ꞉ ꞏ', 'Greek': 'ΆάΈέΉήΊίΌόΎύΏώ ΑαΒβΓγΔδ ΕεΖζΗηΘθ ΙιΚκΛλΜμ ΝνΞξΟοΠπ ΡρΣσςΤτΥυ ΦφΧχΨψΩω Ϝϝυ̯ι̯ ᾼᾳᾴᾺὰᾲᾶᾷἈἀᾈᾀἉἁᾉᾁἌἄᾌᾄἊἂᾊᾂἎἆᾎᾆἍἅᾍᾅἋἃᾋᾃἏἇᾏᾇ ῈὲἘἐἙἑἜἔἚἒἝἕἛἓ ῌῃῄῊὴῂῆῇἨἠᾘᾐἩἡᾙᾑἬἤᾜᾔἪἢᾚᾒἮἦᾞᾖἭἥᾝᾕἫἣᾛᾓἯἧᾟᾗ ῚὶῖἸἰἹἱἼἴἺἲἾἶἽἵἻἳἿἷΪϊΐῒῗ ῸὸὈὀὉὁὌὄὊὂὍὅὋὃ ῤῬῥ ῪὺῦὐὙὑὔὒὖὝὕὛὓὟὗΫϋΰῢῧ ῼῳῴῺὼῲῶῷὨὠᾨᾠὩὡᾩᾡὬὤᾬᾤὪὢᾪᾢὮὦᾮᾦὭὥᾭᾥὫὣᾫᾣὯὧᾯᾧ ᾹᾱᾸᾰῙῑῘῐῩῡῨῠ {{lang|el|+}} {{lang|grc|+}}', 'Cyrillic': 'АаБбВвГг ҐґЃѓДдЂђ ЕеЁёЄєЖж ЗзЅѕИиІі ЇїЙйЈјКк ЌќЛлЉљМм НнЊњОоПп РрСсТтЋћ УуЎўФфХх ЦцЧчЏџШш ЩщЪъЫыЬь ЭэЮюЯя ӘәӨөҒғҖҗ ҚқҜҝҢңҮү ҰұҲҳҸҹҺһ ҔҕӢӣӮӯҘҙ ҠҡҤҥҪҫӐӑ ӒӓӔӕӖӗӰӱ ӲӳӸӹӀ ҞҟҦҧҨҩҬҭ ҴҵҶҷҼҽҾҿ ӁӂӃӄӇӈӋӌ ӚӛӜӝӞӟӠӡ ӤӥӦӧӪӫӴӵ ́', 'Hebrew': 'אבגדהוזחטיכךלמםנןסעפףצץקרשת ׳ ״ װױײ', 'Arabic': ' Transliteration: ʾ ā ī ū ṯ ḥ ḫ ẖ ḏ š ṣ ḍ ṭ ẓ ʿ ġ ẗ á ا ﺁ ب ت ث ج ح خ د ذ ر ز س ش ص ض ط ظ ع غ ف ق ك ل م ن ه ة و ي ى ء أ إ ؤ ئ', 'IPA (English)': 'ˈ ˌ ŋ ɡ tʃ dʒ ʃ ʒ θ ð ʔ ɑː ɒ æ aɪ aʊ ɛ ɛər+ eɪ ɪ ɪər+ iː ɔː ɔɪ oʊ ʊ ʊər+ uː ʌ ɜːr+ ə ər ɒ̃ æ̃ {\{IPAc-en|+}} {\{IPA|+}} {\{angle.bracket|+}}', 'IPA': 'Consonants: ɱɳɲŋɴ : t̪ d̪ ʈɖɟɡɢʡʔ : ɸβθð ʃʒʂʐɕʑ çʝɣχʁ ħʕʜʢɦɧ : ʋɹɻɥɰʍ : ʙⱱɾɽʀ ɺ ɫɬɮɭʎʟ : ɓɗᶑʄɠʛ ʘǀǃǂǁ Vowels: ɪʏɨʉɯʊ : øɘɵɤ ə ɚ ɛœɜɝɞʌɔ : æɶɐɑɒ Spacing_diacritics: ˈˌːˑʼˀˤᵝᵊᶢˠʰʱʲˡⁿᵑʷᶣ˞‿˕˔ Combining_diacritics: ̚ ̪ ̺ ̻ ̼ ̬ ̊ ̥ ̞ ̝ ̘ ̙ ̽ ̟ ̠ ̈ ̤ ̹ ̜ ̍ ̩ ̆ ̯ ̃ ̰ ͡ ͜ Tone: ̋ ́ ̄ ̀ ̏ ̌ ̂ ᷄ ᷅ ᷇ ᷆ ᷈ ᷉ ˥˦˧˨˩ꜛꜜ : ↗↘‖ extIPA: ͈ ͉ ͎ ̣ ̫ ͊ ᷽ ͇ : ˭ᵻᵿ {\{angle.bracket|+}} {\{IPA|+}} {\{IPA.link|+}}', 'Math and logic': '− × ÷ ⋅ ° ∗ ∘ ± ∓ ≤ ≥ ≠ ≡ ≅ ≜ ≝ ≐ ≃ ≈ ⊕ ⊗ ⇐ ⇔ ⇒ ∞ ← ↔ → ≪ ≫ ∝ √ ∤ ≀ ◅ ▻ ⋉ ⋊ ⋈ ∴ ∵ ↦ ¬ ∧ ∨ ⊻ ∀ ∃ ∈ ∉ ∋ ⊆ ⊈ ⊊ ⊂ ⊄ ⊇ ⊉ ⊋ ⊃ ⊅ ∪ ∩ ∑ ∏ ∐ ′ ∫ ∬ ∭ ∮ ∇ ∂ ∆ ∅ ℂ ℍ ℕ ℙ ℚ ℝ ℤ ℵ ⌊ ⌋ ⌈ ⌉ ⊤ ⊥ ⊢ ⊣ ⊧ □ ∠ ⟨ ⟩ <math>+</math> {\{math|+}} {\{mvar|+}} {\{frac|+|}} {\{sfrac|+|}}' }, charinsertDivider: "\240", storageKey: 'edittoolscharsubset', createEditTools: function ( placeholder ) { var sel, id; var box = document.createElement( 'div' ); var prevSubset = 0, curSubset = 0; box.id = 'editpage-specialchars'; box.className = "nopopups"; box.title = 'Click on the character or tag to insert it into the edit window'; // append user-defined sets if ( window.charinsertCustom ) { for ( id in charinsertCustom ) { if ( !editTools.charinsert[id] ) { editTools.charinsert[id] = ''; } } } // create drop-down select sel = document.createElement( 'select' ); for ( id in editTools.charinsert ) { sel.options[sel.options.length] = new Option( id, id ); } sel.selectedIndex = 0; sel.style.marginRight = '.3em'; sel.title = 'Choose character subset'; sel.onchange = sel.onkeyup = selectSubset; box.appendChild( sel ); // create "recall" switch if ( window.editToolsRecall ) { var recall = document.createElement( 'span' ); recall.appendChild( document.createTextNode( '↕' ) ); // ↔ recall.onclick = function() { sel.selectedIndex = prevSubset; selectSubset(); }; recall.style.cssFloat = 'left'; recall.style.marginRight = '5px'; recall.style.cursor = 'pointer'; box.appendChild( recall ); } if ( getSelectedSection() ) { sel.selectedIndex = getSelectedSection(); } placeholder.parentNode.replaceChild( box, placeholder ); selectSubset(); return; function selectSubset() { // remember previous (for "recall" button) prevSubset = curSubset; curSubset = sel.selectedIndex; //save into web storage for persistence saveSelectedSection( curSubset ); //hide other subsets var pp = box.getElementsByTagName( 'p' ) ; for ( var i = 0; i < pp.length; i++ ) { pp[i].style.display = 'none'; } //show/create current subset var id = sel.options[curSubset].value; var p = document.getElementById( id ); if ( !p ) { p = document.createElement( 'p' ); p.className = 'nowraplinks'; p.id = id; if ( id == 'Arabic' || id == 'Hebrew' ) { p.style.fontSize = '120%'; p.dir = 'rtl'; } var tokens = editTools.charinsert[id]; if ( window.charinsertCustom && charinsertCustom[id] ) { if ( tokens.length > 0 ) { tokens += ' '; } tokens += charinsertCustom[id]; } editTools.createTokens( p, tokens ); box.appendChild( p ); } p.style.display = 'inline'; } }, createTokens: function ( paragraph, str ) { var tokens = str.split( ' ' ), token, i, n; for ( i = 0; i < tokens.length; i++ ) { token = tokens[i]; n = token.indexOf( '+' ); if ( token.charAt( 0 ) === '␥' ) { if ( token.length > 1 && mw.config.get( 'wgNamespaceNumber' ) === 0 ) { continue; } else { token = token.substring( 1 ); } } if ( token === '' || token === '_' ) { addText( editTools.charinsertDivider + ' ' ); } else if ( token === '\n' ) { paragraph.appendChild( document.createElement( 'br' ) ); } else if ( token === '___' ) { paragraph.appendChild( document.createElement( 'hr' ) ); } else if ( token.charAt( token.length-1 ) === ':' ) { // : at the end means just text addBold( token ); } else if ( n === 0 ) { // +<tag> -> <tag>+</tag> addLink( token.substring( 1 ), '</' + token.substring( 2 ), token.substring( 1 ) ); } else if ( n > 0 ) { // <tag>+</tag> addLink( token.substring( 0, n ), token.substring( n+1 ) ); } else { var chars = Array.from(token); if ( chars.length > 2 && token.charCodeAt( 0 ) > 127 ) { // a string of insertable characters for ( var j = 0; j < chars.length; j++ ) { addLink( chars[ j ], '' ); } } else { addLink( token, '' ); } } } return; function addLink( tagOpen, tagClose, name ) { var handler; var dle = tagOpen.indexOf( '\x10' ); var a = document.createElement( 'a' ); if ( dle > 0 ) { var path = tagOpen.substring( dle + 1 ).split( '.' ); tagOpen = tagOpen.substring( 0, dle ); handler = window; for ( var i = 0; i < path.length; i++ ) { handler = handler[path[i]]; } $( a ).on( 'click', handler ); } else { tagOpen = tagOpen.replace( /\./g,' ' ); tagClose = tagClose ? tagClose.replace( /_/g,' ' ) : ''; $( a ).on( 'click', { tagOpen: tagOpen, sampleText: '', tagClose: tagClose }, insertTags ); } name = name || tagOpen + tagClose; name = name.replace( /\\n/g,'' ); a.appendChild( document.createTextNode( name ) ); a.href = ''; paragraph.appendChild( a ); addText( ' ' ); } function addBold( text ) { var b = document.createElement( 'b' ); b.appendChild( document.createTextNode( text.replace( /_/g,' ' ) ) ); paragraph.appendChild( b ); addText( ' ' ); } function addText( txt ) { paragraph.appendChild( document.createTextNode( txt ) ); } function insertTags( e ) { e.preventDefault(); if ( $currentFocused && $currentFocused.length && !$currentFocused.prop( 'readonly' ) ) { $currentFocused.textSelection( 'encapsulateSelection', { pre: e.data.tagOpen, peri: e.data.sampleText, post: e.data.tagClose } ); } } }, setup: function () { var placeholder; if ( $( '#editpage-specialchars' ).length ) { placeholder = $( '#editpage-specialchars' )[0]; } else { placeholder = $( '<div id="editpage-specialchars"> </div>' ).prependTo( '.mw-editTools' )[0]; } if ( !placeholder ) { return; } if ( !window.charinsertDontMove ) { $( '.editOptions' ).before( placeholder ); } // Find the element that is focused $currentFocused = $( '#wpTextbox1' ); // Apply to dynamically created textboxes as well as normal ones $( document ).on( 'focus', 'textarea, input:text, .CodeMirror', function () { if ( $( this ).is( '.CodeMirror' ) ) { // CodeMirror hooks into #wpTextbox1 for textSelection changes $currentFocused = $( '#wpTextbox1' ); } else { $currentFocused = $( this ); } } ); // Used to determine where to insert tags editTools.createEditTools( placeholder ); window.updateEditTools = function () { editTools.createEditTools( $( '#editpage-specialchars' )[0] ); }; } }; // end editTools editTools.setup(); } ); 7ik9xga5j2pifgle9bhu70spew0ystq MediaWiki:Gadget-charinsert-styles.css 8 24540 268782 2026-04-28T13:58:01Z Umarxon III 11129 Sahypa döretdi, mazmuny: '/* _____________________________________________________________________________ * | | * | === WARNING: GLOBAL GADGET FILE === | * | Changes to this page affect many users. | * | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. | * |_________________________________________________...' 268782 css text/css /* _____________________________________________________________________________ * | | * | === WARNING: GLOBAL GADGET FILE === | * | Changes to this page affect many users. | * | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. | * |_____________________________________________________________________________| * */ /* Overwrites selector from MediaWiki:Common.css */ div#editpage-specialchars { display: block; border: 1px solid var( --border-color-base, #a2a9b1 ); padding: .5em 1em; } #editpage-specialchars a { background-color: var( --background-color-interactive-subtle, #f8f9fa ); color: var( --color-progressive, #36c ); border: 1px solid var( --border-color-interactive, #72777d ); padding: 1px 4px; } textarea#wpTextbox1 + #editpage-specialchars, .wikiEditor-ui-clear + #editpage-specialchars { border-top: 0; } qyd3rw16ijjqrifoew5xtp699xbzpi4 MediaWiki:Gadget-legacyToolbar 8 24541 268783 2026-04-28T14:37:52Z Umarxon III 11129 Sahypa döretdi, mazmuny: '[[Wikipedia:Legacy_toolbar|Mirasaly (2006) redaktirleme gurallar paneli]]. Bu Redaktirleme goýmasyndaky "Redaktirleme gurallar panelini işjeňleşdiriň" opsiýasy tarapyndan ýatyrylar' 268783 wikitext text/x-wiki [[Wikipedia:Legacy_toolbar|Mirasaly (2006) redaktirleme gurallar paneli]]. Bu Redaktirleme goýmasyndaky "Redaktirleme gurallar panelini işjeňleşdiriň" opsiýasy tarapyndan ýatyrylar ojvot97570dgoopbwk8rf8slituoq27 MediaWiki:Gadget-legacyToolbar.js 8 24542 268784 2026-04-28T14:42:18Z Umarxon III 11129 Sahypa döretdi, mazmuny: '/* _____________________________________________________________________________ * | | * | === WARNING: GLOBAL GADGET FILE === | * | Changes to this page affect many users. | * | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. | * |_________________________________________________...' 268784 javascript text/javascript /* _____________________________________________________________________________ * | | * | === WARNING: GLOBAL GADGET FILE === | * | Changes to this page affect many users. | * | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. | * |_____________________________________________________________________________| * * Adapted from MediaWiki Core, before it was removed from it on 2018-10-17. * Imported from frwiki at https://fr.wikipedia.org/wiki/MediaWiki:Gadget-mediawiki.toolbar.js, with translations and button additions. * * Interface for the classic edit toolbar. */ ( function () { var toolbar, isReady, $toolbar, queue, slice, $currentFocused; /** * Internal helper that does the actual insertion of the button into the toolbar. * * For backwards-compatibility, passing `imageFile`, `speedTip`, `tagOpen`, `tagClose`, * `sampleText` and `imageId` as separate arguments (in this order) is also supported. * * @private * * @param {Object} button Object with the following properties. * You are required to provide *either* the `onClick` parameter, or the three parameters * `tagOpen`, `tagClose` and `sampleText`, but not both (they're mutually exclusive). * @param {string} [button.imageFile] Image to use for the button. * @param {string} button.speedTip Tooltip displayed when user mouses over the button. * @param {Function} [button.onClick] Function to be executed when the button is clicked. * @param {string} [button.tagOpen] * @param {string} [button.tagClose] * @param {string} [button.sampleText] Alternative to `onClick`. `tagOpen`, `tagClose` and * `sampleText` together provide the markup that should be inserted into page text at * current cursor position. * @param {string} [button.imageId] `id` attribute of the button HTML element. Can be * used to define the image with CSS if it's not provided as `imageFile`. * @param {string} [speedTip] * @param {string} [tagOpen] * @param {string} [tagClose] * @param {string} [sampleText] * @param {string} [imageId] */ function insertButton( button, speedTip, tagOpen, tagClose, sampleText, imageId ) { var $button; // Backwards compatibility if ( typeof button !== 'object' ) { button = { imageFile: button, speedTip: speedTip, tagOpen: tagOpen, tagClose: tagClose, sampleText: sampleText, imageId: imageId }; } if ( button.imageFile ) { $button = $( '<img>' ).attr( { src: button.imageFile, alt: button.speedTip, title: button.speedTip, id: button.imageId || undefined, 'class': 'mw-toolbar-editbutton' } ); } else { $button = $( '<div>' ).attr( { title: button.speedTip, id: button.imageId || undefined, 'class': 'mw-toolbar-editbutton' } ); } $button.click( function ( e ) { if ( button.onClick !== undefined ) { button.onClick( e ); } else { toolbar.insertTags( button.tagOpen, button.tagClose, button.sampleText ); } return false; } ); $toolbar.append( $button ); } isReady = false; $toolbar = false; /** * @private * @property {Array} * Contains button objects (and for backwards compatibility, it can * also contains an arguments array for insertButton). */ queue = []; slice = queue.slice; toolbar = { /** * Add buttons to the toolbar. * * Takes care of race conditions and time-based dependencies by placing buttons in a queue if * this method is called before the toolbar is created. * * For backwards-compatibility, passing `imageFile`, `speedTip`, `tagOpen`, `tagClose`, * `sampleText` and `imageId` as separate arguments (in this order) is also supported. * * @inheritdoc #insertButton */ addButton: function () { if ( isReady ) { insertButton.apply( toolbar, arguments ); } else { // Convert arguments list to array queue.push( slice.call( arguments ) ); } }, /** * Add multiple buttons to the toolbar (see also #addButton). * * Example usage: * * addButtons( [ { .. }, { .. }, { .. } ] ); * addButtons( { .. }, { .. } ); * * @param {...Object|Array} [buttons] An array of button objects or the first * button object in a list of variadic arguments. */ addButtons: function ( buttons ) { if ( !Array.isArray( buttons ) ) { buttons = slice.call( arguments ); } if ( isReady ) { buttons.forEach( function ( button ) { insertButton( button ); } ); } else { // Push each button into the queue queue.push.apply( queue, buttons ); } }, /** * Apply tagOpen/tagClose to selection in currently focused textarea. * * Uses `sampleText` if selection is empty. * * @param {string} tagOpen * @param {string} tagClose * @param {string} sampleText */ insertTags: function ( tagOpen, tagClose, sampleText ) { if ( $currentFocused && $currentFocused.length ) { $currentFocused.textSelection( 'encapsulateSelection', { pre: tagOpen, peri: sampleText, post: tagClose } ); } } }; // For backwards compatibility. Used to be called from EditPage.php, maybe other places as well. toolbar.init = $.noop; // Expose API publicly mw.toolbar = toolbar; $( function () { var $textBox, i, button; // Used to determine where to insert tags $currentFocused = $( '#wpTextbox1' ); // Populate the selector cache for $toolbar $toolbar = $( '#toolbar' ); if ( $toolbar.length === 0 ) { $textBox = $( '#wpTextbox1' ); if ( $textBox.length === 0 ) { return; } $toolbar = $( '<div>' ).attr( { id: 'toolbar' } ); $toolbar.insertBefore( $textBox ); } for ( i = 0; i < queue.length; i++ ) { button = queue[ i ]; if ( Array.isArray( button ) ) { // Forwarded arguments array from mw.toolbar.addButton insertButton.apply( toolbar, button ); } else { // Raw object from mw.toolbar.addButtons insertButton( button ); } } // Clear queue queue.length = 0; // This causes further calls to addButton to go to insertion directly // instead of to the queue. // It is important that this is after the one and only loop through // the queue isReady = true; mw.hook("mw.toolbar").fire(); // Apply to dynamically created textboxes as well as normal ones $( document ).on( 'focus', 'textarea, input:text', function () { $currentFocused = $( this ); } ); } ); }() ); mw.toolbar.addButton( { imageFile: "//upload.wikimedia.org/wikipedia/commons/e/e2/Button_bold.png", speedTip: "Bold text", tagOpen: "'''", tagClose: "'''", sampleText: "bold text", imageId: "mw-editbutton-bold" } ); mw.toolbar.addButton( { imageFile: "//upload.wikimedia.org/wikipedia/commons/1/1d/Button_italic.png", speedTip: "Italic text", tagOpen: "''", tagClose: "''", sampleText: "italic text", imageId: "mw-editbutton-italic" } ); mw.toolbar.addButton( { imageFile: "//upload.wikimedia.org/wikipedia/commons/c/c0/Button_link.png", speedTip: "Internal link", tagOpen: "[[", tagClose: "]]", sampleText: "page title", imageId: "mw-editbutton-link" } ); mw.toolbar.addButton( { imageFile: "//upload.wikimedia.org/wikipedia/commons/e/ec/Button_extlink.png", speedTip: "External link", tagOpen: "[", tagClose: "]", sampleText: "http://www.example.com link title", imageId: "mw-editbutton-extlink" } ); mw.toolbar.addButton( { imageFile: "//upload.wikimedia.org/wikipedia/commons/7/78/Button_head_A2.png", speedTip: "Level 2 header", tagOpen: "== ", tagClose: " ==", sampleText: "header name", imageId: "mw-editbutton-headline" } ); mw.toolbar.addButton( { imageFile: "//upload.wikimedia.org/wikipedia/commons/d/de/Button_image.png", speedTip: "Image", tagOpen: "[[File:", tagClose: "|thumb|Image description.]]", sampleText: "Example.jpg", imageId: "mw-editbutton-image" } ); mw.toolbar.addButton( { imageFile: "//upload.wikimedia.org/wikipedia/commons/1/19/Button_media.png", speedTip: "Media", tagOpen: "[[File:", tagClose: "|thumb|Media description.]]", sampleText: "Example.ogg", imageId: "mw-editbutton-media" } ); mw.toolbar.addButton( { imageFile: "//upload.wikimedia.org/wikipedia/commons/8/82/Nowiki_icon.png", speedTip: "Nowiki tags", tagOpen: "<nowiki"+">", tagClose: "</"+"nowiki>", sampleText: "", imageId: "mw-editbutton-nowiki" } ); mw.toolbar.addButton( { imageFile: "//upload.wikimedia.org/wikipedia/commons/6/6d/Button_sig.png", speedTip: "Signature and date", tagOpen: "-- ~~"+"~~", tagClose: "", sampleText: "", imageId: "mw-editbutton-signature" } ); mw.toolbar.addButton( { imageFile: "//upload.wikimedia.org/wikipedia/commons/0/0d/Button_hr.png", speedTip: "Horizontal line", tagOpen: "--"+"--", tagClose: "", sampleText: "", imageId: "mw-editbutton-hr" } ); szc9q5hz9tdr2xwm2zv0jps1g3n70ty MediaWiki:Gadget-extra-toolbar-buttons 8 24543 268785 2026-04-28T14:49:01Z Umarxon III 11129 Sahypa döretdi, mazmuny: '<sup><abbr title="{{int:gadgets-default}}">(D)</abbr></sup> Legacy (2006) redaktirleme gurallar paneline goşmaça düwmeleri goşmek' 268785 wikitext text/x-wiki <sup><abbr title="{{int:gadgets-default}}">(D)</abbr></sup> Legacy (2006) redaktirleme gurallar paneline goşmaça düwmeleri goşmek pctp82s0de8iy22rzgafyof3kmj5sy6 MediaWiki:Gadget-extra-toolbar-buttons-core 8 24544 268787 2026-04-28T14:51:04Z Umarxon III 11129 Sahypa döretdi, mazmuny: 'Köne (güýçlendirilmedik) redaktirleme gurallar paneline goşmaça düwmeleri goşmek' 268787 wikitext text/x-wiki Köne (güýçlendirilmedik) redaktirleme gurallar paneline goşmaça düwmeleri goşmek h70fnc2pb96hxgups8m77paff7m9had MediaWiki:Gadget-refToolbar 8 24545 268788 2026-04-28T14:54:08Z Umarxon III 11129 Sahypa döretdi, mazmuny: '<sup><abbr title="{{int:gadgets-default}}">(D)</abbr></sup> [[Wikipedia:RefToolbar|]refToolbar]: göp ulanylýan sitirleme şablonlaryny çalt goşmak üçin redaktirleme gurallar paneline "sitirleme" düwmesini goşuň' 268788 wikitext text/x-wiki <sup><abbr title="{{int:gadgets-default}}">(D)</abbr></sup> [[Wikipedia:RefToolbar|]refToolbar]: göp ulanylýan sitirleme şablonlaryny çalt goşmak üçin redaktirleme gurallar paneline "sitirleme" düwmesini goşuň puz4y6ghvzeuk1kpo18a5jhy4geduxd 268789 268788 2026-04-28T14:54:20Z Umarxon III 11129 268789 wikitext text/x-wiki <sup><abbr title="{{int:gadgets-default}}">(D)</abbr></sup> [[Wikipedia:RefToolbar|refToolbar]]: göp ulanylýan sitirleme şablonlaryny çalt goşmak üçin redaktirleme gurallar paneline "sitirleme" düwmesini goşuň aegn3lo7auva4y7h8n0fs5jcrepqgr1 MediaWiki:Gadget-refToolbar.js 8 24546 268790 2026-04-28T14:56:05Z Umarxon III 11129 Sahypa döretdi, mazmuny: '/** * RefToolbar * * Adds tools for citing references to the edit toolbar. * See [[Wikipedia:RefToolbar]] for further documentation. One of two * possible versions will load (Reftoolbar 1.0 or Reftoolbar 2.0) * depending on the user preferences (the usebetatoolbar preference). * * @see: [[Wikipedia:RefToolbar]] * @see: [[MediaWiki:RefToolbar.js]] * @see: [[MediaWiki:RefToolbarConfig.js]] * @see: [[MediaWiki:RefToolbarLegacy.js]] * @see: [[MediaWiki:Re...' 268790 javascript text/javascript /** * RefToolbar * * Adds tools for citing references to the edit toolbar. * See [[Wikipedia:RefToolbar]] for further documentation. One of two * possible versions will load (Reftoolbar 1.0 or Reftoolbar 2.0) * depending on the user preferences (the usebetatoolbar preference). * * @see: [[Wikipedia:RefToolbar]] * @see: [[MediaWiki:RefToolbar.js]] * @see: [[MediaWiki:RefToolbarConfig.js]] * @see: [[MediaWiki:RefToolbarLegacy.js]] * @see: [[MediaWiki:RefToolbarMessages-en.js]] * @see: [[MediaWiki:Gadget-refToolbarBase.js]] * @author: [[User:Mr.Z-man]] * @author: [[User:Kaldari]] */ /* jshint browser: true, camelcase: true, curly: true, eqeqeq: true */ /* global $, mw */ (function () { 'use strict'; function initializeRefTools() { // 2010 wikitext editor mw.hook('wikiEditor.toolbarReady').add(() => { // TODO: // * Explicitly declare global variables from [[MediaWiki:RefToolbar.js]] using window.* // * Move [[MediaWiki:RefToolbar.js]] to [[MediaWiki:Gadget-refToolbarDialogs.js]] // * Create the module 'ext.gadget.refToolbarDialogs' depending on 'ext.gadget.refToolbarBase' // * Replace the code below by mw.loader.load( 'ext.gadget.refToolbarDialogs' ); mw.loader.using('ext.gadget.refToolbarBase', () => { mw.loader.load('/w/index.php?title=MediaWiki:RefToolbar.js&action=raw&ctype=text/javascript'); }); window.refToolbarInstalled = true; }); // 2006 legacy toolbar mw.hook('mw.toolbar').add(() => { mw.loader.load('/w/index.php?title=MediaWiki:RefToolbarLegacy.js&action=raw&ctype=text/javascript'); window.refToolbarInstalled = true; }); } if (/^(edit|submit)$/.test(mw.config.get('wgAction')) && mw.config.get('wgPageContentModel') === 'wikitext' && !$('#wpTextbox1[readonly]').length && !window.refToolbarInstalled ) { $(initializeRefTools); } }()); sbkusj4ba3d63f6t2rkl2tmfiqijmhl MediaWiki:Gadget-refToolbarBase.js 8 24547 268791 2026-04-28T14:56:39Z Umarxon III 11129 Sahypa döretdi, mazmuny: '/* jshint asi: true */ /* global mw, $, CiteTB, citeTemplate, citeErrorCheck */ if (window.CiteTB === undefined) { window.CiteTB = { "Templates": {}, // All templates "Options": {}, // Global options "UserOptions": {}, // User options "DefaultOptions": {}, // Script defaults "ErrorChecks": {} // Error check functions }; } // Object for cite templates window.citeTemplate = function (templatename, shortform, basicfields, expandedfields) { // Properti...' 268791 javascript text/javascript /* jshint asi: true */ /* global mw, $, CiteTB, citeTemplate, citeErrorCheck */ if (window.CiteTB === undefined) { window.CiteTB = { "Templates": {}, // All templates "Options": {}, // Global options "UserOptions": {}, // User options "DefaultOptions": {}, // Script defaults "ErrorChecks": {} // Error check functions }; } // Object for cite templates window.citeTemplate = function (templatename, shortform, basicfields, expandedfields) { // Properties this.templatename = templatename; // The template name - "cite web", "cite book", etc. this.shortform = shortform; // A short form, used for the dropdown box this.basic = basicfields; // Basic fields - author, title, publisher... // Less common - quote, archiveurl - should be everything the template supports minus the basic ones this.extra = expandedfields; this.incrementables = {}; // Add it to the list CiteTB.Templates[this.templatename] = this; // Methods this.makeFormInner = function (fields, incrsetup) { var i = 0; var trs = []; var autofills = [] for (i = 0; i < fields.length; i++) { var fieldobj = fields[i]; var field = labelfield = fieldobj.field; var ad = false; if (incrsetup && fieldobj.increment_group) { field = fieldobj.field.replace('<N>', '1'); labelfield = fieldobj.field.replace('<N>', ''); if (this.incrementables[fieldobj.increment_group] && !this.incrementables[fieldobj.increment_group].setup) { // The object has been created, but not fully initialized this.incrementables[fieldobj.increment_group]['fields'].push(fieldobj) } else if (!this.incrementables[fieldobj.increment_group]) { // Object not yet created this.incrementables[fieldobj.increment_group] = { 'fields': [fieldobj], 'val': 1, 'setup': false }; } else if (this.incrementables[fieldobj.increment_group] && this.incrementables[fieldobj.increment_group].setup) { // Fully initialized from a previous invocation of this function, just resetting the number this.incrementables[fieldobj.increment_group].val = 1 } } else if (fieldobj.increment_group) { // Adding a new row incrval = this.incrementables[fieldobj.increment_group].val; field = fieldobj.field.replace('<N>', incrval.toString()); labelfield = fieldobj.field.replace('<N>', ''); } if ($.inArray(field, CiteTB.getOption('autodate fields')) != -1) { im = $('<img />').attr('src', '//upload.wikimedia.org/wikipedia/commons/thumb/7/7b/Nuvola_apps_date.svg/20px-Nuvola_apps_date.svg.png'); im.attr('alt', mw.messages.get('cite-insert-date')).attr('title', mw.messages.get('cite-insert-date')); var ad = $('<a />').attr('href', '#'); ad.append(im); ad.attr('id', 'cite-date-' + CiteTB.escStr(this.shortform) + '-' + field); $(document).on('click', '#cite-date-' + CiteTB.escStr(this.shortform) + '-' + field, CiteTB.fillAccessdate); } if (fieldobj.autofillid) { var autotype = fieldobj.autofillid; im = $('<img />').attr('src', '//upload.wikimedia.org/wikipedia/commons/thumb/1/17/System-search.svg/20px-System-search.svg.png'); im.attr('alt', mw.messages.get('cite-autofill-alt')).attr('title', mw.messages.get('cite-autofill-alt')); var ad = $('<a />').attr('href', '#'); ad.append(im); ad.attr('id', 'cite-auto-' + CiteTB.escStr(this.shortform) + '-' + field + '-' + autotype); autofills.push('#cite-auto-' + CiteTB.escStr(this.shortform) + '-' + field + '-' + autotype); } if (fieldobj.increment_button) { var incrtype = fieldobj.increment_group; im = $('<img />').attr('src', '//upload.wikimedia.org/wikipedia/commons/thumb/b/b9/Nuvola_action_edit_add.svg/20px-Nuvola_action_edit_add.svg.png'); im.attr('alt', mw.messages.get('cite-increment-alt')).attr('title', mw.messages.get('cite-increment-alt')); var ad = $('<a />').attr('href', '#'); ad.append(im); ad.attr('id', 'cite-incr-' + CiteTB.escStr(this.shortform) + '-' + incrtype); } var display = mw.messages.get('cite-' + labelfield + '-label'); if (typeof display !== 'string') { if (fieldobj.label) { display = CiteTB.fixStr(fieldobj.label); } else { display = CiteTB.fixStr(labelfield) } } var tooltip = fieldobj.tooltip ? $('<abbr />').attr('title', mw.messages.get(fieldobj.tooltip)).html('<sup>?</sup>') : false; var input = ''; if (ad) { input = $('<input tabindex="1" style="width:85%" type="text" />'); } else { input = $('<input tabindex="1" style="width:100%" type="text" />'); } input.attr('id', 'cite-' + CiteTB.escStr(this.shortform) + '-' + field); if (fieldobj.autofillprop) { classname = 'cite-' + CiteTB.escStr(this.shortform) + '-' + fieldobj.autofillprop if (fieldobj.increment_group) { input.addClass('cite-' + CiteTB.escStr(this.shortform) + '-incr-' + fieldobj.increment_group); classname += '-' + this.incrementables[fieldobj.increment_group].val.toString(); } input.addClass(classname); } var label = $('<label />'); label.attr('for', 'cite-' + CiteTB.escStr(this.shortform) + '-' + field).text(display); if (tooltip) { label.append(tooltip); } var style = 'text-align:right; width:20%;'; if (i % 2 == 1) { style += ' padding-left:1em;'; } else { var tr = $('<tr />'); } var td1 = $('<td class="cite-form-td" />').attr('style', style); td1.append(label); tr.append(td1); var td2 = $('<td class="cite-form-td" style="width:30%" />'); td2.append(input); if (ad) { td2.append(ad); } tr.append(td2); if (i % 2 == 0) { trs.push(tr); } } var needsetup = false; for (g in this.incrementables) { if (!this.incrementables[g].setup) { needsetup = true; $(document).on('click', '#cite-incr-' + CiteTB.escStr(this.shortform) + '-' + g, CiteTB.incrementFields); this.incrementables[g].setup = true; } } if (needsetup || $.isEmptyObject(this.incrementables)) { for (i = 0; i < autofills.length; i++) { $(document).on('click', autofills[i], CiteTB.initAutofill); } } return trs; } // gives a little bit of HTML so the open form can be identified this.getInitial = function () { var hidden = '<input type="hidden" class="cite-template" value="' + this.templatename + '"/>'; return hidden; } // makes the form used in the dialog boxes this.getForm = function () { var main = $("<div class='cite-form-container' />"); var form1 = $('<table style="width:100%; background-color:transparent;" class="cite-basic-fields" />'); var i = 0; var trs = this.makeFormInner(this.basic, true); for (var i = 0; i < trs.length; i++) { form1.append(trs[i]); } var form2 = $('<table style="width:100%; background-color:transparent; display:none" class="cite-extra-fields">'); trs = this.makeFormInner(this.extra, true); for (var i = 0; i < trs.length; i++) { form2.append(trs[i]); } main.append(form1).append(form2); var form3 = $('<table style="width:100%; background-color:transparent;padding-top:1em" class="cite-other-fields">'); var tr = $('<tr />'); var td1 = $('<td class="cite-form-td" style="text-align:right; width:20%" />'); var label1 = $('<label />'); label1.attr('for', "cite-" + CiteTB.escStr(this.shortform) + '-name').text(mw.messages.get('cite-name-label')); td1.append(label1); var td2 = $('<td class="cite-form-td" style="width:30%" />'); var input1 = $('<input tabindex="1" style="width:100%" type="text" />'); input1.attr('id', 'cite-' + CiteTB.escStr(this.shortform) + '-name'); td2.append(input1); var td3 = $('<td class="cite-form-td" style="text-align:right; padding-left:1em; width:20%">'); var label2 = $('<label />'); label2.attr('for', 'cite-' + CiteTB.escStr(this.shortform) + '-group').text(mw.messages.get('cite-group-label')); td3.append(label2); var td4 = $('<td class="cite-form-td" style="width:30%" />'); var input2 = $('<input tabindex="1" style="width:100%" type="text" />'); input2.attr('id', 'cite-' + CiteTB.escStr(this.shortform) + '-group'); td4.append(input2); tr.append(td1).append(td2).append(td3).append(td4); form3.append(tr); main.append(form3); var extras = $('<div />'); extras.append('<input type="hidden" class="cite-form-status" value="closed" />'); var hidden = $('<input type="hidden" class="cite-template" />'); hidden.val(this.templatename); extras.append(hidden); var span1 = $('<span class="cite-preview-label" style="display:none;" />'); span1.text(mw.messages.get('cite-raw-preview')); extras.append(span1).append('<div class="cite-ref-preview" style="padding:0.5em; font-size:110%" />'); var span2 = $('<span class="cite-prev-parsed-label" style="display:none;" />'); span2.text(mw.messages.get('cite-parsed-label')); extras.append(span2).append('<div class="cite-preview-parsed" style="padding-bottom:0.5em; font-size:110%" />'); var link = $('<a href="#" class="cite-prev-parse" style="margin:0 1em 0 1em; display:none; color:darkblue" />'); link.text(mw.messages.get('cite-form-parse')); extras.append(link); main.append(extras); return main; } } /* Class for error checks FIXME: DOCS OUT OF DATE type - type of error check - current options: * 'refcheck' - apply a function on each ref individually * function should accept a ref object, return a string * 'reflist' - apply a function on the entire ref list * function should accept an array of ref objects, return an array of strings * 'search' - apply a function ro the page text * function should accept the page text as a string, return an array of strings The strings returned by the function should be valid HTML func - The function described above testname - Name of the error check, must not contain spaces desc - A short description of the test */ window.citeErrorCheck = function (obj) { this.obj = obj CiteTB.ErrorChecks[this.obj.testname] = this; this.run = function () { var errors = []; switch (this.obj['type']) { case "refcheck": CiteTB.loadRefs(); for (var i = 0; i < CiteTB.mainRefList.length; i++) { var e = this.obj.func(CiteTB.mainRefList[i]); if (e) { errors.push(e); } } break; case "reflist": CiteTB.loadRefs(); errors = this.obj.func(CiteTB.mainRefList); break; case "search": var func = this.obj.func CiteTB.getPageText(function (text) { errors = func(text); }); break; } return errors; } this.getRow = function () { var row = $("<li />"); var check = $("<input type='checkbox' name='cite-err-test' />"); check.attr('value', this.obj.testname); var label = $("<label />").html(mw.messages.get(this.obj.desc)); label.attr('for', this.obj.testname); row.append(check).append(' &ndash; ').append(label); return row; } } $('head').trigger('reftoolbarbase'); 11d2yrmlst431874qp85iuji54ruc6w MediaWiki:Gadget-edittop 8 24548 268792 2026-04-28T14:58:53Z Umarxon III 11129 Sahypa döretdi, mazmuny: 'Sahypanyň [[Wikipediýa:Baş bölümi|lead bölümi]] üçin [edit] baglanyşygyny goşuň' 268792 wikitext text/x-wiki Sahypanyň [[Wikipediýa:Baş bölümi|lead bölümi]] üçin [edit] baglanyşygyny goşuň lglcuu19m42nnw7uiqd7hlaj0nqsez3 268793 268792 2026-04-28T14:59:13Z Umarxon III 11129 268793 wikitext text/x-wiki Sahypanyň [[Wikipediýa:Baş bölümi|baş bölümi]] üçin [edit] baglanyşygyny goşuň f7653us1qnu0djd1pt6ymkt87xkh3k4 MediaWiki:Gadget-edittop.js 8 24549 268794 2026-04-28T14:59:45Z Umarxon III 11129 Sahypa döretdi, mazmuny: '// ********************************************************************** // ** ***WARNING GLOBAL GADGET FILE*** ** // ** changes to this file affect many users. ** // ** please discuss on the talk page before editing ** // ** ** // ********************************************************************** // Imported from [[User...' 268794 javascript text/javascript // ********************************************************************** // ** ***WARNING GLOBAL GADGET FILE*** ** // ** changes to this file affect many users. ** // ** please discuss on the talk page before editing ** // ** ** // ********************************************************************** // Imported from [[User:Alex Smotrov/edittop.js]], version as of: 2007-06-19T04:28:52 // Updated from [[User:TheDJ/Gadget-edittop.js]], version as of: 2009-04-28T11:54:22 if ( [ 'view', 'purge' ].indexOf( mw.config.get( 'wgAction' ) ) !== -1 && mw.config.get( 'wgNamespaceNumber' ) >= 0 && !mw.config.get( 'wgMFMode' ) ) { $( function edittopHook() { var localtitles = { bg: 'Редактиране на началото', bn: 'সূচনা অনুচ্ছেদ সম্পাদনা করুন', cs: 'Editovat úvodní sekci', en: 'Edit lead section', fa: 'ویرایش بخش آغازین', fr: 'Modifier le résumé introductif', id: 'Sunting bagian atas', it: 'Modifica della sezione iniziale', ja: '導入部を編集', kk: 'Кіріспе бөлімді өңдеу', min: 'Suntiang bagian ateh', ko: '도입부를 편집', pa: 'ਸੋਧ', pt: 'Editar a seção superior', 'pt-br': 'Editar a seção superior', sr: 'Уреди уводни део', th: 'แก้ไขย่อหน้าแรกสุด', vi: 'Sửa phần mở đầu' }; var $content = $( '#content, #mw_content' ).first(); var $span1 = $content.find( 'span.mw-editsection:not(.plainlinks)' ).first(); if ( !$span1.length ) { return; } var $span0 = $span1.clone(); $span0.removeClass( 'cdx-button--size-large' ); $( '#mw_header h1, #content h1' ).first().append( $span0 ); $span0.find( 'a' ).each( function () { var $a = $( this ), href; $a.attr( 'title', localtitles[ mw.config.get( 'wgUserLanguage' ) ] || localtitles.en ); href = $a.attr( 'href' ) || '#'; if ( !/&(ve|)section=T/.test( $a.attr( 'href' ) ) ) { // not transcluded $a.attr( 'href', href.replace( /&(ve|)section=\d+/, '&$1section=0&summary=/*%20top%20*/%20' ) ); } else if ( /&vesection=/.test( $a.attr( 'href' ) ) ) { // transcluded, VE $a.attr( 'href', mw.util.getUrl( mw.config.get( 'wgPageName' ) ) + '?veaction=edit&vesection=0&summary=/*%20top%20*/%20' ); } else { // transcluded, not VE $a.attr( 'href', mw.util.getUrl( mw.config.get( 'wgPageName' ) ) + '?action=edit&section=0&summary=/*%20top%20*/%20' ); } } ); } ); } 72miasaati0agd94n0cnqkubb26cc4r MediaWiki:Gadget-edittop.css 8 24550 268795 2026-04-28T15:00:25Z Umarxon III 11129 Sahypa döretdi, mazmuny: '/* @noflip */ body.ltr h1.firstHeading .mw-editsection-bracket:first-of-type, body.rtl h1.firstHeading .mw-editsection-bracket:not(:first-of-type) { margin-right: 0.25em; color: #555; } /* @noflip */ body.rtl h1.firstHeading .mw-editsection-bracket:first-of-type, body.ltr h1.firstHeading .mw-editsection-bracket:not(:first-of-type) { margin-left: 0.25em; color: #555; } /* For desktop Minerva skin T190989 */ .page-heading .mw-editsection a { display: inline-...' 268795 css text/css /* @noflip */ body.ltr h1.firstHeading .mw-editsection-bracket:first-of-type, body.rtl h1.firstHeading .mw-editsection-bracket:not(:first-of-type) { margin-right: 0.25em; color: #555; } /* @noflip */ body.rtl h1.firstHeading .mw-editsection-bracket:first-of-type, body.ltr h1.firstHeading .mw-editsection-bracket:not(:first-of-type) { margin-left: 0.25em; color: #555; } /* For desktop Minerva skin T190989 */ .page-heading .mw-editsection a { display: inline-block; font-size: 1rem; vertical-align: middle; } s6xz9vcff6oucdq5n3kmfns3pk7m0s5 MediaWiki:Gadget-UTCLiveClock 8 24551 268796 2026-04-28T15:04:24Z Umarxon III 11129 Sahypa döretdi, mazmuny: '<sup><abbr title="{{int:gadgets-sister}}">(S)</abbr></sup> Şahsy gurallar paneline häzirki wagty [[UTC]]-de görkezýän we häzirki sahypa [[Help:Arassalamak|arassalamak]] üçin baglanyşyk berýän sagat goşmek ([[mw:MediaWiki talk:Gadget-UTCLiveClock.js|documentation]])' 268796 wikitext text/x-wiki <sup><abbr title="{{int:gadgets-sister}}">(S)</abbr></sup> Şahsy gurallar paneline häzirki wagty [[UTC]]-de görkezýän we häzirki sahypa [[Help:Arassalamak|arassalamak]] üçin baglanyşyk berýän sagat goşmek ([[mw:MediaWiki talk:Gadget-UTCLiveClock.js|documentation]]) gppiefksolnt9yygv0cyxs6ocoumfx3 MediaWiki:Gadget-UTCLiveClock.css 8 24552 268797 2026-04-28T15:04:59Z Umarxon III 11129 Sahypa döretdi, mazmuny: '/** * Explicitly set width of the UTC-clock list element, so that we can use a * hidden peer gadget to add space where the clock would go before it loads. */ .skin-vector #utcdate { width: 6em; /* * The default margin-left is 0.75em, but set it again here explicitly, so * we can be sure of the exact width. */ margin-left: 0.75em; } .skin-monobook #utcdate { width: 6.279em; display: inline-block; /* We need this for the width property to work */...' 268797 css text/css /** * Explicitly set width of the UTC-clock list element, so that we can use a * hidden peer gadget to add space where the clock would go before it loads. */ .skin-vector #utcdate { width: 6em; /* * The default margin-left is 0.75em, but set it again here explicitly, so * we can be sure of the exact width. */ margin-left: 0.75em; } .skin-monobook #utcdate { width: 6.279em; display: inline-block; /* We need this for the width property to work */ /* * The default margin-left is 1em, but set it again here explicitly, so * we can be sure of the exact width. */ margin-left: 1em; } /* Do not clip the seconds in the date */ .skin-vector-2022 #utcdate a { width: 100%; } 2nxlb3tmp6tu1gjr926cwu9krkw4vd0 MediaWiki:Gadget-purgetab 8 24553 268798 2026-04-28T15:07:18Z Umarxon III 11129 Sahypa döretdi, mazmuny: 'Sahypanyň ýokarsyna "Arassalamak" opsiýasyny goşmak, bu bolsa sahypanyň keşini [[Help:Arassalamak|arassalaýar]]' 268798 wikitext text/x-wiki Sahypanyň ýokarsyna "Arassalamak" opsiýasyny goşmak, bu bolsa sahypanyň keşini [[Help:Arassalamak|arassalaýar]] 3guvkewqsjuy4227awwq20yv8go5dvh MediaWiki:Gadget-purgetab.js 8 24554 268799 2026-04-28T15:08:22Z Umarxon III 11129 Sahypa döretdi, mazmuny: '/** * Add "Purge" content action link. * * Dependencies: mediawiki.util, mediawiki.api * * @source https://www.mediawiki.org/wiki/Snippets/Purge_action */ $( function () { if ( $( '#ca-purge' ).length || !mw.config.get( 'wgIsArticle' ) ) return; var node = mw.util.addPortletLink( 'p-cactions', mw.util.getUrl( null, { action: 'purge' } ), mw.config.get( 'skin' ) === 'vector' || mw.config.get( 'skin' ) === 'vector-2022' ? 'Purge' : '*', 'ca-purge',...' 268799 javascript text/javascript /** * Add "Purge" content action link. * * Dependencies: mediawiki.util, mediawiki.api * * @source https://www.mediawiki.org/wiki/Snippets/Purge_action */ $( function () { if ( $( '#ca-purge' ).length || !mw.config.get( 'wgIsArticle' ) ) return; var node = mw.util.addPortletLink( 'p-cactions', mw.util.getUrl( null, { action: 'purge' } ), mw.config.get( 'skin' ) === 'vector' || mw.config.get( 'skin' ) === 'vector-2022' ? 'Purge' : '*', 'ca-purge', 'Purge the server cache of this page', '*' ); $(node).on( 'click', function (e) { new mw.Api().post( { action: 'purge', titles: mw.config.get( 'wgPageName' ) } ).then(function () { location.reload(); }, function () { mw.notify( 'Purge failed', { type: 'error' } ); }); e.preventDefault(); }); }); nh2he2vdb8yv2ghzwnyagn106as59fl MediaWiki:Gadget-ExternalSearch 8 24555 268800 2026-04-28T15:09:53Z Umarxon III 11129 Sahypa döretdi, mazmuny: 'Wikipediýanyň gözleg sahypasyna daşarky gözleg motorlaryny ulanmaga mümkinçilik berýän saýlaýjy goşmek' 268800 wikitext text/x-wiki Wikipediýanyň gözleg sahypasyna daşarky gözleg motorlaryny ulanmaga mümkinçilik berýän saýlaýjy goşmek 5xd4yxa4mm23vp1brqzredmsffa2tnd MediaWiki:Gadget-externalsearch.js 8 24556 268801 2026-04-28T15:10:47Z Umarxon III 11129 Sahypa döretdi, mazmuny: '/** Change Special:Search to use a drop-down menu ******************************************************* * * Description: Change Special:Search to use a drop-down menu, with the default being * the internal MediaWiki engine * Created by: [[User:Gracenotes]] */ function SpecialSearchEnhanced() { var createOption = function(site, action, mainQ, addQ, addV) { var opt = document.createElement('option'); opt.appendChild(...' 268801 javascript text/javascript /** Change Special:Search to use a drop-down menu ******************************************************* * * Description: Change Special:Search to use a drop-down menu, with the default being * the internal MediaWiki engine * Created by: [[User:Gracenotes]] */ function SpecialSearchEnhanced() { var createOption = function(site, action, mainQ, addQ, addV) { var opt = document.createElement('option'); opt.appendChild(document.createTextNode(site)); window.searchEngines.push([action, mainQ, addQ, addV]); return opt; } if (document.forms.powersearch) var searchForm = document.forms.powersearch; if (document.forms.search) var searchForm = document.forms.search; if (searchForm.lsearchbox) { var searchBox = searchForm.lsearchbox; } else { var searchBox = searchForm.search; } var selectBox = document.createElement('select'); selectBox.id = 'searchEngine'; searchForm.onsubmit = function() { var optSelected = window.searchEngines[document.getElementById('searchEngine').selectedIndex]; searchForm.action = optSelected[0]; searchBox.name = optSelected[1]; searchForm.title.value = optSelected[3]; searchForm.title.name = optSelected[2]; } selectBox.appendChild(createOption('English Wikipedia', mw.config.get( 'wgScript' ), 'search', 'title', 'Special:Search')); selectBox.appendChild(createOption('Google', 'https://www.google.com/search', 'q', 'sitesearch', 'en.wikipedia.org')); selectBox.appendChild(createOption('Yahoo', 'https://search.yahoo.com/search', 'p', 'vs', 'en.wikipedia.org')); selectBox.appendChild(createOption('Bing', 'https://www.bing.com/search', 'q', 'q1', 'site:https://en.wikipedia.org')); selectBox.appendChild(createOption('Wikiwix', 'https://www.wikiwix.com/', 'action', 'lang', 'en')); selectBox.appendChild(createOption('Exalead', 'https://www.exalead.com/wikipedia/results', 'q', 'language', 'en')); searchBox.style.marginLeft = '0px'; if (document.getElementById('loadStatus')) { var lStat = document.getElementById('loadStatus'); } else { var lStat = searchForm.title; if( typeof lStat === 'object' && typeof lStat.length === 'number' ) lStat = lStat[0]; } lStat.parentNode.insertBefore(selectBox, lStat); } window.searchEngines = []; // Script is specific to Special:Search if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Search'){ $(SpecialSearchEnhanced); } cgzsaae886v2vpmblaz4g5iq1cceezk MediaWiki:Gadget-CollapsibleNav 8 24557 268802 2026-04-28T15:35:49Z Umarxon III 11129 Sahypa döretdi, mazmuny: 'Nawigasiýa menýularynyň ýygnalmagyna rugsat bermek' 268802 wikitext text/x-wiki Nawigasiýa menýularynyň ýygnalmagyna rugsat bermek 9766m74lued9bt10gog6boj5epymmpp MediaWiki:Gadget-CollapsibleNav.js 8 24558 268803 2026-04-28T15:37:13Z Umarxon III 11129 Sahypa döretdi, mazmuny: '/** * Collapsible navigation for Vector * @maintainer Nardog */ // CC0 'use strict'; function onToggle( e ) { var collapsedIds = mw.storage.getObject( 'vector-nav-collapsed' ) || [], index = collapsedIds.indexOf( this.id ); if ( e.type === 'afterExpand' ) { // Remove ID from array if ( index !== -1 ) { collapsedIds.splice( index, 1 ); } if ( collapsedIds.length ) { mw.storage.setObject( 'vector-nav-collapsed', collapsedIds ); } else {...' 268803 javascript text/javascript /** * Collapsible navigation for Vector * @maintainer Nardog */ // CC0 'use strict'; function onToggle( e ) { var collapsedIds = mw.storage.getObject( 'vector-nav-collapsed' ) || [], index = collapsedIds.indexOf( this.id ); if ( e.type === 'afterExpand' ) { // Remove ID from array if ( index !== -1 ) { collapsedIds.splice( index, 1 ); } if ( collapsedIds.length ) { mw.storage.setObject( 'vector-nav-collapsed', collapsedIds ); } else { // Remove the data altogether if empty mw.storage.remove( 'vector-nav-collapsed' ); } } else { if ( index === -1 ) { collapsedIds.push( this.id ); mw.storage.setObject( 'vector-nav-collapsed', collapsedIds ); } } } $( function () { var collapsedIds = mw.storage.getObject( 'vector-nav-collapsed' ) || []; $( '#mw-panel .vector-menu' ) .addClass( 'collapsible-nav mw-collapsible' ) .addClass( function () { if ( collapsedIds.indexOf( this.id ) !== -1 ) { return 'mw-collapsed'; } } ) .children( '.vector-menu-heading' ) .addClass( 'mw-collapsible-toggle' ) .end() .children( '.vector-menu-content' ) .addClass( 'mw-collapsible-content' ) .end() .makeCollapsible() .on( 'afterCollapse.mw-collapsible afterExpand.mw-collapsible', onToggle ); } ); efrtvpmvdv6zu7bbzwndg48bj76u8kq MediaWiki:Gadget-CollapsibleNav.css 8 24559 268804 2026-04-28T15:38:10Z Umarxon III 11129 Sahypa döretdi, mazmuny: '.collapsible-nav > .mw-collapsible-toggle { float: none; cursor: pointer; } .collapsible-nav > .mw-collapsible-toggle::before { display: inline-block; width: 12px; content: url(/w/resources/src/mediawiki.icon/images/arrow-expanded.svg?d0685); } .collapsible-nav > .mw-collapsible-toggle-collapsed::before { content: url(/w/resources/src/mediawiki.icon/images/arrow-collapsed-ltr.svg?40e9a); }' 268804 css text/css .collapsible-nav > .mw-collapsible-toggle { float: none; cursor: pointer; } .collapsible-nav > .mw-collapsible-toggle::before { display: inline-block; width: 12px; content: url(/w/resources/src/mediawiki.icon/images/arrow-expanded.svg?d0685); } .collapsible-nav > .mw-collapsible-toggle-collapsed::before { content: url(/w/resources/src/mediawiki.icon/images/arrow-collapsed-ltr.svg?40e9a); } bjkql4b839126w74ddqhaevjzqkdzly MediaWiki:Gadget-MenuTabsToggle 8 24560 268805 2026-04-28T15:45:19Z Umarxon III 11129 Sahypa döretdi, mazmuny: 'Tablar we açylýan menýular arasynda geçiş etmäge rugsat bermek' 268805 wikitext text/x-wiki Tablar we açylýan menýular arasynda geçiş etmäge rugsat bermek dzd95wfxtuck7j9hjl362l0yqgxpyln MediaWiki:Gadget-MenuTabsToggle.css 8 24561 268806 2026-04-28T15:46:58Z Umarxon III 11129 Sahypa döretdi, mazmuny: '/* _____________________________________________________________________________ * | | * | === WARNING: GLOBAL GADGET FILE === | * | Changes to this page affect many users. | * | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. | * |_________________________________________________...' 268806 css text/css /* _____________________________________________________________________________ * | | * | === WARNING: GLOBAL GADGET FILE === | * | Changes to this page affect many users. | * | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. | * |_____________________________________________________________________________| * * Toggle between dropdown menus and tabs. * * @dependencies jquery.cookie * @source en.wikipedia.org/wiki/MediaWiki:Gadget-MenuTabsToggle.css * @source imported as of 2011-10-04 from [[User:Edokter/MenuTabsToggle.js]] / [[User:Edokter/MenuTabsToggle.css]] * @revision 3.3 * @author: Edokter ([[User:Edokter]]) */ div#mw-head div#right-navigation .vector-menu > h3 { /* @embed */ background-image: url(/w/skins/Vector/resources/skins.vector.styles/images/tab-separator.png); } .vector-menu-dropdown#p-variants #mw-vector-current-variant { display: inline-block; float: left; font-size: 0.8em; padding-left: 0.5em; padding-top: 1.375em; font-weight: normal; border: none; } .vector-menu-dropdown { transition: none; } .vector-menu-dropdown ul { z-index: 101; } .vector-menu-dropdown div.vectorToggle { display: none; } .vector-menu-tabs div.vectorToggle { float: left; height: 2.5em; } div.vectorToggle span a { padding: 0; height: 2.5em; width: 23px; } /* @noflip */ div.vectorToggle.toggle-left { /* @embed */ background: url(/w/skins/Vector/resources/skins.vector.styles/images/arrow-collapsed-ltr.png) 50% 60% no-repeat; background-image: linear-gradient(transparent, transparent), url(/w/skins/Vector/resources/skins.vector.styles/images/arrow-collapsed-ltr.png); } /* @noflip */ div.vectorToggle.toggle-right { /* @embed */ background: url(/w/skins/Vector/resources/skins.vector.styles/images/arrow-collapsed-rtl.png) 50% 60% no-repeat; background-image: linear-gradient(transparent, transparent), url(/w/skins/Vector/resources/skins.vector.styles/images/arrow-collapsed-rtl.png); } htadmy1cz8ygjbe8647vfrgx30tfclm MediaWiki:Gadget-MenuTabsToggle.js 8 24562 268807 2026-04-28T15:51:07Z Umarxon III 11129 Sahypa döretdi, mazmuny: '/* _____________________________________________________________________________ * | | * | === WARNING: GLOBAL GADGET FILE === | * | Changes to this page affect many users. | * | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. | * |_________________________________________________...' 268807 javascript text/javascript /* _____________________________________________________________________________ * | | * | === WARNING: GLOBAL GADGET FILE === | * | Changes to this page affect many users. | * | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. | * |_____________________________________________________________________________| * * Toggle between dropdown menus and tabs. * * @dependencies mediawiki.cookie * @source en.wikipedia.org/wiki/MediaWiki:Gadget-MenuTabsToggle.js * @source imported as of 2011-10-04 from [[User:Edokter/MenuTabsToggle.js]] / [[User:Edokter/MenuTabsToggle.css]] * @revision 3.4 * @author: Edokter ([[User:Edokter]]) */ $( document ).ready( function() { var portlet = []; var portletId = []; var portletToggle = []; var toggleDiv = '<div class="vectorToggle" id="$1"><span><a href="#"></a></span></div>'; /* Portlets to exclude */ var excludePortlets = [ 'p-namespaces', 'p-twinkle' ]; /* MenuToTabs */ function MenuToTabs( portlet, id ) { portlet.removeClass( 'vector-menu-dropdown' ).addClass( 'vector-menu-tabs' ).css( 'margin-left', '-1px' ); portlet.find( 'li.icon-collapsed' ).removeClass( 'icon-collapsed' ).addClass( 'icon' ); mw.cookie.set( id, 'tabs', { prefix: 'vector-tabs-' } ); } /* TabsToMenu */ function TabsToMenu( portlet, id ) { portlet.removeClass( 'vector-menu-tabs' ).addClass( 'vector-menu-dropdown' ).css( 'margin-left', '' ); portlet.find( 'li.icon' ).removeClass( 'icon' ).addClass( 'icon-collapsed' ); mw.cookie.set( id, 'menu', { prefix: 'vector-tabs-' } ); } /* Initialize */ if ( mw.config.get( 'skin' ) !== 'vector' ) { return; } // Unbind events from vector.js $( 'nav.vector-menu' ).find( 'h3' ).off(); // Enumerate all portlets $( '.vector-menu-dropdown, .vector-menu-tabs' ).each( function(i) { portlet[i] = $( this ); portletId[i] = portlet[i].attr( 'id' ); // Skip excluded portlets if ( $.inArray( portletId[i], excludePortlets ) == -1 ) { // Disable collapsible tabs portlet[i].find( 'li.collapsible' ).removeClass( 'collapsible' ); portletToggle[i] = $( toggleDiv.replace( '$1', portletId[i] + '-toggle' ) ); // Left or right? if ( portlet[i].parent().attr( 'id' ) == 'left-navigation' ) { portletToggle[i] .addClass( 'toggle-left' ) .insertBefore( portlet[i].find( 'ul' ) ); } else { portletToggle[i] .addClass( 'toggle-right' ) .insertAfter( portlet[i].find( 'ul' ) ); } // Menu or Tabs? if ( portlet[i].hasClass( 'vector-menu-dropdown' ) ) { if ( mw.cookie.get( portletId[i], 'vector-tabs-' ) == 'tabs' ) { MenuToTabs( portlet[i], portletId[i] ); } } else if ( portlet[i].hasClass( 'vector-menu-tabs' ) ) { portlet[i].find( 'h3' ) .wrapInner( '<span></span>' ) .append( '<a href="#"></a>' ); if ( mw.cookie.get( portletId[i], 'vector-tabs-' ) == 'menu' ) { TabsToMenu( portlet[i], portletId[i] ); } } // Assign key and mouse events portlet[i].on( 'click', 'h3 a', function( event ) { event.preventDefault(); } ); portlet[i].on( 'mousedown', 'h3 a', function( event ) { if ( event.which != 3 ) { var ul = portlet[i].find( 'ul' ); ul.animate( { height: 'hide' }, 125, function() { MenuToTabs( portlet[i], portletId[i] ); ul.animate( { width: 'show' }, 125 ); } ); } } ); portletToggle[i].on( 'click', 'a', function( event ) { event.preventDefault(); } ); portletToggle[i].on( 'mousedown', 'a', function( event ) { if ( event.which != 3 ) { var ul = portlet[i].find( 'ul' ); ul.animate( { width: 'hide' }, 125, function() { TabsToMenu( portlet[i], portletId[i] ); ul.animate( { height: 'show' }, 125 ); } ); } } ); } } ); } ); aqmi3jhjza3c0rr6rhz7bfkhsyjza34 MediaWiki:Gadget-dropdown-menus 8 24563 268808 2026-04-28T15:52:46Z Umarxon III 11129 Sahypa döretdi, mazmuny: '<sup><abbr title="{{int:gadgets-sister}}">(S)</abbr></sup> [[Meta:MoreMenu|MoreMenu]]: umumy wezipelere, analitik gurallara we gündeliklere baglanyşyklary bolan Sahypa we Ulanyjy açylýan menýularyny gurallar paneline goşuň' 268808 wikitext text/x-wiki <sup><abbr title="{{int:gadgets-sister}}">(S)</abbr></sup> [[Meta:MoreMenu|MoreMenu]]: umumy wezipelere, analitik gurallara we gündeliklere baglanyşyklary bolan Sahypa we Ulanyjy açylýan menýularyny gurallar paneline goşuň tdav6h7opw12ueyryk4qc2ga9qryfwg MediaWiki:Gadget-dropdown-menus.js 8 24564 268809 2026-04-28T15:53:41Z Umarxon III 11129 Sahypa döretdi, mazmuny: '/********************************************************************* ** ***WARNING: GLOBAL GADGET FILE*** ** ** any changes to this file will affect many users ** ** please discuss changes on the talk page or at ** ** [[Wikipedia talk:Gadget]] before editing ** ** (consider dropping the script author a note as well...) ** **...' 268809 javascript text/javascript /********************************************************************* ** ***WARNING: GLOBAL GADGET FILE*** ** ** any changes to this file will affect many users ** ** please discuss changes on the talk page or at ** ** [[Wikipedia talk:Gadget]] before editing ** ** (consider dropping the script author a note as well...) ** ** ** ********************************************************************** ** Script: MoreMenu ** ** Author: MusikAnimal ** ** Documentation: [[meta:MoreMenu]] ** *********************************************************************/ mw.loader.load('https://meta.wikimedia.org/w/load.php?modules=ext.gadget.MoreMenu'); 00hi01moh046ectz4md6hyysxl0upc3 MediaWiki:Gadget-dropdown-menus-pagestyles.css 8 24565 268810 2026-04-28T15:54:38Z Umarxon III 11129 Sahypa döretdi, mazmuny: '/********************************************************************* ** ***WARNING: GLOBAL GADGET FILE*** ** ** any changes to this file will affect many users ** ** please discuss changes on the talk page or at ** ** [[Wikipedia talk:Gadget]] before editing ** ** (consider dropping the script author a note as well...) ** *****************************************...' 268810 css text/css /********************************************************************* ** ***WARNING: GLOBAL GADGET FILE*** ** ** any changes to this file will affect many users ** ** please discuss changes on the talk page or at ** ** [[Wikipedia talk:Gadget]] before editing ** ** (consider dropping the script author a note as well...) ** ********************************************************************** ** Script: MoreMenu ** ** Author: MusikAnimal ** ** Documentation: [[meta:MoreMenu]] ** *********************************************************************/ /*** VECTOR ***/ /* User menu */ .client-js .skin-vector:not(.skin-vector-2022).ns-2 #p-views, .client-js .skin-vector:not(.skin-vector-2022).ns-3 #p-views, .client-js > .skin-vector:not(.skin-vector-2022).mw-special-Contributions #p-views, .client-js > .skin-vector:not(.skin-vector-2022).mw-special-DeletedContributions #p-views, .client-js > .skin-vector:not(.skin-vector-2022).mw-special-Block #p-views { padding-right: 3.68em; } /* Page menu */ .client-js .skin-vector:not(.skin-vector-2022):not(.ns-special) #p-views .vector-menu-content::after { content: ''; display: inline-block; width: 3.85em; } o1ijz31ddwzl2ez6zi16j6z15v2rt56 MediaWiki:Gadget-dropdown-menus-pagestyles 8 24566 268811 2026-04-28T15:55:30Z Umarxon III 11129 Sahypa döretdi, mazmuny: 'MoreMenu gadjeti üçin komponentler' 268811 wikitext text/x-wiki MoreMenu gadjeti üçin komponentler 0njlhz4ab8m40ay4exyy7gmqncl36yv MediaWiki:Gadget-CommentsInLocalTime 8 24567 268816 2026-04-29T08:01:46Z Umarxon III 11129 Sahypa döretdi, mazmuny: '<sup><abbr title="{{int:gadgets-user}}">(U)</abbr></sup> UTC esasyndaky wagty we seneleri, mysal üçin gol çekişlerde ulanylýanlary ýerli wagta görä üýtgedmek ([[Wikipedia:Comments in Local Time|documentation]])' 268816 wikitext text/x-wiki <sup><abbr title="{{int:gadgets-user}}">(U)</abbr></sup> UTC esasyndaky wagty we seneleri, mysal üçin gol çekişlerde ulanylýanlary ýerli wagta görä üýtgedmek ([[Wikipedia:Comments in Local Time|documentation]]) fa6wi9ygsqq9ungdj5hwsoas2bjz1fg MediaWiki:Gadget-CommentsInLocalTime.js 8 24568 268817 2026-04-29T09:58:22Z Umarxon III 11129 Sahypa döretdi, mazmuny: '// _________________________________________________________________________________________ // | | // | === WARNING: GLOBAL GADGET FILE === | // | Changes to this page affect many users. | // | Please discuss changes on the talk page or on [[Wikipedia_talk:Gadget]] before edit...' 268817 javascript text/javascript // _________________________________________________________________________________________ // | | // | === WARNING: GLOBAL GADGET FILE === | // | Changes to this page affect many users. | // | Please discuss changes on the talk page or on [[Wikipedia_talk:Gadget]] before editing. | // |_________________________________________________________________________________________| // // Imported from [[User:Gary/comments in local time.js]] (previously [[User:Gary King/localize comments.js]]) // This script changes timestamps such as those in comments to be relative to the local time. See [[Wikipedia:Comments in Local Time]] mw.loader.load('https://en.wikipedia.org/w/index.php?title=User:Gary/comments_in_local_time.js&action=raw&ctype=text/javascript'); ngnbrjvr8p16n9f4lu482n8va9smgbj MediaWiki:Gadget-OldDiff 8 24569 268818 2026-04-29T11:05:35Z Umarxon III 11129 Sahypa döretdi, mazmuny: 'Displeý köne sary-ýaşyl reňkler we dizaýn bilen tapawutlanmek' 268818 wikitext text/x-wiki Displeý köne sary-ýaşyl reňkler we dizaýn bilen tapawutlanmek 8k2vae5ghi96s2b2nm4x96mv2a8ph9w MediaWiki:Gadget-OldDiff.css 8 24570 268819 2026-04-29T11:07:27Z Umarxon III 11129 Sahypa döretdi, mazmuny: '/* _____________________________________________________________________________ * | | * | === WARNING: GLOBAL GADGET FILE === | * | Changes to this page affect many users. | * | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. | * |_________________________________________________...' 268819 css text/css /* _____________________________________________________________________________ * | | * | === WARNING: GLOBAL GADGET FILE === | * | Changes to this page affect many users. | * | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. | * |_____________________________________________________________________________| * * Display diffs with the old yellow/green colors and design. */ table.diff td { padding: 0; } td.diff-marker { color: black; font-size: 1em; font-weight: normal; } td.diff-context, td.diff-deletedline, td.diff-addedline { border: none; border-radius: 0; } td.diff-context { background-color: #eee; } td.diff-deletedline { background-color: #ffa; } td.diff-addedline { background-color: #cfc; } td.diff-deletedline .diffchange, td.diff-addedline .diffchange { background: transparent; color: red; } nwx50w8a5qhtza84zuchkw9h0fqiup8 MediaWiki:Gadget-NoAnimations 8 24571 268820 2026-04-29T11:09:36Z Umarxon III 11129 Sahypa döretdi, mazmuny: 'Interfeýsde animasiýalary öçürmek' 268820 wikitext text/x-wiki Interfeýsde animasiýalary öçürmek rqrrc61vzgvs7yzmyzgr2ppnj89v5qd MediaWiki:Gadget-NoAnimations.js 8 24572 268821 2026-04-29T11:11:07Z Umarxon III 11129 Sahypa döretdi, mazmuny: '/* turn off all jQuery animations */ $.fx.off = true;' 268821 javascript text/javascript /* turn off all jQuery animations */ $.fx.off = true; 1sut20wyyp2thg3lwxd3tyjwh7tu7yy MediaWiki:Gadget-disablesuggestions 8 24573 268822 2026-04-29T11:14:39Z Umarxon III 11129 Sahypa döretdi, mazmuny: 'Gözleg meýdançalarynyň teklipleriň açylýan sanawlaryny öçürmek' 268822 wikitext text/x-wiki Gözleg meýdançalarynyň teklipleriň açylýan sanawlaryny öçürmek n5q1nfw9dx39u9blii3vcecmxpatdal MediaWiki:Gadget-disablesuggestions.js 8 24574 268823 2026-04-29T11:15:27Z Umarxon III 11129 Sahypa döretdi, mazmuny: '/* _____________________________________________________________________________ * | | * | === WARNING: GLOBAL GADGET FILE === | * | Changes to this page affect many users. | * | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. | * |_________________________________________________...' 268823 javascript text/javascript /* _____________________________________________________________________________ * | | * | === WARNING: GLOBAL GADGET FILE === | * | Changes to this page affect many users. | * | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. | * |_____________________________________________________________________________| * * Imported from version XXXX as of 01-03-2014 from [[User:Connor Behan/disablesuggest.js]] * Disables suggestions dropdown of search fields */ mw.loader.using( 'mediawiki.searchSuggest', function () { $(document).ready( function () { $('#searchInput, #powerSearchText, #searchText, .mw-searchInput').off().attr('autocomplete', 'on'); $('#simpleSearch #searchButton').attr( {'name': 'fulltext', 'value': 'Search' } ); } ); } ); jsffrrqp8k4i6ep2vynnqad6cy9tuxj MediaWiki:Gadget-NoSmallFonts 8 24575 268824 2026-04-29T11:18:08Z Umarxon III 11129 Sahypa döretdi, mazmuny: 'Maglumat gutulary, nawigasiýa gutulary we salgylanma sanawlary ýaly elementleriň kiçi şrift ölçeglerini öçürmek' 268824 wikitext text/x-wiki Maglumat gutulary, nawigasiýa gutulary we salgylanma sanawlary ýaly elementleriň kiçi şrift ölçeglerini öçürmek 9opzn0482xhz73g8jfsivz3mscavmsg MediaWiki:Gadget-NoSmallFonts.css 8 24576 268825 2026-04-29T11:18:46Z Umarxon III 11129 Sahypa döretdi, mazmuny: '/* _____________________________________________________________________________ * | | * | === WARNING: GLOBAL GADGET FILE === | * | Changes to this page affect many users. | * | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. | * |_________________________________________________...' 268825 css text/css /* _____________________________________________________________________________ * | | * | === WARNING: GLOBAL GADGET FILE === | * | Changes to this page affect many users. | * | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. | * |_____________________________________________________________________________| * * NoSmallFonts disables decreased font sizes of many known elements * such as Infoboxes, Navboxes and References lists. * Maintained by [[User:Edokter]]. */ /* HTML elements */ sub, sup, small { font-size: 92% !important; } /* shared CSS */ #sitesub, td.diff-context, td.diff-addedline, td.diff-deletedline, div.thumbinner, .thumbcaption, figure[typeof*='mw:File'] > figcaption, .mw-broken-media, .toccolors, .toctoggle, .mw-tag-markers, div#mw-hidden-catlinks, /* templates */ #coordinates, .navbar, .cquote, .cquotecite, .rquote, .rquotecite, .templatequote, .templatequotecite, .quotebox, .quoteboxcite, .reflist, .refbegin, .navbox, /* common.css */ table.infobox, table.mbox-small, table.mbox-small-left, ol.references { font-size: 100% !important; } 5yk226s8ro7iox9bilz6fx101krsx4z