Wîkîferheng kuwiktionary https://ku.wiktionary.org/wiki/Destp%C3%AAk MediaWiki 1.47.0-wmf.24 case-sensitive Medya Taybet Gotûbêj Bikarhêner Gotûbêja bikarhêner Wîkîferheng Gotûbêja Wîkîferhengê Wêne Gotûbêja wêneyî MediaWiki Gotûbêja MediaWiki Şablon Gotûbêja şablonê Alîkarî Gotûbêja alîkariyê Kategorî Gotûbêja kategoriyê Pêvek Gotûbêja pêvekê Nimînok Gotûbêja nimînokê Portal Gotûbêja portalê Tewandin Gotûbêja tewandinê Jinûvesazî Gotûbêja jinûvesaziyê TimedText TimedText talk Modul Gotûbêja modulê Event Event talk romannivîs 0 5048 6865703 6798078 2026-10-24T19:57:40Z CommonsDelinker 61 Removing [[:c:File:Arap_Shamilov_(2).Jpeg|Arap_Shamilov_(2).Jpeg]], it has been deleted from Commons by [[:c:User:Krd|Krd]] because: No permission since 14 October 2026. 6865703 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-IPA}} * {{ku-kîte}} === Navdêr === {{navdêr|ku|z=mn}} # kesa/ê ku [[roman]]an [[nivîsîn|dinivîse]]. #: ''Erebê Şemo yekem romannivîsê kurd e.'' # [[nivîser]]ê/ [[filan]] [[roman]]ê. #: ''Romannivîsê vê kitêbê kî ye?'' ==== Tewandin ==== {{ku-tewîn-nav|mê û nêr}} ==== Formên alternatîv ==== * [[romanivîs]] ==== Hevmane ==== * [[romanvan]] ==== Jê ==== * [[romannivîsî]] ==== Etîmolojî ==== {{etîmon|ku|:qertaf|roman|-nivîs}} ==== Bide ber ==== * [[çîroknivîs]] * [[helbestnivîs]] * [[şanonivîs]] ==== Bi zaravayên din ==== * {{Z|ckb}}: {{W-|ckb|romannûs|sc=Latn}} ==== Werger ==== {{werger-ser}} * {{Z|af}}: {{W-|af|romanskrywer}} * {{Z|sq}}: {{W+|sq|romancier|n}}, {{W+|sq|novelist|n}} * {{Z|de}}: {{W+|de|Romanautor|n}}, {{W-|de|Romanautorin|m}}, {{W-|de|Romanschreiber|n}}, {{W-|de|Romanschreiberin|m}}, {{W+|de|Romancier|n}}, {{W+|de|Romanschriftsteller|n}}, {{W+|de|Romanschriftstellerin|m}}, {{W+|de|Belletrist|n}}, {{W-|de|Belletristin|m}} * {{Z|ast}}: {{W-|ast|novelista|n|m}} * {{Z|az}}: {{W-|az|romançı}}, {{W-|az|romanist}} * {{Z|eu}}: {{W-|eu|eleberrigile}}, {{W-|eu|nobelagile}} * {{Z|be}}: {{W-|be|рамані́ст|n}}, {{W-|be|рамані́стка|m}}, {{W-|be|белетры́ст|n}}, {{W-|be|белетры́стка|m}} * {{Z|bg}}: {{W+|bg|романи́ст|n}}, {{W-|bg|романи́стка|m}}, {{W-|bg|белетри́ст|n}}, {{W-|bg|белетри́стка|m}} * {{Z|cs}}: {{W+|cs|romanopisec|n}}, {{W+|cs|romanopiskyně|m}} * {{Z|zh}}: *: {{Z|cmn}}: {{W+|cmn|小說家|tr=xiǎoshuōjiā}} * {{Z|da}}: {{W+|da|romanforfatter|g}} * {{Z|id}}: {{W+|id|novelis}} * {{Z|ar}}: {{W-|ar|رِوَائِيّ|n}}, {{W-|ar|رِوَائِيَّة|m}} * {{Z|hy}}: {{W+|hy|վիպասան}} * {{Z|eo}}: {{W-|eo|romanisto}} * {{Z|et}}: {{W-|et|romaanikirjanik}}, {{W-|et|romanist}} * {{Z|fi}}: {{W+|fi|romaanikirjailija}} * {{Z|fr}}: {{W+|fr|romancier|n}}, {{W+|fr|romancière|m}} * {{Z|gl}}: {{W-|gl|novelista|n|m}} * {{Z|ka}}: {{W-|ka|რომანისტი}}, {{W-|ka|ნოველისტი}} * {{Z|hi}}: {{W-|hi|उपन्यासकार|n}}, {{W+|hi|नावेलिस्ट|n}} * {{Z|nl}}: {{W+|nl|romancier|n}}, {{W+|nl|romanschrijver|n}} * {{Z|en}}: {{W+|en|novelist}} * {{Z|ia}}: {{W-|ia|romancero}} * {{Z|it}}: {{W+|it|romanziere|n}}, {{W+|it|romanziera|m}} * {{Z|ja}}: {{W+|ja|小説家|tr=しょうせつか, shōsetsuka}} * {{Z|ca}}: {{W+|ca|novel·lista|n|m}} * {{Z|ky}}: {{W-|ky|романист}} * {{Z|ko}}: {{W+|ko|소설가}} * {{Z|lv}}: {{W-|lv|romānists|n}}, {{W-|lv|romāniste|m}} * {{Z|lt}}: {{W-|lt|romanistas|n}}, {{W-|lt|romanistė|m}} * {{Z|mk}}: {{W-|mk|романопи́сец|n}}, {{W-|mk|романопи́ска|m}}, {{W-|mk|романсие́р|n}}, {{W-|mk|романсие́рка|m}} * {{Z|hu}}: {{W+|hu|regényíró}} * {{Z|no}}: *: {{Z|nb}}: {{W-|nb|romanforfatter|n}} *: {{Z|nn}}: {{W-|nn|romanforfattar|n}} * {{Z|uz}}: {{W+|uz|romanist}} * {{Z|pl}}: {{W+|pl|powieściopisarz|n}}, {{W+|pl|powieściopisarka|m}}, {{W-|pl|beletrysta|n}}, {{W-|pl|beletrystka|m}} * {{Z|pt}}: {{W+|pt|romancista|n|m}}, {{W+|pt|novelista|n|m}} * {{Z|kk}}: {{W-|kk|романшы}} * {{Z|ro}}: {{W+|ro|romancier|n}}, {{W+|ro|romancieră|m}} * {{Z|ru}}: {{W+|ru|романи́ст|n}}, {{W+|ru|романи́стка|m}}, {{W+|ru|беллетри́ст|n}}, {{W+|ru|беллетри́стка|m}} * {{Z|sk}}: {{W-|sk|románopisec|n}}, {{W-|sk|románopiskyňa|m}} * {{Z|sl}}: {{W+|sl|romanopisec|n}}, {{W-|sl|romanopiska|m}} * {{Z|es}}: {{W+|es|novelista|n|m}} * {{Z|sv}}: {{W+|sv|romanförfattare|g}} * {{Z|tl}}: {{W-|tl|nobelista}} * {{Z|tr}}: {{W+|tr|romancı}} * {{Z|uk}}: {{W-|uk|романі́ст|n}}, {{W-|uk|романі́стка|m}}, {{W+|uk|белетри́ст|n}}, {{W-|uk|белетри́стка|m}}, {{W+|uk|новелі́ст|n}}, {{W-|uk|новелі́стка|m}} * {{Z|vi}}: {{W-|vi|tiểu thuyết gia}} * {{Z|cy}}: {{W+|cy|nofelydd|n}} * {{Z|yi}}: {{W-|yi|ראָמאַניסט|n}} * {{Z|el}}: {{W+|el|μυθιστοριογράφος|n|m}} {{werger-bin}} :{{werger çavkanî|en|novelist|beş=Ev qismê Wergerê|oldid=76057879}} ezmu8nu5gkjsq59mahxcof6rtyh6wnt adar 0 6694 6865662 6719764 2026-10-24T16:58:28Z Wikihez 7344 /* Etîmolojî */ 6865662 wikitext text/x-wiki {{h-bnr|Adar}} == {{ziman|ku}} == === Bilêvkirin === * {{ku-IPA}} * {{deng|ku|LL-Q36163 (kmr)-Ebulfîda-adar.wav|dever=Bidlîs}} * {{ku-kîte}} === Navdêr === [[Wêne:Daffodil.jpg|thumb|'''Adarê''' [[bihar]] dest pê dike û [[gul]] û [[giya]] şên dibin.]] {{navdêr|ku|z=m}} # [[meh]]a 3 ji [[salname]]ya [[zayînî]] anku [[romî]],<br>li [[Kurdistan]]ê yekem [[meh]]a [[bihar]]ê ==== Ji wêjeya klasîk ==== * {{J:Feqiyê Teyran|jêgirtin=Ne goyînê di xoşxwîn man<br />Ne nîsan man, ne '''adar''' e<br>Dilo borîn ji nîsanê}} ==== Tewandin ==== {{ku-tewîn-nav|mê}} ==== Bi alfabeyên din ==== * {{ku-ar|ئادار}} * {{ku-kr|адар}} ==== Formên alternatîv ==== * [[avdar]] (di bin tesîra [[etîmolojiya gelêrî]] de) * [[azar]] (2) ==== Jê ==== * [[adarî]] ==== Etîmolojî ==== {{etîmon|ku|:deyn|syc:ܐܕܪ<t:adar>}} Hevreha {{hv|ckb|ئادار}}, {{hv|he|אדר|w=adar}} û {{hv|ar|آذار}}... Texmîna ku "adar" ji "av-dar" anku "[[biav]], [[têrav]]" be [[etîmolojiya gelêrî]] ye (bidin ber [[avrêl]]). Piraniya navên mehên din jî yên kurdî û zimanên din yên [[Rojhilata Navîn]] bi rêya îbrî yan aramî ji akadî ne: [[sibat]], [[nîsan]], [[ayar]], [[temûz]], [[ab]], [[îlon]], [[çirî]], [[kanûn]]. ==== Bide ber ==== {{meh/ku}} ;''Navên mehên salnameya kurdî li dûv pîrependên kurdî'': * [[çile]]..., derd û kul e (is upsetting) * [[sibat]]...e, libate e (is active) * adar...e, meşk li dar e (the butter churn is there) * [[nîsan]]...e, dew li kîsan e * [[gulan]]...e, ba û baran e * [[hezîran]].., hezra teyran e * [[temûz]]..., kakil ket gûz * [[tebax]]...e, tirî bûye laxe * [[îlon]]...e, maz bez û don e * [[çirî]]...ye, mal tijî teyr û tajî ye * [[mijdar]]...e, mij û sar e * [[kanûn]]..., xwera xwelkê germerûn e ;''Navên werzên salnameya kurdî li dûv pîrependên kurdî'': * [[pêndixe]]..., derbaz nabe bê tilxe * [[axlêve]]..., bihar tê pê ve * [[newroz]]..., xilas bû dew û doz * [[bihar]]...e, keç û kur har e * [[havîn]]...e, xemrevîn e * [[payîz]]...e, zav zîz e * [[zivistan]]...e, çîrok û çîstan e * Biharê pez, havînê cêz û dêz, payîzê rez, zivistanê ez û ez ==== Herwiha binêre ==== * [[ayar]] ==== Werger ==== {{werger-ser}} * {{Z|abq}}: {{W-|abq|гӏапынхъамыз}} * {{Z|ab}}: {{W-|ab|хәажәкыра}} * {{Z|ady}}: {{W-|ady|гъэтхапэ}} * {{Z|af}}: {{W+|af|Maart}} * {{Z|ak}}: {{W-|ak|Ɔbɛnem}} * {{Z|akz}}: {{W-|akz|hasiholtina istatótchìina}}, {{W-|akz|Màchka}} * {{Z|sq}}: {{W+|sq|mars|n}} * {{Z|pdc}}: {{W-|pdc|Maerz}}, {{W-|pdc|Marz|}}, {{W-|pdc|Matz}} * {{Z|de}}: {{W+|de|März|n}}, {{W+|de|Lenzing|n}} * {{Z|ems}}: {{W-|ems|Kaignasqaq Iraluq}} * {{Z|am}}: {{W-|am|ማርች}} * Apaçî: *: {{Z|apw}}: {{W-|apw|Tʼąąʼ Náchil}}, {{W-|apw|It'ąą' Náchil}}, {{W-|apw|Anezgai}} * {{Z|an}}: {{W+|an|marzo|n}} * {{Z|arc}}: *: {{Z|aii}}: {{W-|aii|ܐܕܪ|tr=adar}} *: {{Z|aii}}: {{W-|aii|ܐܕܪ|tr=ʾāḏār}} * {{Z|rup}}: {{W-|rup|martsu}} * {{Z|as}}: {{W-|as|মাৰ্চ}} * {{Z|ast}}: {{W+|ast|marzu|n}} * {{Z|atj}}: {{W-|atj|Akokatcic pisimw}} * {{Z|az}}: {{W+|az|mart}} * {{Z|eu}}: {{W+|eu|martxo}} * {{Z|be}}: {{W+|be|сакаві́к|n}} * {{Z|bn}}: {{W+|bn|মার্চ}} * {{Z|bi}}: {{W-|bi|maj}} * {{Z|br}}: {{W+|br|Meurzh}}, {{W-|br|miz Meurzh}} * {{Z|bg}}: {{W+|bg|март|n}} * {{Z|my}}: {{W+|my|မတ်}}, {{W-|my|သုံးလ}} * {{Z|dz}}: {{W-|dz|སྤྱི་ཟླ་གསུམ་པ།}} * {{Z|ce}}: {{W-|ce|Зазадоккху-бутт}} * {{Z|cs}}: {{W+|cs|březen|n}} * {{Z|chr}}: {{W-|chr|ᎤᏄᎳᎯ}}, {{W-|chr|ᎠᏅᏱ}} * {{Z|ny}}: {{W-|ny|Malichi}} * {{Z|cic}}: {{W-|cic|Hashi' Atochchí'na'}} * {{Z|zh}}: *: {{Z|yue}}: {{W-|yue|三月|tr=saam1 jyut6}} *: {{Z|hak}}: {{W-|hak|三月|tr=sâm-ngie̍t}} *: {{Z|cmn}}: {{W+|cmn|三月|tr=sānyuè}} *: {{Z|nan}}: {{W-|nan|三月|tr=saⁿ-go̍eh, saⁿ-ge̍h, saⁿ-gōe}} * {{Z|ckt}}: {{W-|ckt|льоргыӄай|tr=lʹorgyqaj}}, {{W-|ckt|ԓьоргыӄай|tr=ḷʹorgyqaj}} * {{Z|cv}}: {{W-|cv|пуш}} * {{Z|dak}}: {{W-|dak|Oomani}} * {{Z|da}}: {{W+|da|marts|g}} * {{Z|dv}}: {{W-|dv|މާރޗް}} * {{Z|dtp}}: {{W-|dtp|Gomot}} * {{Z|id}}: {{W-|id|maret}} * {{Z|ar}}: {{W+|ar|مَارِس|n}}, {{W+|ar|آذَار|n}} *: {{Z|ajp}}: {{W-|ajp|آذار|tr=ʔāḏār}}, {{W-|ajp|شهر تلاتة|tr=šahr talāte}}, {{W-|ajp|آدار|tr=ʔādār}} * {{Z|hy}}: {{W+|hy|մարտ}} *: {{Z|xcl}}: {{W-|xcl|մարտ}} * {{Z|myv}}: {{W-|myv|эйзюрков}} * {{Z|eo}}: {{W+|eo|marto}}, {{W+|eo|Marto}} * {{Z|et}}: {{W+|et|märts}} * {{Z|ee}}: {{W-|ee|Tedoxe}}, {{W-|ee|Mars}} * {{Z|fa}}: {{W+|fa|مارس|tr=mârs}}, {{W-|fa|مارت|tr=mârt}}, {{W-|fa|مارچ|tr=mârč}} * {{Z|fo}}: {{W-|fo|mars}} * {{Z|fj}}: {{W-|fj|Maji}} * {{Z|fi}}: {{W+|fi|maaliskuu}} * {{Z|fr}}: {{W+|fr|mars|n}} * {{Z|fur}}: {{W-|fur|Març|n}} * {{Z|frr}}: *: {{Z|frr}}: {{W-|frr|marts|n}} *: Mooring: {{W-|frr|uursmoune}}, {{W-|frr|martsmoune}}, {{W-|frr|marts}}, {{W-|frr|märts}} * {{Z|stq}}: {{W-|stq|Meerte}} * {{Z|fy}}: {{W+|fy|maart|g}}, {{W+|fy|foarjiersmoanne|g}} * {{Z|gd}}: {{W+|gd|Màrt|n}} * {{Z|gl}}: {{W+|gl|marzo|n}}, {{W-|gl|marzal|n}} * {{Z|ka}}: {{W+|ka|მარტი}} * {{Z|ht}}: {{W-|ht|mas}} * {{Z|haw}}: {{W-|haw|Malaki}} * {{Z|ha}}: {{W+|ha|Maris}} * {{Z|hi}}: {{W+|hi|मार्च|n}} * {{Z|nl}}: {{W+|nl|maart}} * {{Z|hrx}}: {{W-|hrx|Merz|n}} * {{Z|he}}: {{W+|he|מרס|n|tr=mars|cuda=מארס / מַרְס}}, {{W+|he|מֶרְץ|n|tr=merts}} * {{Z|io}}: {{W+|io|marto}} * {{Z|ilo}}: {{W-|ilo|marso}} * {{Z|ang}}: {{W-|ang|hrēþmōnaþ|n}}, {{W-|ang|hlȳda|n}} * {{Z|enm}}: {{W-|enm|March}} * {{Z|en}}: {{W+|en|March}} * {{Z|ia}}: {{W+|ia|martio}} * {{Z|ik}}: {{W-|ik|Siqiññaasugruk}} * {{Z|ga}}: {{W+|ga|Márta|n}} * {{Z|it}}: {{W+|it|marzo|n}} * {{Z|is}}: {{W+|is|mars|n}}, {{W+|is|marsmánuður|n}} * {{Z|ja}}: {{W+|ja|三月|tr=さんがつ, sangatsu}}, {{W+|ja|弥生|tr=やよい, yayoi}} * {{Z|jv}}: {{W-|jv|maret}} * {{Z|kl}}: {{W-|kl|marsi}}, {{W-|kl|ullujuersaaq}} * {{Z|xal}}: {{W-|xal|моһа сар}} * {{Z|xbr}}: {{W-|xbr|wulang tailu}} * {{Z|kn}}: {{W+|kn|ಮಾರ್ಚಿ}} * {{Z|pam}}: {{W-|pam|pángakatlung búlan}}, {{W-|pam|mársu}} * {{Z|kea}}: {{W-|kea|marsu}} * {{Z|csb}}: {{W+|csb|strumiannik|n}} * {{Z|ca}}: {{W+|ca|març|n}} * {{Z|ky}}: {{W+|ky|март}} * {{Z|kg}}: {{W-|kg|marisi}} * {{Z|ki}}: {{W-|ki|Kĩhu}} * {{Z|si}}: {{W+|si|මාර්තු}} * {{Z|gil}}: {{W-|gil|Mati}} * {{Z|ko}}: {{W+|ko|삼월}} * {{Z|kw}}: {{W-|kw|mys merth}} * {{Z|co}}: {{W+|co|marzu}} * {{Z|lld}}: {{W-|lld|merz}} * {{Z|la}}: {{W+|la|mārtius|n}} * {{Z|lv}}: {{W+|lv|marts|n}} * {{Z|lo}}: {{W-|lo|ເດືອນມີນາ}}, {{W+|lo|ມີນາ}} * {{Z|lez}}: {{W-|lez|ибне}} * {{Z|ln}}: {{W+|ln|mársi}} * {{Z|li}}: {{W+|li|miert}} * {{Z|lt}}: {{W+|lt|kovas|n}} * {{Z|liv}}: {{W-|liv|märts}}, {{W-|liv|kievādkū}} * {{Z|lb}}: {{W+|lb|Mäerz|n}}, {{W-|lb|Aussenzäit|m}}, {{W+|lb|Lenzmount|n}} * {{Z|mhn}}: {{W-|mhn|merz|n}} * {{Z|mk}}: {{W+|mk|март|n}} * {{Z|ms}}: {{W+|ms|Mac}}, {{W+|ms|Maret}} * {{Z|mt}}: {{W+|mt|Marzu|n}} * {{Z|mnc}}: {{W-|mnc|ᡳᠯᠠᠨ ᠪᡳ᠍ᠶᠠ}} * {{Z|mi}}: {{W-|mi|Māehe}} * {{Z|mr}}: {{W-|mr|मार्च}} * {{Z|hu}}: {{W+|hu|március}} * {{Z|xmf}}: {{W-|xmf|მელახი}} * {{Z|mwl}}: {{W-|mwl|Márcio}} * {{Z|mn}}: *: Kirîlî: {{W-|mn|гуравдугаар сар}} * {{Z|moe}}: {{W-|moe|uinashku-pishimᵘ}} * {{Z|nap}}: {{W-|nap|màrzo|n}} * {{Z|nv}}: {{W-|nv|Wóózhchʼį́į́d}} * {{Z|nds}}: {{W-|nds|März|n}}, {{W-|nds|Märzmaand|n}} * {{Z|no}}: *: {{Z|nb}}: {{W+|nb|mars|n}} *: {{Z|nn}}: {{W+|nn|mars|n}} * {{Z|oj}}: {{W-|oj|onaabani-giizis}} * {{Z|oc}}: {{W+|oc|març|n}} * {{Z|or}}: {{W+|or|ମାର୍ଚ୍ଚ}} * {{Z|om}}: {{W-|om|Bitootessa}} * {{Z|os}}: {{W-|os|мартъи}} * {{Z|ug}}: {{W-|ug|مارت}}, {{W-|ug|ئۈچىنچى ئاي}} * {{Z|uz}}: {{W+|uz|mart}} * {{Z|ps}}: {{W+|ps|مارچ|n|tr=mārč}} * {{Z|pdt}}: {{W-|pdt|Moaz|n}} * {{Z|pl}}: {{W+|pl|marzec|n}} * {{Z|pt}}: {{W+|pt|março|n}} * {{Z|pa}}: {{W-|pa|ਮਾਰਚ|n}} * {{Z|kk}}: {{W+|kk|наурыз}} * {{Z|cop}}: {{W-|cop|ⲙⲁⲣⲧⲓⲟⲥ}} * {{Z|rgn}}: {{W-|rgn|mêrz|n}} * {{Z|rm}}: {{W-|rm|mars|n}}, {{W-|rm|marz|n}} * {{Z|ro}}: {{W+|ro|martie}}, {{W+|ro|mărțișor}} * {{Z|ru}}: {{W+|ru|март|n}} * {{Z|se}}: {{W-|se|njukčamánnu}} * {{Z|smn}}: {{W-|smn|njuhčâmáánu}} * {{Z|sms}}: {{W-|sms|pâˊzzlâšttammään}} * {{Z|sm}}: {{W-|sm|mati}} * {{Z|sc}}: {{W-|sc|martzu|n}}, {{W-|sc|martu}}, {{W-|sc|maltzu}}, {{W-|sc|maltu}} * {{Z|sek}}: {{W-|sek|Nùtsʼiide}} * {{Z|scn}}: {{W+|scn|marzu|n}} * {{Z|sh}}: *: Kirîlî: {{W-|sh|март|n}} *: Latînî: {{W+|sh|mart|n}}, {{W+|sh|ožujak|n}} * {{Z|sco}}: {{W-|sco|Mairch}} * {{Z|cu}}: *: Kirîlî: {{W-|cu|соухъ|n}} * {{Z|sk}}: {{W+|sk|marec|n}} * {{Z|sl}}: {{W+|sl|márec|n}} * Sorbî: *: {{Z|hsb}}: {{W-|hsb|měrc|n}}, {{W-|hsb|nalětnik|n}} * {{Z|nso}}: {{W-|nso|Hlakola}} * {{Z|st}}: {{W+|st|Hlakubele}} * {{Z|es}}: {{W+|es|marzo|n}} * {{Z|su}}: {{W+|su|maret}} * {{Z|sw}}: {{W-|sw|Machi}} * {{Z|ss}}: {{W-|ss|íNdlovu}} * {{Z|sv}}: {{W+|sv|mars|g}} * {{Z|sn}}: {{W-|sn|Kurume}} * {{Z|tg}}: {{W+|tg|март}} * {{Z|tl}}: {{W+|tl|Marso}} * {{Z|ty}}: {{W-|ty|māti}} * {{Z|ta}}: {{W-|ta|மார்ச்}} * {{Z|th}}: {{W+|th|มีนาคม}} * {{Z|te}}: {{W+|te|మార్చి}} * {{Z|tt}}: {{W-|tt|март}} * {{Z|tr}}: {{W+|tr|mart}} * {{Z|tk}}: {{W+|tk|mart}} * {{Z|bo}}: {{W-|bo|ཟླ་བ་གསུམ་པ}} * {{Z|tpi}}: {{W-|tpi|mac}} * {{Z|to}}: {{W-|to|Maʻasi}} * {{Z|udm}}: {{W-|udm|южтолэзь}} * {{Z|ur}}: {{W+|ur|مارچ|n|tr=mārc}} * {{Z|uk}}: {{W+|uk|бе́резень|n}} * {{Z|vec}}: {{W+|vec|marso}} * {{Z|vi}}: {{W+|vi|tháng Ba}}, {{W+|vi|tháng ba}} * {{Z|vo}}: {{W+|vo|mäzul}} * {{Z|vro}}: {{W-|vro|urbõkuu}} * {{Z|wa}}: {{W+|wa|måss}} * {{Z|cy}}: {{W+|cy|Mawrth|n}} * {{Z|win}}: {{W-|win|Wake hikiruxe wiira}} * {{Z|wo}}: {{W-|wo|Maars}} * {{Z|km}}: {{W+|km|មីនា}} * {{Z|sah}}: {{W-|sah|Кулун тутар}} * {{Z|yi}}: {{W+|yi|מאַרץ|n}} * {{Z|esu}}: {{W-|esu|Tengmiirviguaq}} * {{Z|el}}: {{W+|el|Μάρτιος|n}}, {{W+|el|Μάρτης|n}} *: Kevn: {{W-|grc|Μάρτιος|n}} * {{Z|zun}}: {{W-|zun|Łi'dekwakkya Ts'ana}} {{werger-bin}} :{{werger çavkanî|en|March|beş=Ev qismê Wergerê|oldid=75405213}} ==== Anagram ==== * {{anagram|ku|a=aadr|Arda|Dara|arad|dara}} == {{ziman|zza}} == === Navdêr === {{navdêr|zza}} # adar # navê kulîlkek biharê<ref>http://www.kovarabir.com/wp-content/uploads/Ferheng%C3%AA-Dimil%C3%AE-Zazak%C3%AE-%C3%BB-Kurmanc%C3%AE-A-a.pdf</ref> == {{ziman|ckb}} == === Navdêr === {{navdêr|ckb|sc=Latn}} # adar === Çavkanî === {{çavkanî}} == {{ziman|cy}} == === Navdêr === {{navdêr|cy}} # {{mijar|cy|heywan}} {{g|ku|teyr}}, {{g|ku|firinde}}, {{g|ku|balinde}} === Çavkanî === {{rûpela wergerê|cy|teyr}} gcujmlky04tav88iv8lvhha6ef9afdn 6865666 6865662 2026-10-24T17:05:36Z Wikihez 7344 Kurmancî/Navdêr: beşa «Jê» hate nûkirin (DefSideBoxes) 6865666 wikitext text/x-wiki {{h-bnr|Adar}} == {{ziman|ku}} == === Bilêvkirin === * {{ku-IPA}} * {{deng|ku|LL-Q36163 (kmr)-Ebulfîda-adar.wav|dever=Bidlîs}} * {{ku-kîte}} === Navdêr === [[Wêne:Daffodil.jpg|thumb|'''Adarê''' [[bihar]] dest pê dike û [[gul]] û [[giya]] şên dibin.]] {{navdêr|ku|z=m}} # [[meh]]a 3 ji [[salname]]ya [[zayînî]] anku [[romî]],<br>li [[Kurdistan]]ê yekem [[meh]]a [[bihar]]ê ==== Ji wêjeya klasîk ==== * {{J:Feqiyê Teyran|jêgirtin=Ne goyînê di xoşxwîn man<br />Ne nîsan man, ne '''adar''' e<br>Dilo borîn ji nîsanê}} ==== Tewandin ==== {{ku-tewîn-nav|mê}} ==== Bi alfabeyên din ==== * {{ku-ar|ئادار}} * {{ku-kr|адар}} ==== Formên alternatîv ==== * [[avdar]] (di bin tesîra [[etîmolojiya gelêrî]] de) * [[azar]] (2) ==== Jê ==== {{kol3|ku|cure=Jê |adarî |adarok }} ==== Etîmolojî ==== {{etîmon|ku|:deyn|syc:ܐܕܪ<t:adar>}} Hevreha {{hv|ckb|ئادار}}, {{hv|he|אדר|w=adar}} û {{hv|ar|آذار}}... Texmîna ku "adar" ji "av-dar" anku "[[biav]], [[têrav]]" be [[etîmolojiya gelêrî]] ye (bidin ber [[avrêl]]). Piraniya navên mehên din jî yên kurdî û zimanên din yên [[Rojhilata Navîn]] bi rêya îbrî yan aramî ji akadî ne: [[sibat]], [[nîsan]], [[ayar]], [[temûz]], [[ab]], [[îlon]], [[çirî]], [[kanûn]]. ==== Bide ber ==== {{meh/ku}} ;''Navên mehên salnameya kurdî li dûv pîrependên kurdî'': * [[çile]]..., derd û kul e (is upsetting) * [[sibat]]...e, libate e (is active) * adar...e, meşk li dar e (the butter churn is there) * [[nîsan]]...e, dew li kîsan e * [[gulan]]...e, ba û baran e * [[hezîran]].., hezra teyran e * [[temûz]]..., kakil ket gûz * [[tebax]]...e, tirî bûye laxe * [[îlon]]...e, maz bez û don e * [[çirî]]...ye, mal tijî teyr û tajî ye * [[mijdar]]...e, mij û sar e * [[kanûn]]..., xwera xwelkê germerûn e ;''Navên werzên salnameya kurdî li dûv pîrependên kurdî'': * [[pêndixe]]..., derbaz nabe bê tilxe * [[axlêve]]..., bihar tê pê ve * [[newroz]]..., xilas bû dew û doz * [[bihar]]...e, keç û kur har e * [[havîn]]...e, xemrevîn e * [[payîz]]...e, zav zîz e * [[zivistan]]...e, çîrok û çîstan e * Biharê pez, havînê cêz û dêz, payîzê rez, zivistanê ez û ez ==== Herwiha binêre ==== * [[ayar]] ==== Werger ==== {{werger-ser}} * {{Z|abq}}: {{W-|abq|гӏапынхъамыз}} * {{Z|ab}}: {{W-|ab|хәажәкыра}} * {{Z|ady}}: {{W-|ady|гъэтхапэ}} * {{Z|af}}: {{W+|af|Maart}} * {{Z|ak}}: {{W-|ak|Ɔbɛnem}} * {{Z|akz}}: {{W-|akz|hasiholtina istatótchìina}}, {{W-|akz|Màchka}} * {{Z|sq}}: {{W+|sq|mars|n}} * {{Z|pdc}}: {{W-|pdc|Maerz}}, {{W-|pdc|Marz|}}, {{W-|pdc|Matz}} * {{Z|de}}: {{W+|de|März|n}}, {{W+|de|Lenzing|n}} * {{Z|ems}}: {{W-|ems|Kaignasqaq Iraluq}} * {{Z|am}}: {{W-|am|ማርች}} * Apaçî: *: {{Z|apw}}: {{W-|apw|Tʼąąʼ Náchil}}, {{W-|apw|It'ąą' Náchil}}, {{W-|apw|Anezgai}} * {{Z|an}}: {{W+|an|marzo|n}} * {{Z|arc}}: *: {{Z|aii}}: {{W-|aii|ܐܕܪ|tr=adar}} *: {{Z|aii}}: {{W-|aii|ܐܕܪ|tr=ʾāḏār}} * {{Z|rup}}: {{W-|rup|martsu}} * {{Z|as}}: {{W-|as|মাৰ্চ}} * {{Z|ast}}: {{W+|ast|marzu|n}} * {{Z|atj}}: {{W-|atj|Akokatcic pisimw}} * {{Z|az}}: {{W+|az|mart}} * {{Z|eu}}: {{W+|eu|martxo}} * {{Z|be}}: {{W+|be|сакаві́к|n}} * {{Z|bn}}: {{W+|bn|মার্চ}} * {{Z|bi}}: {{W-|bi|maj}} * {{Z|br}}: {{W+|br|Meurzh}}, {{W-|br|miz Meurzh}} * {{Z|bg}}: {{W+|bg|март|n}} * {{Z|my}}: {{W+|my|မတ်}}, {{W-|my|သုံးလ}} * {{Z|dz}}: {{W-|dz|སྤྱི་ཟླ་གསུམ་པ།}} * {{Z|ce}}: {{W-|ce|Зазадоккху-бутт}} * {{Z|cs}}: {{W+|cs|březen|n}} * {{Z|chr}}: {{W-|chr|ᎤᏄᎳᎯ}}, {{W-|chr|ᎠᏅᏱ}} * {{Z|ny}}: {{W-|ny|Malichi}} * {{Z|cic}}: {{W-|cic|Hashi' Atochchí'na'}} * {{Z|zh}}: *: {{Z|yue}}: {{W-|yue|三月|tr=saam1 jyut6}} *: {{Z|hak}}: {{W-|hak|三月|tr=sâm-ngie̍t}} *: {{Z|cmn}}: {{W+|cmn|三月|tr=sānyuè}} *: {{Z|nan}}: {{W-|nan|三月|tr=saⁿ-go̍eh, saⁿ-ge̍h, saⁿ-gōe}} * {{Z|ckt}}: {{W-|ckt|льоргыӄай|tr=lʹorgyqaj}}, {{W-|ckt|ԓьоргыӄай|tr=ḷʹorgyqaj}} * {{Z|cv}}: {{W-|cv|пуш}} * {{Z|dak}}: {{W-|dak|Oomani}} * {{Z|da}}: {{W+|da|marts|g}} * {{Z|dv}}: {{W-|dv|މާރޗް}} * {{Z|dtp}}: {{W-|dtp|Gomot}} * {{Z|id}}: {{W-|id|maret}} * {{Z|ar}}: {{W+|ar|مَارِس|n}}, {{W+|ar|آذَار|n}} *: {{Z|ajp}}: {{W-|ajp|آذار|tr=ʔāḏār}}, {{W-|ajp|شهر تلاتة|tr=šahr talāte}}, {{W-|ajp|آدار|tr=ʔādār}} * {{Z|hy}}: {{W+|hy|մարտ}} *: {{Z|xcl}}: {{W-|xcl|մարտ}} * {{Z|myv}}: {{W-|myv|эйзюрков}} * {{Z|eo}}: {{W+|eo|marto}}, {{W+|eo|Marto}} * {{Z|et}}: {{W+|et|märts}} * {{Z|ee}}: {{W-|ee|Tedoxe}}, {{W-|ee|Mars}} * {{Z|fa}}: {{W+|fa|مارس|tr=mârs}}, {{W-|fa|مارت|tr=mârt}}, {{W-|fa|مارچ|tr=mârč}} * {{Z|fo}}: {{W-|fo|mars}} * {{Z|fj}}: {{W-|fj|Maji}} * {{Z|fi}}: {{W+|fi|maaliskuu}} * {{Z|fr}}: {{W+|fr|mars|n}} * {{Z|fur}}: {{W-|fur|Març|n}} * {{Z|frr}}: *: {{Z|frr}}: {{W-|frr|marts|n}} *: Mooring: {{W-|frr|uursmoune}}, {{W-|frr|martsmoune}}, {{W-|frr|marts}}, {{W-|frr|märts}} * {{Z|stq}}: {{W-|stq|Meerte}} * {{Z|fy}}: {{W+|fy|maart|g}}, {{W+|fy|foarjiersmoanne|g}} * {{Z|gd}}: {{W+|gd|Màrt|n}} * {{Z|gl}}: {{W+|gl|marzo|n}}, {{W-|gl|marzal|n}} * {{Z|ka}}: {{W+|ka|მარტი}} * {{Z|ht}}: {{W-|ht|mas}} * {{Z|haw}}: {{W-|haw|Malaki}} * {{Z|ha}}: {{W+|ha|Maris}} * {{Z|hi}}: {{W+|hi|मार्च|n}} * {{Z|nl}}: {{W+|nl|maart}} * {{Z|hrx}}: {{W-|hrx|Merz|n}} * {{Z|he}}: {{W+|he|מרס|n|tr=mars|cuda=מארס / מַרְס}}, {{W+|he|מֶרְץ|n|tr=merts}} * {{Z|io}}: {{W+|io|marto}} * {{Z|ilo}}: {{W-|ilo|marso}} * {{Z|ang}}: {{W-|ang|hrēþmōnaþ|n}}, {{W-|ang|hlȳda|n}} * {{Z|enm}}: {{W-|enm|March}} * {{Z|en}}: {{W+|en|March}} * {{Z|ia}}: {{W+|ia|martio}} * {{Z|ik}}: {{W-|ik|Siqiññaasugruk}} * {{Z|ga}}: {{W+|ga|Márta|n}} * {{Z|it}}: {{W+|it|marzo|n}} * {{Z|is}}: {{W+|is|mars|n}}, {{W+|is|marsmánuður|n}} * {{Z|ja}}: {{W+|ja|三月|tr=さんがつ, sangatsu}}, {{W+|ja|弥生|tr=やよい, yayoi}} * {{Z|jv}}: {{W-|jv|maret}} * {{Z|kl}}: {{W-|kl|marsi}}, {{W-|kl|ullujuersaaq}} * {{Z|xal}}: {{W-|xal|моһа сар}} * {{Z|xbr}}: {{W-|xbr|wulang tailu}} * {{Z|kn}}: {{W+|kn|ಮಾರ್ಚಿ}} * {{Z|pam}}: {{W-|pam|pángakatlung búlan}}, {{W-|pam|mársu}} * {{Z|kea}}: {{W-|kea|marsu}} * {{Z|csb}}: {{W+|csb|strumiannik|n}} * {{Z|ca}}: {{W+|ca|març|n}} * {{Z|ky}}: {{W+|ky|март}} * {{Z|kg}}: {{W-|kg|marisi}} * {{Z|ki}}: {{W-|ki|Kĩhu}} * {{Z|si}}: {{W+|si|මාර්තු}} * {{Z|gil}}: {{W-|gil|Mati}} * {{Z|ko}}: {{W+|ko|삼월}} * {{Z|kw}}: {{W-|kw|mys merth}} * {{Z|co}}: {{W+|co|marzu}} * {{Z|lld}}: {{W-|lld|merz}} * {{Z|la}}: {{W+|la|mārtius|n}} * {{Z|lv}}: {{W+|lv|marts|n}} * {{Z|lo}}: {{W-|lo|ເດືອນມີນາ}}, {{W+|lo|ມີນາ}} * {{Z|lez}}: {{W-|lez|ибне}} * {{Z|ln}}: {{W+|ln|mársi}} * {{Z|li}}: {{W+|li|miert}} * {{Z|lt}}: {{W+|lt|kovas|n}} * {{Z|liv}}: {{W-|liv|märts}}, {{W-|liv|kievādkū}} * {{Z|lb}}: {{W+|lb|Mäerz|n}}, {{W-|lb|Aussenzäit|m}}, {{W+|lb|Lenzmount|n}} * {{Z|mhn}}: {{W-|mhn|merz|n}} * {{Z|mk}}: {{W+|mk|март|n}} * {{Z|ms}}: {{W+|ms|Mac}}, {{W+|ms|Maret}} * {{Z|mt}}: {{W+|mt|Marzu|n}} * {{Z|mnc}}: {{W-|mnc|ᡳᠯᠠᠨ ᠪᡳ᠍ᠶᠠ}} * {{Z|mi}}: {{W-|mi|Māehe}} * {{Z|mr}}: {{W-|mr|मार्च}} * {{Z|hu}}: {{W+|hu|március}} * {{Z|xmf}}: {{W-|xmf|მელახი}} * {{Z|mwl}}: {{W-|mwl|Márcio}} * {{Z|mn}}: *: Kirîlî: {{W-|mn|гуравдугаар сар}} * {{Z|moe}}: {{W-|moe|uinashku-pishimᵘ}} * {{Z|nap}}: {{W-|nap|màrzo|n}} * {{Z|nv}}: {{W-|nv|Wóózhchʼį́į́d}} * {{Z|nds}}: {{W-|nds|März|n}}, {{W-|nds|Märzmaand|n}} * {{Z|no}}: *: {{Z|nb}}: {{W+|nb|mars|n}} *: {{Z|nn}}: {{W+|nn|mars|n}} * {{Z|oj}}: {{W-|oj|onaabani-giizis}} * {{Z|oc}}: {{W+|oc|març|n}} * {{Z|or}}: {{W+|or|ମାର୍ଚ୍ଚ}} * {{Z|om}}: {{W-|om|Bitootessa}} * {{Z|os}}: {{W-|os|мартъи}} * {{Z|ug}}: {{W-|ug|مارت}}, {{W-|ug|ئۈچىنچى ئاي}} * {{Z|uz}}: {{W+|uz|mart}} * {{Z|ps}}: {{W+|ps|مارچ|n|tr=mārč}} * {{Z|pdt}}: {{W-|pdt|Moaz|n}} * {{Z|pl}}: {{W+|pl|marzec|n}} * {{Z|pt}}: {{W+|pt|março|n}} * {{Z|pa}}: {{W-|pa|ਮਾਰਚ|n}} * {{Z|kk}}: {{W+|kk|наурыз}} * {{Z|cop}}: {{W-|cop|ⲙⲁⲣⲧⲓⲟⲥ}} * {{Z|rgn}}: {{W-|rgn|mêrz|n}} * {{Z|rm}}: {{W-|rm|mars|n}}, {{W-|rm|marz|n}} * {{Z|ro}}: {{W+|ro|martie}}, {{W+|ro|mărțișor}} * {{Z|ru}}: {{W+|ru|март|n}} * {{Z|se}}: {{W-|se|njukčamánnu}} * {{Z|smn}}: {{W-|smn|njuhčâmáánu}} * {{Z|sms}}: {{W-|sms|pâˊzzlâšttammään}} * {{Z|sm}}: {{W-|sm|mati}} * {{Z|sc}}: {{W-|sc|martzu|n}}, {{W-|sc|martu}}, {{W-|sc|maltzu}}, {{W-|sc|maltu}} * {{Z|sek}}: {{W-|sek|Nùtsʼiide}} * {{Z|scn}}: {{W+|scn|marzu|n}} * {{Z|sh}}: *: Kirîlî: {{W-|sh|март|n}} *: Latînî: {{W+|sh|mart|n}}, {{W+|sh|ožujak|n}} * {{Z|sco}}: {{W-|sco|Mairch}} * {{Z|cu}}: *: Kirîlî: {{W-|cu|соухъ|n}} * {{Z|sk}}: {{W+|sk|marec|n}} * {{Z|sl}}: {{W+|sl|márec|n}} * Sorbî: *: {{Z|hsb}}: {{W-|hsb|měrc|n}}, {{W-|hsb|nalětnik|n}} * {{Z|nso}}: {{W-|nso|Hlakola}} * {{Z|st}}: {{W+|st|Hlakubele}} * {{Z|es}}: {{W+|es|marzo|n}} * {{Z|su}}: {{W+|su|maret}} * {{Z|sw}}: {{W-|sw|Machi}} * {{Z|ss}}: {{W-|ss|íNdlovu}} * {{Z|sv}}: {{W+|sv|mars|g}} * {{Z|sn}}: {{W-|sn|Kurume}} * {{Z|tg}}: {{W+|tg|март}} * {{Z|tl}}: {{W+|tl|Marso}} * {{Z|ty}}: {{W-|ty|māti}} * {{Z|ta}}: {{W-|ta|மார்ச்}} * {{Z|th}}: {{W+|th|มีนาคม}} * {{Z|te}}: {{W+|te|మార్చి}} * {{Z|tt}}: {{W-|tt|март}} * {{Z|tr}}: {{W+|tr|mart}} * {{Z|tk}}: {{W+|tk|mart}} * {{Z|bo}}: {{W-|bo|ཟླ་བ་གསུམ་པ}} * {{Z|tpi}}: {{W-|tpi|mac}} * {{Z|to}}: {{W-|to|Maʻasi}} * {{Z|udm}}: {{W-|udm|южтолэзь}} * {{Z|ur}}: {{W+|ur|مارچ|n|tr=mārc}} * {{Z|uk}}: {{W+|uk|бе́резень|n}} * {{Z|vec}}: {{W+|vec|marso}} * {{Z|vi}}: {{W+|vi|tháng Ba}}, {{W+|vi|tháng ba}} * {{Z|vo}}: {{W+|vo|mäzul}} * {{Z|vro}}: {{W-|vro|urbõkuu}} * {{Z|wa}}: {{W+|wa|måss}} * {{Z|cy}}: {{W+|cy|Mawrth|n}} * {{Z|win}}: {{W-|win|Wake hikiruxe wiira}} * {{Z|wo}}: {{W-|wo|Maars}} * {{Z|km}}: {{W+|km|មីនា}} * {{Z|sah}}: {{W-|sah|Кулун тутар}} * {{Z|yi}}: {{W+|yi|מאַרץ|n}} * {{Z|esu}}: {{W-|esu|Tengmiirviguaq}} * {{Z|el}}: {{W+|el|Μάρτιος|n}}, {{W+|el|Μάρτης|n}} *: Kevn: {{W-|grc|Μάρτιος|n}} * {{Z|zun}}: {{W-|zun|Łi'dekwakkya Ts'ana}} {{werger-bin}} :{{werger çavkanî|en|March|beş=Ev qismê Wergerê|oldid=75405213}} ==== Anagram ==== * {{anagram|ku|a=aadr|Arda|Dara|arad|dara}} == {{ziman|zza}} == === Navdêr === {{navdêr|zza}} # adar # navê kulîlkek biharê<ref>http://www.kovarabir.com/wp-content/uploads/Ferheng%C3%AA-Dimil%C3%AE-Zazak%C3%AE-%C3%BB-Kurmanc%C3%AE-A-a.pdf</ref> == {{ziman|ckb}} == === Navdêr === {{navdêr|ckb|sc=Latn}} # adar === Çavkanî === {{çavkanî}} == {{ziman|cy}} == === Navdêr === {{navdêr|cy}} # {{mijar|cy|heywan}} {{g|ku|teyr}}, {{g|ku|firinde}}, {{g|ku|balinde}} === Çavkanî === {{rûpela wergerê|cy|teyr}} j6wsxnw6t27lr1o3iv67gi0sv15s21j 6865667 6865666 2026-10-24T17:08:34Z Wikihez 7344 /* Navdêr */ (bi [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]ê re) 6865667 wikitext text/x-wiki {{h-bnr|Adar}} == {{ziman|ku}} == === Bilêvkirin === * {{ku-IPA}} * {{deng|ku|LL-Q36163 (kmr)-Ebulfîda-adar.wav|dever=Bidlîs}} * {{ku-kîte}} === Navdêr === [[Wêne:Daffodil.jpg|thumb|'''Adarê''' [[bihar]] dest pê dike û [[gul]] û [[giya]] şên dibin.]] {{navdêr|ku|z=m}} # [[meh]]a 3 ji [[salname]]ya [[zayînî]] anku [[romî]],<br>li [[Kurdistan]]ê yekem [[meh]]a [[bihar]]ê #* {{J:Feqiyê Teyran|jêgirtin=Ne goyînê di xoşxwîn man<br />Ne nîsan man, ne '''adar''' e<br>Dilo borîn ji nîsanê}} ==== Tewandin ==== {{ku-tewîn-nav|mê}} ==== Bi alfabeyên din ==== * {{ku-ar|ئادار}} * {{ku-kr|адар}} ==== Formên alternatîv ==== * [[avdar]] (di bin tesîra [[etîmolojiya gelêrî]] de) * [[azar]] (2) ==== Jê ==== {{kol3|ku|cure=Jê |adarî |adarok }} ==== Etîmolojî ==== {{etîmon|ku|:deyn|syc:ܐܕܪ<t:adar>}} Hevreha {{hv|ckb|ئادار}}, {{hv|he|אדר|w=adar}} û {{hv|ar|آذار}}... Texmîna ku "adar" ji "av-dar" anku "[[biav]], [[têrav]]" be [[etîmolojiya gelêrî]] ye (bidin ber [[avrêl]]). Piraniya navên mehên din jî yên kurdî û zimanên din yên [[Rojhilata Navîn]] bi rêya îbrî yan aramî ji akadî ne: [[sibat]], [[nîsan]], [[ayar]], [[temûz]], [[ab]], [[îlon]], [[çirî]], [[kanûn]]. ==== Bide ber ==== {{meh/ku}} ;''Navên mehên salnameya kurdî li dûv pîrependên kurdî'': * [[çile]]..., derd û kul e (is upsetting) * [[sibat]]...e, libate e (is active) * adar...e, meşk li dar e (the butter churn is there) * [[nîsan]]...e, dew li kîsan e * [[gulan]]...e, ba û baran e * [[hezîran]].., hezra teyran e * [[temûz]]..., kakil ket gûz * [[tebax]]...e, tirî bûye laxe * [[îlon]]...e, maz bez û don e * [[çirî]]...ye, mal tijî teyr û tajî ye * [[mijdar]]...e, mij û sar e * [[kanûn]]..., xwera xwelkê germerûn e ;''Navên werzên salnameya kurdî li dûv pîrependên kurdî'': * [[pêndixe]]..., derbaz nabe bê tilxe * [[axlêve]]..., bihar tê pê ve * [[newroz]]..., xilas bû dew û doz * [[bihar]]...e, keç û kur har e * [[havîn]]...e, xemrevîn e * [[payîz]]...e, zav zîz e * [[zivistan]]...e, çîrok û çîstan e * Biharê pez, havînê cêz û dêz, payîzê rez, zivistanê ez û ez ==== Herwiha binêre ==== * [[ayar]] ==== Werger ==== {{werger-ser}} * {{Z|abq}}: {{W-|abq|гӏапынхъамыз}} * {{Z|ab}}: {{W-|ab|хәажәкыра}} * {{Z|ady}}: {{W-|ady|гъэтхапэ}} * {{Z|af}}: {{W+|af|Maart}} * {{Z|ak}}: {{W-|ak|Ɔbɛnem}} * {{Z|akz}}: {{W-|akz|hasiholtina istatótchìina}}, {{W-|akz|Màchka}} * {{Z|sq}}: {{W+|sq|mars|n}} * {{Z|pdc}}: {{W-|pdc|Maerz}}, {{W-|pdc|Marz|}}, {{W-|pdc|Matz}} * {{Z|de}}: {{W+|de|März|n}}, {{W+|de|Lenzing|n}} * {{Z|ems}}: {{W-|ems|Kaignasqaq Iraluq}} * {{Z|am}}: {{W-|am|ማርች}} * Apaçî: *: {{Z|apw}}: {{W-|apw|Tʼąąʼ Náchil}}, {{W-|apw|It'ąą' Náchil}}, {{W-|apw|Anezgai}} * {{Z|an}}: {{W+|an|marzo|n}} * {{Z|arc}}: *: {{Z|aii}}: {{W-|aii|ܐܕܪ|tr=adar}} *: {{Z|aii}}: {{W-|aii|ܐܕܪ|tr=ʾāḏār}} * {{Z|rup}}: {{W-|rup|martsu}} * {{Z|as}}: {{W-|as|মাৰ্চ}} * {{Z|ast}}: {{W+|ast|marzu|n}} * {{Z|atj}}: {{W-|atj|Akokatcic pisimw}} * {{Z|az}}: {{W+|az|mart}} * {{Z|eu}}: {{W+|eu|martxo}} * {{Z|be}}: {{W+|be|сакаві́к|n}} * {{Z|bn}}: {{W+|bn|মার্চ}} * {{Z|bi}}: {{W-|bi|maj}} * {{Z|br}}: {{W+|br|Meurzh}}, {{W-|br|miz Meurzh}} * {{Z|bg}}: {{W+|bg|март|n}} * {{Z|my}}: {{W+|my|မတ်}}, {{W-|my|သုံးလ}} * {{Z|dz}}: {{W-|dz|སྤྱི་ཟླ་གསུམ་པ།}} * {{Z|ce}}: {{W-|ce|Зазадоккху-бутт}} * {{Z|cs}}: {{W+|cs|březen|n}} * {{Z|chr}}: {{W-|chr|ᎤᏄᎳᎯ}}, {{W-|chr|ᎠᏅᏱ}} * {{Z|ny}}: {{W-|ny|Malichi}} * {{Z|cic}}: {{W-|cic|Hashi' Atochchí'na'}} * {{Z|zh}}: *: {{Z|yue}}: {{W-|yue|三月|tr=saam1 jyut6}} *: {{Z|hak}}: {{W-|hak|三月|tr=sâm-ngie̍t}} *: {{Z|cmn}}: {{W+|cmn|三月|tr=sānyuè}} *: {{Z|nan}}: {{W-|nan|三月|tr=saⁿ-go̍eh, saⁿ-ge̍h, saⁿ-gōe}} * {{Z|ckt}}: {{W-|ckt|льоргыӄай|tr=lʹorgyqaj}}, {{W-|ckt|ԓьоргыӄай|tr=ḷʹorgyqaj}} * {{Z|cv}}: {{W-|cv|пуш}} * {{Z|dak}}: {{W-|dak|Oomani}} * {{Z|da}}: {{W+|da|marts|g}} * {{Z|dv}}: {{W-|dv|މާރޗް}} * {{Z|dtp}}: {{W-|dtp|Gomot}} * {{Z|id}}: {{W-|id|maret}} * {{Z|ar}}: {{W+|ar|مَارِس|n}}, {{W+|ar|آذَار|n}} *: {{Z|ajp}}: {{W-|ajp|آذار|tr=ʔāḏār}}, {{W-|ajp|شهر تلاتة|tr=šahr talāte}}, {{W-|ajp|آدار|tr=ʔādār}} * {{Z|hy}}: {{W+|hy|մարտ}} *: {{Z|xcl}}: {{W-|xcl|մարտ}} * {{Z|myv}}: {{W-|myv|эйзюрков}} * {{Z|eo}}: {{W+|eo|marto}}, {{W+|eo|Marto}} * {{Z|et}}: {{W+|et|märts}} * {{Z|ee}}: {{W-|ee|Tedoxe}}, {{W-|ee|Mars}} * {{Z|fa}}: {{W+|fa|مارس|tr=mârs}}, {{W-|fa|مارت|tr=mârt}}, {{W-|fa|مارچ|tr=mârč}} * {{Z|fo}}: {{W-|fo|mars}} * {{Z|fj}}: {{W-|fj|Maji}} * {{Z|fi}}: {{W+|fi|maaliskuu}} * {{Z|fr}}: {{W+|fr|mars|n}} * {{Z|fur}}: {{W-|fur|Març|n}} * {{Z|frr}}: *: {{Z|frr}}: {{W-|frr|marts|n}} *: Mooring: {{W-|frr|uursmoune}}, {{W-|frr|martsmoune}}, {{W-|frr|marts}}, {{W-|frr|märts}} * {{Z|stq}}: {{W-|stq|Meerte}} * {{Z|fy}}: {{W+|fy|maart|g}}, {{W+|fy|foarjiersmoanne|g}} * {{Z|gd}}: {{W+|gd|Màrt|n}} * {{Z|gl}}: {{W+|gl|marzo|n}}, {{W-|gl|marzal|n}} * {{Z|ka}}: {{W+|ka|მარტი}} * {{Z|ht}}: {{W-|ht|mas}} * {{Z|haw}}: {{W-|haw|Malaki}} * {{Z|ha}}: {{W+|ha|Maris}} * {{Z|hi}}: {{W+|hi|मार्च|n}} * {{Z|nl}}: {{W+|nl|maart}} * {{Z|hrx}}: {{W-|hrx|Merz|n}} * {{Z|he}}: {{W+|he|מרס|n|tr=mars|cuda=מארס / מַרְס}}, {{W+|he|מֶרְץ|n|tr=merts}} * {{Z|io}}: {{W+|io|marto}} * {{Z|ilo}}: {{W-|ilo|marso}} * {{Z|ang}}: {{W-|ang|hrēþmōnaþ|n}}, {{W-|ang|hlȳda|n}} * {{Z|enm}}: {{W-|enm|March}} * {{Z|en}}: {{W+|en|March}} * {{Z|ia}}: {{W+|ia|martio}} * {{Z|ik}}: {{W-|ik|Siqiññaasugruk}} * {{Z|ga}}: {{W+|ga|Márta|n}} * {{Z|it}}: {{W+|it|marzo|n}} * {{Z|is}}: {{W+|is|mars|n}}, {{W+|is|marsmánuður|n}} * {{Z|ja}}: {{W+|ja|三月|tr=さんがつ, sangatsu}}, {{W+|ja|弥生|tr=やよい, yayoi}} * {{Z|jv}}: {{W-|jv|maret}} * {{Z|kl}}: {{W-|kl|marsi}}, {{W-|kl|ullujuersaaq}} * {{Z|xal}}: {{W-|xal|моһа сар}} * {{Z|xbr}}: {{W-|xbr|wulang tailu}} * {{Z|kn}}: {{W+|kn|ಮಾರ್ಚಿ}} * {{Z|pam}}: {{W-|pam|pángakatlung búlan}}, {{W-|pam|mársu}} * {{Z|kea}}: {{W-|kea|marsu}} * {{Z|csb}}: {{W+|csb|strumiannik|n}} * {{Z|ca}}: {{W+|ca|març|n}} * {{Z|ky}}: {{W+|ky|март}} * {{Z|kg}}: {{W-|kg|marisi}} * {{Z|ki}}: {{W-|ki|Kĩhu}} * {{Z|si}}: {{W+|si|මාර්තු}} * {{Z|gil}}: {{W-|gil|Mati}} * {{Z|ko}}: {{W+|ko|삼월}} * {{Z|kw}}: {{W-|kw|mys merth}} * {{Z|co}}: {{W+|co|marzu}} * {{Z|lld}}: {{W-|lld|merz}} * {{Z|la}}: {{W+|la|mārtius|n}} * {{Z|lv}}: {{W+|lv|marts|n}} * {{Z|lo}}: {{W-|lo|ເດືອນມີນາ}}, {{W+|lo|ມີນາ}} * {{Z|lez}}: {{W-|lez|ибне}} * {{Z|ln}}: {{W+|ln|mársi}} * {{Z|li}}: {{W+|li|miert}} * {{Z|lt}}: {{W+|lt|kovas|n}} * {{Z|liv}}: {{W-|liv|märts}}, {{W-|liv|kievādkū}} * {{Z|lb}}: {{W+|lb|Mäerz|n}}, {{W-|lb|Aussenzäit|m}}, {{W+|lb|Lenzmount|n}} * {{Z|mhn}}: {{W-|mhn|merz|n}} * {{Z|mk}}: {{W+|mk|март|n}} * {{Z|ms}}: {{W+|ms|Mac}}, {{W+|ms|Maret}} * {{Z|mt}}: {{W+|mt|Marzu|n}} * {{Z|mnc}}: {{W-|mnc|ᡳᠯᠠᠨ ᠪᡳ᠍ᠶᠠ}} * {{Z|mi}}: {{W-|mi|Māehe}} * {{Z|mr}}: {{W-|mr|मार्च}} * {{Z|hu}}: {{W+|hu|március}} * {{Z|xmf}}: {{W-|xmf|მელახი}} * {{Z|mwl}}: {{W-|mwl|Márcio}} * {{Z|mn}}: *: Kirîlî: {{W-|mn|гуравдугаар сар}} * {{Z|moe}}: {{W-|moe|uinashku-pishimᵘ}} * {{Z|nap}}: {{W-|nap|màrzo|n}} * {{Z|nv}}: {{W-|nv|Wóózhchʼį́į́d}} * {{Z|nds}}: {{W-|nds|März|n}}, {{W-|nds|Märzmaand|n}} * {{Z|no}}: *: {{Z|nb}}: {{W+|nb|mars|n}} *: {{Z|nn}}: {{W+|nn|mars|n}} * {{Z|oj}}: {{W-|oj|onaabani-giizis}} * {{Z|oc}}: {{W+|oc|març|n}} * {{Z|or}}: {{W+|or|ମାର୍ଚ୍ଚ}} * {{Z|om}}: {{W-|om|Bitootessa}} * {{Z|os}}: {{W-|os|мартъи}} * {{Z|ug}}: {{W-|ug|مارت}}, {{W-|ug|ئۈچىنچى ئاي}} * {{Z|uz}}: {{W+|uz|mart}} * {{Z|ps}}: {{W+|ps|مارچ|n|tr=mārč}} * {{Z|pdt}}: {{W-|pdt|Moaz|n}} * {{Z|pl}}: {{W+|pl|marzec|n}} * {{Z|pt}}: {{W+|pt|março|n}} * {{Z|pa}}: {{W-|pa|ਮਾਰਚ|n}} * {{Z|kk}}: {{W+|kk|наурыз}} * {{Z|cop}}: {{W-|cop|ⲙⲁⲣⲧⲓⲟⲥ}} * {{Z|rgn}}: {{W-|rgn|mêrz|n}} * {{Z|rm}}: {{W-|rm|mars|n}}, {{W-|rm|marz|n}} * {{Z|ro}}: {{W+|ro|martie}}, {{W+|ro|mărțișor}} * {{Z|ru}}: {{W+|ru|март|n}} * {{Z|se}}: {{W-|se|njukčamánnu}} * {{Z|smn}}: {{W-|smn|njuhčâmáánu}} * {{Z|sms}}: {{W-|sms|pâˊzzlâšttammään}} * {{Z|sm}}: {{W-|sm|mati}} * {{Z|sc}}: {{W-|sc|martzu|n}}, {{W-|sc|martu}}, {{W-|sc|maltzu}}, {{W-|sc|maltu}} * {{Z|sek}}: {{W-|sek|Nùtsʼiide}} * {{Z|scn}}: {{W+|scn|marzu|n}} * {{Z|sh}}: *: Kirîlî: {{W-|sh|март|n}} *: Latînî: {{W+|sh|mart|n}}, {{W+|sh|ožujak|n}} * {{Z|sco}}: {{W-|sco|Mairch}} * {{Z|cu}}: *: Kirîlî: {{W-|cu|соухъ|n}} * {{Z|sk}}: {{W+|sk|marec|n}} * {{Z|sl}}: {{W+|sl|márec|n}} * Sorbî: *: {{Z|hsb}}: {{W-|hsb|měrc|n}}, {{W-|hsb|nalětnik|n}} * {{Z|nso}}: {{W-|nso|Hlakola}} * {{Z|st}}: {{W+|st|Hlakubele}} * {{Z|es}}: {{W+|es|marzo|n}} * {{Z|su}}: {{W+|su|maret}} * {{Z|sw}}: {{W-|sw|Machi}} * {{Z|ss}}: {{W-|ss|íNdlovu}} * {{Z|sv}}: {{W+|sv|mars|g}} * {{Z|sn}}: {{W-|sn|Kurume}} * {{Z|tg}}: {{W+|tg|март}} * {{Z|tl}}: {{W+|tl|Marso}} * {{Z|ty}}: {{W-|ty|māti}} * {{Z|ta}}: {{W-|ta|மார்ச்}} * {{Z|th}}: {{W+|th|มีนาคม}} * {{Z|te}}: {{W+|te|మార్చి}} * {{Z|tt}}: {{W-|tt|март}} * {{Z|tr}}: {{W+|tr|mart}} * {{Z|tk}}: {{W+|tk|mart}} * {{Z|bo}}: {{W-|bo|ཟླ་བ་གསུམ་པ}} * {{Z|tpi}}: {{W-|tpi|mac}} * {{Z|to}}: {{W-|to|Maʻasi}} * {{Z|udm}}: {{W-|udm|южтолэзь}} * {{Z|ur}}: {{W+|ur|مارچ|n|tr=mārc}} * {{Z|uk}}: {{W+|uk|бе́резень|n}} * {{Z|vec}}: {{W+|vec|marso}} * {{Z|vi}}: {{W+|vi|tháng Ba}}, {{W+|vi|tháng ba}} * {{Z|vo}}: {{W+|vo|mäzul}} * {{Z|vro}}: {{W-|vro|urbõkuu}} * {{Z|wa}}: {{W+|wa|måss}} * {{Z|cy}}: {{W+|cy|Mawrth|n}} * {{Z|win}}: {{W-|win|Wake hikiruxe wiira}} * {{Z|wo}}: {{W-|wo|Maars}} * {{Z|km}}: {{W+|km|មីនា}} * {{Z|sah}}: {{W-|sah|Кулун тутар}} * {{Z|yi}}: {{W+|yi|מאַרץ|n}} * {{Z|esu}}: {{W-|esu|Tengmiirviguaq}} * {{Z|el}}: {{W+|el|Μάρτιος|n}}, {{W+|el|Μάρτης|n}} *: Kevn: {{W-|grc|Μάρτιος|n}} * {{Z|zun}}: {{W-|zun|Łi'dekwakkya Ts'ana}} {{werger-bin}} :{{werger çavkanî|en|March|beş=Ev qismê Wergerê|oldid=75405213}} ==== Anagram ==== * {{anagram|ku|a=aadr|Arda|Dara|arad|dara}} == {{ziman|zza}} == === Navdêr === {{navdêr|zza}} # adar # navê kulîlkek biharê<ref>http://www.kovarabir.com/wp-content/uploads/Ferheng%C3%AA-Dimil%C3%AE-Zazak%C3%AE-%C3%BB-Kurmanc%C3%AE-A-a.pdf</ref> == {{ziman|ckb}} == === Navdêr === {{navdêr|ckb|sc=Latn}} # adar === Çavkanî === {{çavkanî}} == {{ziman|cy}} == === Navdêr === {{navdêr|cy}} # {{mijar|cy|heywan}} {{g|ku|teyr}}, {{g|ku|firinde}}, {{g|ku|balinde}} === Çavkanî === {{rûpela wergerê|cy|teyr}} q1tcemb0lbgbrpmcse3n8b3ycje22fs YE 0 11141 6865687 6720352 2026-10-24T17:37:23Z Wikihez 7344 sererastkirina Nimûneyên ji edebiyatê (via JWB) 6865687 wikitext text/x-wiki {{h-bnr|-ye|-ye’|-yê|Ye|ye|yé|yê|yě}} == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Kurtenav === {{kurtenav|ku}} # [[Yekîtiya Ewropayê]] # [[Yekîtiya Ereban]] #* {{jêder|ku|jêgirtin='''YE''' (=Yekîtiya Ereban) şertên '''YE''' bi cih naîne|Rudaw.net, 1/2012}} ==== Hevmane ==== * [[EU]] ==== Etîmolojî ==== [[Yeketiya Ewropayê]] û [[Yekîtiya Ereban]] ==== Bide ber ==== * [[DYE]] 9i4jirfeq7w9w3d4a5f3o2heqsfoewn Tîrahî 0 32845 6865676 6561631 2026-10-24T17:31:49Z Wikihez 7344 sererastkirina Nimûneyên ji edebiyatê (via JWB) 6865676 wikitext text/x-wiki {{h-bnr|tîrahî}} == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Navdêr === {{navdêr|ku}} # [[hoz]]ek [[kurd]] e û bi taybetî li [[Bakurê Kurdistanê]] dijî #* {{jêder-websîte|ku|nivîskar=Qahir Bateyî|sernav=Şêx Adî (1075–1162|jêgirtin='''Tîrahî''' yek ji êlên bakurê Kurdistanê ye û nifûsa wan nêzîkî hezar û pênc sed malbatî ye û niha li bakurê Amedê dijîn. Nêzîkî çar sed malbatê wan jî li Anadoliya Navîn, bi qasî 24 kîlometre dûrî Enqereyê niştecih in. Her wisa hin malbat ji vê êlê li başûrê biçûk ê Kurdistanê dijîn.|websîte=Nefel.com|sal=2/2007}} ==== Bide ber ==== * [[tîrahî]] ==== Anagram ==== * {{anagram|ku|a=ahîîrt|harîtî}} easabfxut1nfzk0qm7vcfieqnn1wko3 ajanda 0 33107 6865695 6450565 2026-10-24T17:41:53Z Wikihez 7344 sererastkirina Nimûneyên ji edebiyatê (via JWB) 6865695 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-IPA}} * {{ku-kîte}} === Navdêr === {{navdêr|ku|z=m}} # [[rojev]], [[plan]], [[program]], [[bername]] #* {{jêder|ku|jêgirtin=Eger wek berê cardin derfeta hevdîtinê pêk bê, em amade ne ku hemû pirsgirêkan bi hizreka vekirî gotûbêj bikin. Helbet girêdayî ye bi '''ajandaya''' yê hember, yan jî ku ew dixwaze çi biaxive; lê em amade ne ku hemû tişan bi dostanî biaxivin, destê dostaniyê dirêj bikin pirsgirêkan bi diyalogeka aştiyane çareser bikin.|Mesûd Barzanî di hevpeyivînekê de li gel Mete Çabukçuyê rojnamevanê NTVya tirkî, wergerrandin: Netkurd.com, 2/2007}} ==== Tewandin ==== {{ku-tewîn-nav|mê}} ==== Bi alfabeyên din ==== * {{ku-ar|ئاژاندا}} ==== Etîmolojî ==== {{bêetîmolojî|ku}} ==== Werger ==== {{werger-ser}} * {{Z|ar}}: {{W-|ar|جدول}}, {{W-|ar|اجندة}} * {{Z|fa}}: {{W+|fa|دستورکار}}, {{W+|fa|سرلوحه}} * {{Z|en}}: {{W+|en|agenda}}, {{W+|en|plan}} * {{Z|tr}}: {{W+|tr|ajanda}} {{werger-bin}} ==== Anagram ==== * {{anagram|ku|a=aaadjn|ajdana}} == {{ziman|tr}} == === Bilêvkirin === * {{deng|tr|LL-Q256 (tur)-ToprakM-ajanda.wav|Deng|dever=Îzmîr, Tirkiye}} === Navdêr === {{navdêr|tr}} # [[agahname]], [[ajanda#ku|ajanda]] sl7xbseuro0yuxz215za6hdj04ncvz0 albîno 0 36570 6865697 6454906 2026-10-24T17:44:39Z Wikihez 7344 sererastkirina Nimûneyên ji edebiyatê (via JWB) 6865697 wikitext text/x-wiki {{h-bnr|albino}} == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Rengdêr === {{ku-tewîn-rd|albîno}} {{rengdêr|ku}} # [[heywan]]ên ku [[pîgment]] li [[leş]]ê wan nîne û [[loma]] [[reng]]ê wan [[spî]] yan [[zer]] e [[tevî ku]] [[nijad]]ê wan ji [[reng]]ên [[din]] e #* {{jêder-websîte|ku|jêgirtin=Li gor encamên lêkolînan, Zal dema ji diya xwe çê dibe, "'''Albîno'''" ye, ango hemî pûrta canê wî sipî ye: Birû û bijang û pora serî sipî ye, weke hiriya pez e.|nivîskar=Edîb Polat|sernav=Di Destana Ristemê Zabilî de rola Teyrê Sîmir|websîte=Amidakurd.com|sal=4/2004}} ==== Jê ==== * [[albînîzm]] * [[albînotî]] * [[albînoyî]] ==== Etîmolojî ==== Ji latînî [[albus]] / [[alba]] ([[spî]]) ==== Werger ==== {{werger-ser}} * {{Z|de}}: {{W+|de|#German}} * {{Z|da}}: [[#Danish|albino]] (hyphenates to noun) * {{Z|eo}}: {{W-|eo|albina#Esperanto}} * {{Z|fi}}: [[albiino]] (compounds to noun) * {{Z|fr}}: {{W-|fr|albinos#French}} * {{Z|nl}}: {{W+|nl|#Dutch}} * {{Z|en}}: {{W+|en|albino}} * {{Z|no}}: [[#Norwegian (Bokmål)|albino]] * {{Z|pt}}: [[#Portguese|albino]]/[[albina#Portguese|albina]] * {{Z|es}}: [[#Spanish|albino]]/[[albina#Spanish|albina]] * {{Z|sv}}: {{W+|sv|#Swedish}} * {{Z|tr}}: {{W+|tr|albino}} {{werger-bin}} ==== Anagram ==== * {{anagram|ku|a=abîlno|balonî|lobîna}} 0p30wydcn8clw3f2nzsilxt3053k97m VIP 0 46168 6865678 6467994 2026-10-24T17:33:26Z Wikihez 7344 sererastkirina Nimûneyên ji edebiyatê (via JWB) 6865678 wikitext text/x-wiki == {{ziman|en}} == === Navdêr === {{navdêr|en}} # Rîasî, kesa/ê [[xwedî]] hin [[imtiyaz]]an, kesa/ê ku hin [[maf]]ên [[taybet]] hene. == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Navdêr === {{navdêr|ku}} # kesa/ê [[xwedî]] hin [[imtiyaz]]an, <br>kesa/ê ku hin [[maf]]ên [[taybet]] hene #* {{jêder|ku|Netkurd.com, 10/2007|jêgirtin=Yazicioglu dibêje ev kes dê di rewşa '''VIPê''' de bin. Dewlet dê nasnameyên taybet bide wan. Dê bi qanûnan wan biparêze. Ew dê legal bin loma jî dê gotin li ser wan dernekevin.}} ==== Etîmolojî ==== Ji îngilîzî [[very]] [[important]] [[person]] ([[kes]]a/ê [[gelek]] [[giring]]) ==== Anagram ==== * {{anagram|ku|a=ipv|piv}} 1k4tttu2in57u2srgo7yt5fcxs52cm5 Simko 0 46285 6865671 6468198 2026-10-24T17:27:58Z Wikihez 7344 sererastkirina Nimûneyên ji edebiyatê (via JWB) 6865671 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-IPA}} * {{ku-kîte}} === Navdêr === {{navdêr|ku|z=n}} # [[Smaîl]], [[Îsmaîl]], [[nav]]ek [[zelam]]an e #* {{jêder|ku|Avestkurd.net, 10/2007|jêgirtin=Berpirsiyarekî Dîwana seroktiyê '''Simko''' Enwer ji malpera Melef Press ragihand ku ew nûçe derewe û tu bingeheke wê ya rastîn tune ye...}} # {{kontrol|rêz=erê|[[Simaîl]]}} ==== Anagram ==== * {{anagram|ku|a=ikmos|simok}} 8zfvq0f1417o3a3ourt13eadi5lvhpp şoperêç 0 48809 6865706 6470749 2026-10-24T22:45:47Z InternetArchiveBot 8979 Rescuing 1 sources and tagging 0 as dead. #IABot (v2.0.9.6) 6865706 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Navdêr === {{navdêr|ku|z=m}} # [[şop|Şopa]] tiştekî di şiklê rê de. # {{f|ku|mecazî}} Hemû [[nîşan]]ên ku ber bi ciyekî [[derketin|derin]]. #* {{jêder-malper|1=ku|jêgirtin='''Şoperêçên''' Ergenekonê ta ber derîyê Serkanîya Giştî derin.|malper=netkurd.com|nivîskar=Mahmut KILINC|dîrok=30.01.2008|sernav=Şoperêçên Ergenekonê Ta Ber Derîyê Serkanîya Giştî Derin|url=https://web.archive.org/web/20080202012659/http://www.netkurd.com/gotar_bixwine.asp?yazid=78&id=1547|urlya-arşîvê=https://web.archive.org/web/20080202012659/https://web.archive.org/web/20080202012659/http://www.netkurd.com/gotar_bixwine.asp?yazid=78&id=1547}} ==== Tewandin ==== {{ku-tewîn-nav|mê}} ==== Hevmane ==== * {{g|ku|şoperê}} ==== Etîmolojî ==== {{bêetîmolojî|ku}} ==== Bide ber ==== * [[şopl]] ==== Werger ==== {{werger-ser}} * {{Z|de}}: {{W+|de|Fußstapfen|m}} * {{Z|tr}}: {{W+|tr|ayak izi}}, {{W+|tr|iz}}, {{W-|tr|izlerin oluşturduğu yol}} {{werger-bin}} eyj55xxwfnqpmmp1swtytceqm5amqf0 îfşa 0 48816 6865670 6731646 2026-10-24T17:26:37Z Wikihez 7344 Kurmancî/Navdêr: beşa «Etîmolojî» hate nûkirin (DefSideBoxes) 6865670 wikitext text/x-wiki {{h-bnr|ifşa}} == {{ziman|ku}} == === Bilêvkirin === * {{IPA|ku|/iːfˈʃɑː/}} * {{ku-kîte}} === Navdêr === {{navdêr|ku|z=m}} # [[diyar]]kirin, [[daxwiyandin]], [[aşkere]]kirin, [[xwiya]]kirin ==== Ji wêjeyê ==== ''Wezîrê perwerdeyê yê hukumeta Kurdistanê Dilşad Ebdurrehman di hevpeyivîna xwe de ya ku duh rojnameya Kurdistanî Nwê pê re kiriye, bi mixabiniyeka mezin hebûna perwerdeyê li devera Bahdînan a bi zaravayê kurmancî xeteraka mezin dibîne. Ew diyar dike ku ev ne encama biryara wî ye, ji biryarên wezîren berê tê. Dilşad Ebdurrehman her wiha îfşa dike ku nuha jî nameyên nivîsandî yên resmî ji dezgehên resmî yên deverê bi kurmancî ji wan re tên û ew vê yekê wek xetereka mezin a perçekirina yekîtiya neteweyê kurd dibîne.'' (Mûrad Ciwan: ''Israra "zimanekî yekgirtî" stalînîzm e'', Netkurd.com, 2/2008) ==== Tewandin ==== {{ku-tewîn-nav|mê}} ==== Jê ==== {{kol3|ku|cure=Jê |îfşa kirin<crz:lêker> |îfşakirin<crz:navdêr> |îfşakirî<crz:rengdêr> }} ==== Etîmolojî ==== {{etîmon|ku|:deyn|ar:إِفْشَاء}} ==== Werger ==== {{werger-ser}} * {{Z|de}}: {{W|de|Denunziation|f}} * {{Z|fa}}: {{W+|fa|افشا}} * {{Z|en}}: {{W+|en|revelation}} * {{Z|tr}}: {{W+|tr|ifşa}} {{werger-bin}} ==== Anagram ==== * {{anagram|ku|a=afîş|afîş|faşî|şafî|şîfa}} hkjffcelmym4741fafc64io5lh3l71j UNHCR 0 49921 6865677 6136515 2026-10-24T17:32:34Z Wikihez 7344 sererastkirina Nimûneyên ji edebiyatê (via JWB) 6865677 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Kurtenav === {{kurtenav|ku}} # [[rêkxistin]]a [[penaber]]an ya [[Neteweyên Yekbûyî]] #* {{jêder|ku|Krg.org, 4/2008|jêgirtin=Îro şandeyeke Komisyona Bilind a Penaberan a Neteweyên Yekbûyî ('''UNHCR''') bi serokatiya Daniel Andres nûnerê UNCHR bo karûbarê penaberan li Iraqê, serdana wezareta karûbarên deverên derveyî herêma Kurdistanê, kir û ji aliyê Mehemed Îhsan wezîrê karûbarên deverên veqetayî ji herêma Kurdistan ve hate pêşwazî kirin.}} ==== Etîmolojî ==== Ji îngilîzî llklprflg3t6fwpiep8urnl37ea5dn2 Xano 0 50173 6865681 6472249 2026-10-24T17:34:53Z Wikihez 7344 sererastkirina Nimûneyên ji edebiyatê (via JWB) 6865681 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Serenav === {{serenav|ku|z=n}} # [[nav]]ek [[zelam]]an e #* {{jêder|ku|Çiya Mazî, Diyarname.com, 7/2008|jêgirtin='''Xanoyê''' Çengzêrrîn lehengekî kurd ê efsanewî ye. Serokê Kela Dimdimê ye.}} ==== Anagram ==== * {{anagram|ku|a=anox|naxo}} 5td17n2o7kwql94diw9wjy0arf62gz0 zinaqî 0 53464 6865705 6865495 2026-10-24T21:31:39Z InternetArchiveBot 8979 Rescuing 1 sources and tagging 0 as dead. #IABot (v2.0.9.6) 6865705 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Navdêr === {{navdêr|ku}} # [[bêzar]], [[acizbûyî]] #* {{jêder-websîte|1=ku|url=https://web.archive.org/web/20090423012036/http://www.lotikxane.com/Bargiran%20Baran.htm|nivîskar=Bargiran Baran|sernav=RÊWÎTÎYA STENBOLÊ|urlya-arşîvê=https://web.archive.org/web/20090423012036/https://web.archive.org/web/20090423012036/http://www.lotikxane.com/Bargiran%20Baran.htm|tarîx=06.09.2008|jêgirtin=Şîretên wan ên ez '''zinaqî''' dikirim.|websîte=lotikxane.com}} ==== Jê ==== {{kol3|ku|cure=Jê |zinaqî bûn<crz:lêker> |zinaqî kirin<crz:lêker> |zinaqîbûn<crz:navdêr> |zinaqîkirin<crz:navdêr> |zinaqîbûyî<crz:rengdêr> |zinaqîkirî<crz:rengdêr> }} ==== Etîmolojî ==== {{bêetîmolojî|ku}} ==== Werger ==== {{werger-ser}} * {{Z|tr}}: {{W+|tr|bıkkın}}, {{W-|tr|usanmış}} {{werger-bin}} miaomqxiru65207ylfejqkrqcaknbzn Vaniya 0 53591 6865679 6475144 2026-10-24T17:33:37Z Wikihez 7344 sererastkirina Nimûneyên ji edebiyatê (via JWB) 6865679 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Navdêr === {{navdêr|ku|z=m}} # [[nav]]ek [[jin]]an e #* {{jêder|ku|Rudaw.net, 9/2009|jêgirtin='''Vaniya''' Behaedîn a 25 salî, gelek hez dike êvaran bi bisîklêt were derve û bigere, lê dibêje: “Li bajarê me cadeyek tune ku taybet bi keçan an bo ajotina bisîklêtan be. Em ji destê otomobîlan bêzar bûne vêca dora bisîklêt e.”}} ==== Tewandin ==== {{ku-tewîn-nav|mê}} ==== Anagram ==== * {{anagram|ku|a=aainvy|Viyana|viyana}} 24o9dubxrdf5bx9j9jb6s43r1siu83h Tofîq 0 54486 6865675 6807260 2026-10-24T17:29:52Z Wikihez 7344 sererastkirina Nimûneyên ji edebiyatê (via JWB) 6865675 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-IPA}} * {{ku-kîte}} === Navdêr === {{navdêr|ku|z=n}} # [[nav]]ek [[zelam]]an e #* {{jêder|ku|Nefel.com, 12/2009|jêgirtin=Li gor Mihemed '''Tofîq''' Rehîm divê hemî partî “bi şêweyekî vekirî û demokratîk digel wan tev bigerin, wê li ber çav bigirin ko ew hizb in û bi awayekî hêja û baş digel wan tev bigerin”.}} ==== Formên alternatîv ==== * [[Tewfîq]] ==== Etîmolojî ==== {{etîmon|ku|:deyn|ar:توفيق<t:[[bextiyar]], [[xweşbext]], [[bisiûd]]>|metnna=1}} Ji {{deyn|ar|ku|توفيق|w=[[bextiyar]], [[xweşbext]], [[bisiûd]]}} ji {{g|ar|وفق|tr=wefiqe|w=[[bi ser ketin]], [[serfiraz]] bûn}} gmsajz53raki1ajhtzcp9hveg5p3jo3 agîtasyon 0 56039 6865694 6477735 2026-10-24T17:41:28Z Wikihez 7344 sererastkirina Nimûneyên ji edebiyatê (via JWB) 6865694 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-IPA}} * {{ku-kîte}} === Navdêr === {{navdêr|ku|z=m}} # [[şarandin]], [[teşwîqkirin]], [[lêsorkirin]], [[ajawekirin]] #* {{jêder-websîte|ku|jêgirtin=Balkêş e, ko êmîgrantekî rûs – Rîkov mîlyonek dolar dabû bona çapkirina kovarê, ko bi emirkaneke dewlemend ra zewicî bû û dilê wî bi daşnakan ra bû. Daşnakan ji bo armancên sîyasî li her deran didane xuyakirin, ko pêwendîyên wan bi nasyonalîstên kurdan ra heye û bê bingeh (bi gotinên rojnameya ermenî - “Yêrêvan“, ko li Parîsê derdiket) digot, ko serhildana Araratê ji Kurdistana Başûr dihate serkarîkirinê. Mûsil û Rêwandûz navbendên sereke yên '''agîtasyona''' kurdan bûn, îngilîsan xudêgiravî bi riya serhing Lawrence piştgirîya serhildana kurdan dikirin, lê armanca xoybûnîyan ew bû, ko li devera Dîyarbekir-Nisêbînê leşkerên tirkan bigirin.|nivîskar=Têmûrê Xelîl|sernav=Peywendiyên Xoybûnê û Daşnaksûtyûnê|websîte=Nefel.com|sal=9/2010}} ==== Tewandin ==== {{ku-tewîn-nav|mê}} ==== Formên alternatîv ==== * [[ajîtasyon]] ==== Etîmolojî ==== Bi rêya fransî [[agitation]] ji latînî [[agitatio]] ji [[agitere]] 2zlq2fydb8f1f6kq0x5d7efshk9jqfg Xwedê efû bike 0 57780 6865683 6346718 2026-10-24T17:35:39Z Wikihez 7344 sererastkirina Nimûneyên ji edebiyatê (via JWB) 6865683 wikitext text/x-wiki == {{ziman|ku}} == === Biwêj === {{biwêj|ku}} # [[dua]]yek bo [[kes]]a/ê ku [[mirin|miriye]] #* {{jêder-websîte|ku|jêgirtin=Piştî telqîn jî qediya ew kesên gelik nêzîkî yê mirî (bab, kur, bira, pismam) dibûn rêz, hemû kesên li wir di ber wan re derbas dibûn û yekoyeko destê wan toqe dikir û serxweşî li wan didan. Malzemeyên serxweşiyê jî ev bûn: “'''Xwedê efû bike'''”, “Xwedê cihê wî bike biheşt”, “serê te/hewe sax be”, “Xwedê vê dinyayê neîne bîrê”, “Xwedê te/hewe şûna wî bihêle”...|nivîskar=Abdulkadir Bingöl|sernav=Li Cizîra Botan mirin û dêlindêza mirinê|websîte=Nefel.com|sal=12/2010}} ==== Formên alternatîv ==== * [[Xwedê wî efû bike]] * [[Xwedê wê efû bike]] 75jmjtpkm661s6pxig8pr68z83yww88 Xwedê cihê wî bike biheşt 0 57781 6865682 6346794 2026-10-24T17:35:17Z Wikihez 7344 sererastkirina Nimûneyên ji edebiyatê (via JWB) 6865682 wikitext text/x-wiki == {{ziman|ku}} == === Biwêj === {{biwêj|ku}} # [[dua]]yek bo [[kes]]ê ku [[mirin|miriye]] #* {{jêder-websîte|ku|jêgirtin=Piştî telqîn jî qediya ew kesên gelik nêzîkî yê mirî (bab, kur, bira, pismam) dibûn rêz, hemû kesên li wir di ber wan re derbas dibûn û yekoyeko destê wan toqe dikir û serxweşî li wan didan. Malzemeyên serxweşiyê jî ev bûn: “Xwedê efû bike”, “'''Xwedê cihê wî bike biheşt'''”, “serê te/hewe sax be”, “Xwedê vê dinyayê neîne bîrê”, “Xwedê te/hewe şûna wî bihêle”...|nivîskar=Abdulkadir Bingöl|sernav=Li Cizîra Botan mirin û dêlindêza mirinê|websîte=Nefel.com|sal=12/2010}} ==== Bo jinan ==== * [[Xwedê cihê wê bike biheşt]] r022q9dce8dnsyxnbscdyoqyhwcafi7 Xwedê vê dinyayê neîne bîrê 0 57782 6865684 5774273 2026-10-24T17:36:28Z Wikihez 7344 sererastkirina Nimûneyên ji edebiyatê (via JWB) 6865684 wikitext text/x-wiki == {{ziman|ku}} == === Biwêj === {{biwêj|ku}} # [[Xwedê cihê wî bike biheşt]] #* {{jêder-websîte|ku|jêgirtin=Piştî telqîn jî qediya ew kesên gelik nêzîkî yê mirî (bab, kur, bira, pismam) dibûn rêz, hemû kesên li wir di ber wan re derbas dibûn û yekoyeko destê wan toqe dikir û serxweşî li wan didan. Malzemeyên serxweşiyê jî ev bûn: “Xwedê efû bike”, “Xwedê cihê wî bike biheşt”, “serê te/hewe sax be”, “'''Xwedê vê dinyayê neîne bîrê'''”, “Xwedê te/hewe şûna wî bihêle”...|nivîskar=Abdulkadir Bingöl|sernav=Li Cizîra Botan mirin û dêlindêza mirinê|websîte=Nefel.com|sal=12/2010}} ==== Etîmolojî ==== Ji ''[[Xwedê]] + [[vê]] + [[dinyayê]] + [[neîne]] + [[bîrê]]'' ==== Werger ==== {{werger-ser}} * {{Z|tr}}:{{W-|tr|requiescat in pace|guman=erê}} {{werger-bin}} s9oi3b78xtq2klpenvxlmqggcu5w13s Ziyad 0 60464 6865689 6723768 2026-10-24T17:38:33Z Wikihez 7344 sererastkirina Nimûneyên ji edebiyatê (via JWB) 6865689 wikitext text/x-wiki {{h-bnr|ziyad}} == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Serenav === {{serenav|ku|z=n}} # [[nav]]ek [[zelam]]an e #* {{jêder|ku|jêgirtin=Wênegir û derhêner Dilêr Emer bi filmek dokumentî ya li ser jiyan û berhemên hunermend '''Ziyad''' Eshed ve mijûl e.|Rudaw.net, 5/2011}} ==== Formên alternatîv ==== * [[Ziya]] ==== Etîmolojî ==== Ji {{deyn|ar|ku}} ==== Anagram ==== * {{anagram|ku|a=adiyz|zayid}} csml6lyvt2qs8vhrnpm31l6cl9l6rwq Spîxane 0 61417 6865673 6807756 2026-10-24T17:28:56Z Wikihez 7344 sererastkirina Nimûneyên ji edebiyatê (via JWB) 6865673 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Serenav === {{serenav|ku|z=m}} # [[dever]]ek e li [[Bakurê Kurdistanê]] û [[zozan]]a wê deverê ye #* {{jêder|ku|jêgirtin=Em diçûn zozanên Bala, '''Spîxane''' û Gilezo lê pişti ew hatin qedexekirin, em niha tên zozanên Berçelan.|Rudaw.net, 7/2011}} ==== Bi alfabeyên din ==== * {{ku-ar|سپیخانه}} ==== Formên alternatîv ==== * [[Sipîxane]] ==== Jê ==== * [[spîxaneyî]] * [[spîxaneyîtî]] ==== Etîmolojî ==== {{etîmon|ku|:qertaf|spî|-xane}} ==== Anagram ==== * {{anagram|ku|a=aeînpsx|îspenax}} ibi4zt8gcuah8iwfqbl4k6p2r4k4rnq Xwedê xêra te binivîse 0 61537 6865685 6346647 2026-10-24T17:36:43Z Wikihez 7344 sererastkirina Nimûneyên ji edebiyatê (via JWB) 6865685 wikitext text/x-wiki == {{ziman|ku}} == === Biwêj === {{biwêj|ku}} # [[spas]], [[memnûn]], [[teşekur]], [[şikir]], [[mala te ava]], [[Xwedê ji te razî be]], [[Xwedê te bihêle]], [[sihetxweş]], [[destxweş]], <br>[[peyv]]ek [[şîrîn]] kesek ji ber [[qencî|qenciya]] kesek din dibêje #* {{jêder|ku|jêgirtin=Dibêjin serokê Herêma Kurdistanê Mesûd Barzanî dê Şivan Perwer û Gulistan Perwer li hev bîne!! Ma ev ne ecêbe looo. Lê ez dibêjim çi karên serokê herêmê nemane loma ji xwe re li van karan digere. Seroko, ev ne karê teye ez benî! Raste tu kesekî camêrî lê pêtivîye û dikarî karên camêranetir bikî.Ka carê tu arîşeyên hemwelatîyên herêma Kurdistanê çareser bike piştre bi dû van karan bikeve. Li dawîyê her dibêjin sipas û '''Xwedê xêra te binivîse'''... Ev jî karekî başe lê baştir jî hene, hesdikin tu ji bîra nekî...|Lotikxane.com, 7/2011}} ==== Formên alternatîv ==== * [[Xudê xêra te binivîse]] ==== Etîmolojî ==== Ji baweriya ku dibêje: Xwedê yan [[firîşte]]yên Wî her xêr û gunehên mirovan dinivîsin daku paşî li [[roja qiyametê]] werin jimartin û mirov pê bên xelat- yan cezakirin. ==== Bo kesên din ==== * [[Xwedê xêra wê binivîse]] * [[Xwedê xêra wî binivîse]] * [[Xwedê xêra we binivîse]] * [[Xwedê xêra wan binivîse]] ==== Werger ==== {{werger-ser}} <!--* {{Z|th}}: khop-khuun (needs script!)--> * {{Z|aa}}: {{W-|aa|gadda ge}} * {{Z|eu}}: {{W+|eu|eskerrik asko}} * {{Z|cs}}: {{W+|cs|děkuji}} * {{Z|zh}}: {{W+|zh|謝謝}}/{{W+|zh|谢谢}} (xièxie); {{W+|zh|多谢}} (duōxiè) * {{Z|da}}: {{W+|da|tak}} * {{Z|de}}: {{W+|de|danke}}, {{W+|de|danke schön}}, {{W-|de|vielen Dank}} * {{Z|hy}}: {{W-|hy|շնորհագալ յեմ}} (šnorhagal yem) * {{Z|eo}}: {{W+|eo|dankon}}, {{W-|eo|mi dankas}} * {{Z|fj}}: {{W-|fj|vinaka}} * {{Z|fi}}: {{W+|fi|kiitos}} * {{Z|fr}}: {{W+|fr|merci}} * {{Z|gd}}: {{W-|gd|mòran taing}} (dominant form), {{W-|gd|go raibh maith agat}} (dîalêkt [[w:Islay|Islay]]) * {{Z|ka}}: {{W-|ka|მადლობთ}} * {{Z|haw}}: {{W-|haw|mahalo}} * {{Z|nl}}: {{W+|nl|dank u}}, {{W-|nl|dank je}}, {{W+|nl|dankjewel}}, {{W+|nl|bedankt}} * {{Z|hu}}: {{W+|hu|köszönöm}} * {{Z|he}}: {{W+|he|תודה}} * {{Z|id}}: {{W+|id|terimakasih}}, {{W+|id|terima kasih}}, {{W+|id|makasih}} → kollokwîyal * {{Z|en}}: {{W+|en|thanks}}, {{W+|en|thank you}} * {{Z|ga}}: {{W-|ga|go raibh maith agat}} {{s}}, {{W-|ga|go raibh maith agaibh}} {{p}} * {{Z|it}}: {{W+|it|grazie}} * {{Z|is}}: {{W+|is|takk}} * {{Z|ja}}: {{W+|ja|ありがとう}} (arigatō), {{W+|ja|すみません}} (sumimasen), {{W+|ja|どうも}} (dōmo), {{W+|ja|どうもありがとう}} (dōmo-arigatō), {{W+|ja|どうもすみません}} (dōmo-sumimasen) * {{Z|ca}}: {{W+|ca|gràcies}}, {{W+|ca|moltes gràcies}}, {{W+|ca|mercès}} * {{Z|gil}}: {{W-|gil|ko rabwa}}, {{W-|gil|kam rabwa}} (to several people) * {{Z|ko}}: {{W-|ko|고맙습니다}} (go.mab.sŭp.ni.da) * {{Z|sh}}: {{W+|sh|hvala}} * {{Z|la}}: {{W+|la|gratia}} * {{Z|nah}}: {{W+|nah|tlazohcamati}} * {{Z|no}}: {{W+|no|takk}} * {{Z|pl}}: {{W+|pl|dziękuję}} * {{Z|pt}}: {{W+|pt|obrigado}} (♂); {{W+|pt|obrigada}} (♀); {{W+|pt|obrigados}}/{{W+|pt|obrigadas}} {{p}} * {{Z|qu}}: {{W-|qu|agradisiyki}} * {{Z|ro}}: {{W+|ro|mulţumesc}}, {{W+|ro|mersi}} * {{Z|ru}}: {{W+|ru|спасибо}} * {{Z|sh}}: “{{W-|sh|хвала}} * {{Z|sk}}: {{W+|sk|ďakujem}} {{s}}, {{W+|sk|ďakujeme}} {{p}} * {{Z|sl}}: {{W+|sl|hvala}} * {{Z|es}}: {{W+|es|gracias}}, {{W+|es|muchas gracias}} * {{Z|sv}}: {{W+|sv|tack}} * {{Z|ta}}: {{W+|ta|நன்றி}} (naṇṟi) * {{Z|tr}}: {{W+|tr|teşekkür ederim}} * {{Z|vi}}: {{W+|vi|cám ơn}} [感恩] ([[ông]], {{W-|vi|bà#vi}}, {{W-|vi|cô#vi}}, {{W-|vi|anh#vi}}, {{W+|vi|chị}}, {{W-|vi|em#vi}}, {{W-|vi|quí vị}}, [[cảm ơn]] (ông, {{W+|vi|bà}}, {{W+|vi|cô}}, {{W+|vi|anh}}, {{W+|vi|chị}}, {{W+|vi|em}}, quí vị) * {{Z|el}}: {{W+|el|ευχαριστώ}} (euharistṓ) {{werger-bin}} s0g9r587y8f2wt8qzuoo6o9sbc6t22e YKSS 0 61613 6865688 6326851 2026-10-24T17:37:39Z Wikihez 7344 sererastkirina Nimûneyên ji edebiyatê (via JWB) 6865688 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Kurtenav === {{kurtenav|ku}} # [[kurte]]ya [[Yekîtiya Komarên Sosyalîst ên Sovyetê]]<br>([[konfederasyon]]a [[Rusya]]yê û gelek [[welat]]ên [[Ewropaya Rojhilat]] û [[Asyaya Navîn]] ji 1922 ta 1991) #* {{jêder|ku|jêgirtin=Alîyê parastinê bi awayekî bi kêrî Borîs Yeltsîn û Egor Gaîdar (rêberê "terapîya şokê") - ên "ku '''YKSSê''' ji xela û şerê navxweyî rizgar kir"- bê, bersivê didin vê gunehbarîyê.|Jean-Marie Chauvier: ''Cinên Meydana Sor'', wergerrandin: Simko Destan, Le Monde Diplomatique kurdî, hj. 19, 6/2011}} ==== Etîmolojî ==== {{bêetîmolojî|ku}} ==== Werger ==== {{werger-ser}} * {{Z|de}}: {{W+|de|UdSSR}} {{mê}} * {{Z|az}}: [[ССРИ]] (SSRJ), {{W-|az|SSRİ|xs=Azeri}} * {{Z|be}}: {{W-|be|СССР|tr=SSSR}} {{n}} * {{Z|bn}}: {{W-|bn|সোভিয়েত সমাজতান্ত্রিক প্রজাতন্ত্রের ঐক্য}} * {{Z|bg}}: {{W-|bg|СССР|tr=SSSR}} {{n}} * {{Z|cs}}: {{W+|cs|SSSR}} * {{Z|zh}}: *: {{Z|cmn}}: {{W+|cmn|蘇聯|sc=Hani}}, {{W-|cmn|苏联|tr=Sūlián}} * {{Z|cv}}: [[СССР]] (SSSR) * {{Z|id}}: {{W-|id|Uni Soviet|xs=Indonesian}} * {{Z|ar}}: {{W|ar|tr=al-ittiHaad al-sufiaatiy|الاتحاد السوفيتي}} {{n}} * {{Z|hy}}: [[ՍՍՀՄ]] (SSHM), [[ԽՍՀՄ]] (XSHM) * {{Z|eo}}: {{W-|eo|USSR|xs=Esperanto}} * {{Z|et}}: {{W-|et|NSVL}} * {{Z|fa}}: {{W-|fa|اتحاد جماهیر شوروی سوسیالیستی|xs=Persian}} * {{Z|fi}}: {{W+|fi|SNTL}} * {{Z|fr}}: {{W+|fr|URSS}} {{mê}} * {{Z|ka}}: {{W+|ka|სსრკ|tr=SSRK}} * {{Z|hi}}: {{W-|hi|सोवियत संघ|tr=soviyat saṅgh}}, {{W-|hi|सोवियत यूनियन|tr=soviyat yūniyan}} * {{Z|nl}}: {{W-|nl|USSR}} * {{Z|he}}: {{W-|he|ברית המועצות}} * {{Z|en}}: {{W+|en|USSR}}, {{W+|en|CCCP}} * {{Z|ia}}: {{W-|ia|URSS}} * {{Z|is}}: {{W-|is|Sovétríkin}} * {{Z|ja}}: {{W+|ja|ソ連|tr=それん, Sóren}}, {{W+|ja|蘇連|tr=それん}} * {{Z|ky}}: [[ССРС]] (SSRS) * {{Z|ko}}: {{W+|ko|소비에트 연방|tr=Sobieteu yeonbang}} * {{Z|lt}}: {{W+|lt|PSRS}}, {{W+|lt|TSRS|xs=Lithuanian}} * {{Z|mk}}: {{W+|mk|СССР|tr=SSSR}} {{n}} * {{Z|hu}}: {{W+|hu|SZSZKSZ}} * {{Z|no}}: {{W-|no|Sovjetunionen}} * {{Z|os}}: [[ССРЦ]] (SSRTs) * {{Z|uz}}: [[ССPИ]] (SSRY) * {{Z|pl}}: {{W+|pl|ZSRR}} * {{Z|pt}}: {{W+|pt|URSS}} {{mê}} * {{Z|kk}}: {{W-|kk|КСРО|tr=KSRO}} * {{Z|ro}}: {{W-|ro|URSS}} * {{Z|ru}}: {{W+|ru|СССР|tr=SSSR}} {{n}} * {{sh}} : *: Kirîlî: {{W-|sh|СССР|m|sc=Cyrl|xs=Serbo-Croatian}} *: Roman: {{W-|sh|SSSR|m|xs=Serbo-Croatian}} * {{Z|sh}}: {{W-|sh|SSSR}} * {{Z|es}}: {{W+|es|URSS}} {{mê}} * {{Z|th}}: {{W-|th|ม่านเหล็ก|tr=mâan-lèk}} * {{Z|tt}}: {{W-|tt|СССР|tr=SSSR}} {{n}} * {{Z|tr}}: {{W+|tr|SSCB}}, {{W-|tr|sscb|guman=erê}} * {{Z|uk}}: {{W+|uk|СРСР|tr=SRSR}} {{n}} * {{Z|vi}}: {{W-|vi|Liên Xô|xs=Vietnamese}} * {{Z|km}}: {{W-|km|ស.ស.ស.ស|tr=S.S.S.S.}} * {{Z|el}}: {{W+|el|ΕΣΣΔ|tr=ESSD}} {{mê}} {{werger-bin}} pqb02akyc3z8wukgffogpllssz246jc Zoya 0 63367 6865690 6295987 2026-10-24T17:38:49Z Wikihez 7344 sererastkirina Nimûneyên ji edebiyatê (via JWB) 6865690 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{IPA|ku|/zoːˈjɑː/}} * {{kîte|ku|Zo|ya}} === Navdêr === {{navdêr|ku|z=m}} # [[nav]]ekî [[jin]]an e #* {{jêder|ku|jêgirtin=Hunermend û stranbêja kurd ya dengxweş '''Zoya''', di sala (1986) an de li bajarê Qamislo - Sûriyê ji dayik bûye û bi hunermend û kemanîst Lezgîn Xalid re zewicî ye û lawekî wan bi navê Ayaz heye, û jiyana xwe li bajarê Serê Kanî yê didomîne.|Avasinweb.com, 2/2012}} ==== Tewandin ==== {{ku-tewîn-nav/nû|mê}} ==== Etîmolojî ==== Bi rêya rusî [[Зоя]] (Zoya) ji {{ji|el|ku|ζωή}} (zoê: [[jiyan]]) ku wergerra [[yekser]]/[[dîrek]] ji navê [[חוה]] (Xewa: [[Hewa]]) yê [[îbranî]] ye. Formên bi hin zimanên din Zoë, Zoey, Zoie, Zowie, Zoë, Zoé, Zoja. ==== Bide ber ==== * [[Ziya]] sckuy9f5vvu3qyrtol7a4c0juyzx8qb 6865702 6865690 2026-10-24T19:12:14Z Balyozbot 7867 Bot: Paqijiyên kozmetîk ({{ku-tewîn-nav/nû}} → {{ku-tewîn-nav}}.) 6865702 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{IPA|ku|/zoːˈjɑː/}} * {{kîte|ku|Zo|ya}} === Navdêr === {{navdêr|ku|z=m}} # [[nav]]ekî [[jin]]an e #* {{jêder|ku|jêgirtin=Hunermend û stranbêja kurd ya dengxweş '''Zoya''', di sala (1986) an de li bajarê Qamislo - Sûriyê ji dayik bûye û bi hunermend û kemanîst Lezgîn Xalid re zewicî ye û lawekî wan bi navê Ayaz heye, û jiyana xwe li bajarê Serê Kanî yê didomîne.|Avasinweb.com, 2/2012}} ==== Tewandin ==== {{ku-tewîn-nav|mê}} ==== Etîmolojî ==== Bi rêya rusî [[Зоя]] (Zoya) ji {{ji|el|ku|ζωή}} (zoê: [[jiyan]]) ku wergerra [[yekser]]/[[dîrek]] ji navê [[חוה]] (Xewa: [[Hewa]]) yê [[îbranî]] ye. Formên bi hin zimanên din Zoë, Zoey, Zoie, Zowie, Zoë, Zoé, Zoja. ==== Bide ber ==== * [[Ziya]] gh5zq4o7e1rfpuane7yj6iwe31pzxnc adarok 0 63368 6865657 6865641 2026-10-24T16:40:07Z Wikihez 7344 /* Navdêr */ (bi [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]ê re) 6865657 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-IPA}} * {{ku-kîte}} === Navdêr === {{navdêr|ku|z=m}} # {{f|ku|devokî}} [[êvar]]a [[newroz]]ê, [[20.3]] # [[nav|Navê]] [[kulîlkek]]ê ye. [[jê re|Jê re]] [[gula nîsanê]] jî tê [[gotîn]]. # Dî [[gotînên]] [[pêşî]]yan de: [[adarok|Adarokê]] [[ser]]ê [[xwe]] [[hilda]], [[zivistan]]ê [[bar]]ê xwe [[girêda]]. ==== Tewandin ==== {{ku-tewîn-nav|mê}} ==== Etîmolojî ==== {{etîmon|ku|:qertaf|adar|-ok}} ==== Bide ber ==== * [[savarok]] ==== Werger ==== {{werger-ser}} * {{Z|en}}: {{W+|en|papaver}} * {{Z|nb}}: {{W+|nb|valmue}} {{werger-bin}} ==== Anagram ==== * {{anagram|ku|a=aadkor|akorda|daroka}} ss00k3tu083lv0ei0cy9xodohkyum48 6865658 6865657 2026-10-24T16:41:33Z Wikihez 7344 Kurmancî/Navdêr: mane, hevmane hatin guhartin (DefSideBoxes) 6865658 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-IPA}} * {{ku-kîte}} === Navdêr === {{navdêr|ku|z=m}} # {{f|ku|devokî}} [[êvar]]a [[newroz]]ê, [[20.3]] # [[nav|Navê]] [[kulîlkek]]ê ye. #: {{hevmane|ku|gula nîsanê}} # Dî [[gotînên]] [[pêşî]]yan de: [[adarok|Adarokê]] [[ser]]ê [[xwe]] [[hilda]], [[zivistan]]ê [[bar]]ê xwe [[girêda]]. ==== Tewandin ==== {{ku-tewîn-nav|mê}} ==== Etîmolojî ==== {{etîmon|ku|:qertaf|adar|-ok}} ==== Bide ber ==== * [[savarok]] ==== Werger ==== {{werger-ser}} * {{Z|en}}: {{W+|en|papaver}} * {{Z|nb}}: {{W+|nb|valmue}} {{werger-bin}} ==== Anagram ==== * {{anagram|ku|a=aadkor|akorda|daroka}} r6abvgpz899dl8sc84hhz8a2zhdcwc7 6865659 6865658 2026-10-24T16:43:15Z Wikihez 7344 Kurmancî/Navdêr: beşa «Çavkanî» hate zêdekirin (DefSideBoxes) 6865659 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-IPA}} * {{ku-kîte}} === Navdêr === {{navdêr|ku|z=m}} # {{f|ku|devokî}} [[êvar]]a [[newroz]]ê, [[20.3]] # [[nav|Navê]] [[kulîlkek]]ê ye. #: {{hevmane|ku|gula nîsanê}} # Dî [[gotînên]] [[pêşî]]yan de: [[adarok|Adarokê]] [[ser]]ê [[xwe]] [[hilda]], [[zivistan]]ê [[bar]]ê xwe [[girêda]]. ==== Tewandin ==== {{ku-tewîn-nav|mê}} ==== Etîmolojî ==== {{etîmon|ku|:qertaf|adar|-ok}} ==== Bide ber ==== * [[savarok]] ==== Werger ==== {{werger-ser}} * {{Z|en}}: {{W+|en|papaver}} * {{Z|nb}}: {{W+|nb|valmue}} {{werger-bin}} ==== Anagram ==== * {{anagram|ku|a=aadkor|akorda|daroka}} ==== Çavkanî ==== * Ferhenga Navên Nebatan A Kurdî. 88q5is4w3p4q99lvh1ap9q6ulam1hnq 6865660 6865659 2026-10-24T16:51:11Z Wikihez 7344 Kurmancî/Navdêr: maneyek hate rakirin, +nimûneya bikaranînê bi amûra « [[Mediawiki:Gadget-wikt.add-examples|Nimûne zêde bike]] » (v2.0) (DefSideBoxes) 6865660 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-IPA}} * {{ku-kîte}} === Navdêr === {{navdêr|ku|z=m}} # {{f|ku|devokî}} [[êvar]]a [[newroz]]ê, [[20.3]] # [[nav|Navê]] [[kulîlkek]]ê ye. #: {{hevmane|ku|gula nîsanê}} #* {{jêder|ku|2=Gotineke pêşiyan|tarîxna=1|jêgirtin='''Adarokê''' serê xwe hilda, zivistanê barê xwe girêda.}} ==== Tewandin ==== {{ku-tewîn-nav|mê}} ==== Etîmolojî ==== {{etîmon|ku|:qertaf|adar|-ok}} ==== Bide ber ==== * [[savarok]] ==== Werger ==== {{werger-ser}} * {{Z|en}}: {{W+|en|papaver}} * {{Z|nb}}: {{W+|nb|valmue}} {{werger-bin}} ==== Anagram ==== * {{anagram|ku|a=aadkor|akorda|daroka}} ==== Çavkanî ==== * Ferhenga Navên Nebatan A Kurdî. iq7z0zxzowc17uitlak9i1uix24vb44 6865661 6865660 2026-10-24T16:51:45Z Wikihez 7344 Kurmancî/Navdêr: mane hate guhartin (DefSideBoxes) 6865661 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-IPA}} * {{ku-kîte}} === Navdêr === {{navdêr|ku|z=m}} # {{f|ku|devokî}} [[êvar]]a [[newroz]]ê, 20ê adarê # [[nav|Navê]] [[kulîlkek]]ê ye. #: {{hevmane|ku|gula nîsanê}} #* {{jêder|ku|2=Gotineke pêşiyan|tarîxna=1|jêgirtin='''Adarokê''' serê xwe hilda, zivistanê barê xwe girêda.}} ==== Tewandin ==== {{ku-tewîn-nav|mê}} ==== Etîmolojî ==== {{etîmon|ku|:qertaf|adar|-ok}} ==== Bide ber ==== * [[savarok]] ==== Werger ==== {{werger-ser}} * {{Z|en}}: {{W+|en|papaver}} * {{Z|nb}}: {{W+|nb|valmue}} {{werger-bin}} ==== Anagram ==== * {{anagram|ku|a=aadkor|akorda|daroka}} ==== Çavkanî ==== * Ferhenga Navên Nebatan A Kurdî. 6b15x6uopckxm27kwmxh7hwypbjtk0k alemî berzah 0 465463 6865698 6296486 2026-10-24T17:44:58Z Wikihez 7344 sererastkirina Nimûneyên ji edebiyatê (via JWB) 6865698 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-IPA}} * {{ku-kîte}} === Navdêr === {{navdêr|ku|z=m}} # [[dinya]]ya [[mirî|miriyan]] #* {{jêder|ku|jêgirtin=Yildirim li Parlamentoya Tirkiyê axifî û diyar kir ku Serokwezîrê Tirkiyê Ahmet Davutoglu li '''alemî berzah''' dijî û divê di zûtirîn dem de vegere vê dinyayê*|kurdistan24.net/ku, 2/2016}} ==== Tewandin ==== {{ku-tewîn-nav/nû|mê}} ==== Etîmolojî ==== Bi rêya osmanî ji farisî ji [[alem]] + [[berzah]] f6zgex3cpi01zp8i5d0o6dt689mx7p2 6865700 6865698 2026-10-24T19:12:08Z Balyozbot 7867 Bot: Paqijiyên kozmetîk ({{ku-tewîn-nav/nû}} → {{ku-tewîn-nav}}.) 6865700 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-IPA}} * {{ku-kîte}} === Navdêr === {{navdêr|ku|z=m}} # [[dinya]]ya [[mirî|miriyan]] #* {{jêder|ku|jêgirtin=Yildirim li Parlamentoya Tirkiyê axifî û diyar kir ku Serokwezîrê Tirkiyê Ahmet Davutoglu li '''alemî berzah''' dijî û divê di zûtirîn dem de vegere vê dinyayê*|kurdistan24.net/ku, 2/2016}} ==== Tewandin ==== {{ku-tewîn-nav|mê}} ==== Etîmolojî ==== Bi rêya osmanî ji farisî ji [[alem]] + [[berzah]] 4l1nh4gav4uyfxodnr1x3og82rur0xf akredîtasyon 0 465974 6865696 6296385 2026-10-24T17:43:58Z Wikihez 7344 sererastkirina Nimûneyên ji edebiyatê (via JWB) 6865696 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-IPA}} * {{ku-kîte}} === Navdêr === {{navdêr|ku|z=m}} # [[destûr]]dan [[kar]]kirina [[dîplomat]]an yan hin [[karmend]]ên din #* {{jêder|ku|jêgirtin=Çapemeniya li bajêr danê sibehê hay ji bernameya Davûtoglû ya Silopiyê çêbû. Çapemeniya ku xwest serdana Davûtoglû bişopînin, di '''akredîtasyonê''' de bo wan cih nehat dayîn*|ku.hawarnews.com, 3/2015}} ==== Tewandin ==== {{ku-tewîn-nav/nû|mê}} ==== Etîmolojî ==== {{bêetîmolojî|ku}} ==== Werger ==== * {{en}}: [[accreditation]] 9lj19jcraiut0xl7ymf38fcin0014o9 6865701 6865696 2026-10-24T19:12:11Z Balyozbot 7867 Bot: Paqijiyên kozmetîk ({{ku-tewîn-nav/nû}} → {{ku-tewîn-nav}}.) 6865701 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-IPA}} * {{ku-kîte}} === Navdêr === {{navdêr|ku|z=m}} # [[destûr]]dan [[kar]]kirina [[dîplomat]]an yan hin [[karmend]]ên din #* {{jêder|ku|jêgirtin=Çapemeniya li bajêr danê sibehê hay ji bernameya Davûtoglû ya Silopiyê çêbû. Çapemeniya ku xwest serdana Davûtoglû bişopînin, di '''akredîtasyonê''' de bo wan cih nehat dayîn*|ku.hawarnews.com, 3/2015}} ==== Tewandin ==== {{ku-tewîn-nav|mê}} ==== Etîmolojî ==== {{bêetîmolojî|ku}} ==== Werger ==== * {{en}}: [[accreditation]] 3vcmtq5wd6ytzj2wem2gem2y2ohbedf afitab 0 466772 6865692 6352645 2026-10-24T17:40:16Z Wikihez 7344 sererastkirina Nimûneyên ji edebiyatê (via JWB) 6865692 wikitext text/x-wiki {{h-bnr|afîtab}} == {{ziman|ku}} == === Mane === {{cure?|ku}} # [[roj]] #* {{J:Melayê Cizîrî:Dîwana Melayê Cizîrî|jêgirtin=Çû teref mihra sipihrê nezzilî 'erdan 'ezab<br>Lew bi şeş bircan 'Etarid ji '''afitab'''ê dûr-i bû<br>Lê Zuhel bû Muşterî avête çerxê inqilab}} mfzt9muycz2v6s14dp76d2jql6yzj6k acîlen 0 468770 6865691 6724633 2026-10-24T17:39:47Z Wikihez 7344 sererastkirina Nimûneyên ji edebiyatê (via JWB) 6865691 wikitext text/x-wiki {{h-bnr|acilen}} == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Hoker === {{hoker|ku}} # bi [[lez]], [[yekser]], [[di cih de]], [[hemen]] #* {{jêder|ku|jêgirtin="Divê '''acîlen''' PKK çekan bêdeng bike"|Parlementerê HDPê Altan Tan li gor aa.com.tr/kk, 4/2016}} ==== Etîmolojî ==== Ji {{deyn|ar}}, binêre [[acîl]] + [[-en]] ==== Werger ==== {{werger-ser}} * {{Z|en}}: [[urgently]] {{werger-bin}} g468vct07hev06ri7693870bk0geyc5 Sinûn 0 619004 6865672 6714196 2026-10-24T17:28:28Z Wikihez 7344 sererastkirina Nimûneyên ji edebiyatê (via JWB) 6865672 wikitext text/x-wiki {{h-bnr|sinun}} == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Navdêr === {{navdêr|ku|z=m}} # [[bajarok]]ek e li [[dever]]a [[Şingal]]ê li [[Başûrê Kurdistanê]] #* {{jêder|ku|jêgirtin=Li gorî rêkeftina di navbera Heşda Şeibî û hêzên ser bi PKKê ve, li Şingalê hinek kursiyên rêveberiya Şingalê dane çend berpirsên berê yên PKKê. Berpirsê Heşda Şeibî yê Şingalê Xwedêda Cukê eşkere kir, ku peywendiyên wan li gel PKKê pir baş in. Lê rêveberê berê yê bajarokê '''Sinûnê''' dibêje, ew berpirsên nû yên Şingalê qebûl nakin.|Rudaw.net/kurmanci, 11/2017}} ==== Anagram ==== * {{anagram|ku|a=innsû|sûnin}} qqufhrvml1aotv2aljao61vih2ki7om Xwedêda 0 619005 6865686 5932070 2026-10-24T17:36:55Z Wikihez 7344 sererastkirina Nimûneyên ji edebiyatê (via JWB) 6865686 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-IPA}} * {{ku-kîte}} === Navdêr === {{navdêr|ku|z=n}} # [[nav]]ekî [[zelam]]an e #* {{jêder|ku|jêgirtin=Li gorî rêkeftina di navbera Heşda Şeibî û hêzên ser bi PKKê ve, li Şingalê hinek kursiyên rêveberiya Şingalê dane çend berpirsên berê yên PKKê. Berpirsê Heşda Şeibî yê Şingalê '''Xwedêda''' Cukê eşkere kir, ku peywendiyên wan li gel PKKê pir baş in. Lê rêveberê berê yê bajarokê Sinûnê dibêje, ew berpirsên nû yên Şingalê qebûl nakin.|Rudaw.net/kurmanci 11/2017}} ==== Etîmolojî ==== [[Xwedê]] + [[dan]], bi ihtimaleke mezin ji wergerandina tirkî [[Tanrıverdi]] ji [[Tanrı]] (Xwedê) û [[verdi]] ([[da]]) ji [[vermek]] ([[dan]], [[dayîn]]) qgwr2ry52r66a9t5ubnc6gtbea4hba1 Xanesor 0 619010 6865680 6185575 2026-10-24T17:34:44Z Wikihez 7344 sererastkirina Nimûneyên ji edebiyatê (via JWB) 6865680 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Navdêr === {{navdêr|ku|z=m}} # [[bajarok]]ekî [[biçûk]] an [[gund]]ekî [[mezin]] e li [[dever]]a [[Şingal]]ê li [[Başûrê Kurdistanê]] #* {{jêder|ku|jêgirtin=Derbarê peywendiyên Heşda Şeibî û PKKê de Xwedêda Cukê got: "Peywendiyên me li gel hêzên PKKê pir baş in. beriya hatina me, rêveberiya berê nedikarî here gundê '''Xanesorê''' û navçeyên bin kontrola PKKê. Lê niha em diçin her derê. Beriya çend rojan me li '''Xanesorê''' dibistanek jî vekir ji bo zarok ji xwendinê bê par nebin."|Rudaw.net/kurmanci, 11/2017}} g94kzrwukgyedbqg1adpu37tti9za9t Sîdekan 0 629151 6865674 6381401 2026-10-24T17:29:26Z Wikihez 7344 sererastkirina Nimûneyên ji edebiyatê (via JWB) 6865674 wikitext text/x-wiki == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Serenav === {{serenav|ku|z=m}} # [[bajarok]]ekî ser bi [[qeza]]ya [[Soran]] ya [[parêzgeh]]a [[Hewlêr]]ê li [[Başûrê Kurdistanê]] ye #* {{jêder|ku|jêgirtin=Peyamnêrê Rûdawê li Çomanê ragihand, kêlîkek berî niha 2 firokeyên şer ên Tirkiyê li esmanê bajarokê '''Sîdekanê''' yê ser bi qezaya Soranê ve digerin.|Rudaw.net/kurmanci, 3/2018}} ==== Jê ==== *[[sîdekanî]] *[[sîdekanîtî]] ==== Anagram ==== * {{anagram|ku|a=adeîkns|sekandî|sendîka|sîdanek}} 2e2bjjg9wb1hc347rdpt6cwo32jd17a Adar 0 844656 6865669 6720179 2026-10-24T17:23:47Z Wikihez 7344 Kurmancî/Serenav: beşa «Etîmolojî» hate nûkirin (DefSideBoxes) 6865669 wikitext text/x-wiki {{h-bnr|adar}} == {{ziman|ku}} == === Bilêvkirin === * {{ku-kîte}} === Serenav === {{serenav|ku|z=m}} # [[nav|Navekî]] {{nk|ku|keç}} e. ==== Tewandin ==== {{ku-tewîn-nav|mê|y}} ==== Etîmolojî ==== {{etîmon|ku|:ji|adar}} ==== Anagram ==== * {{anagram|ku|a=aadr|Arda|Dara|arad|dara}} === Çavkanî === * {{malper|url=https://www.institutkurde.org/en/kurdorama/kurdish_baby_names.php|sernav=Kurdish names|malper=Institut kurde de Paris}} b18gqem036hkvnjivv8xbrzo4exjn5y ܐܕܪ 0 1145472 6865663 5553946 2026-10-24T17:01:12Z Wikihez 7344 ([[Mediawiki:Gadget-start.js|WF:NÛ]] v.2.0) +syc:navdêr:adar {{îzah|meha salê ya sisêyan}}, [[Bikarhêner:Wikihez/templateScript2.js|TS]]: Ji [[en:ܐܕܪ|en.wikt]] 6865663 wikitext text/x-wiki == {{ziman|aii}} == === Navdêr === {{navdêr|aii|tr=adar}} # {{mijar|aii|mehên salê}} {{g|ku|adar}}, sêyem meha salê === Çavkanî === {{rûpela wergerê|aii|adar}} == {{ziman|syc}} == === Bilêvkirin === * {{IPA|syc|[ʔɑðɑr]}} === Navdêr === {{navdêr|syc|tr=ʾāḏār}} # [[adar|adar]] {{îzah|[[meh|meha]] [[sal|salê]] ya [[sisê|sisêyan]]}} ==== Etîmolojî ==== Ji {{mîr|arc|syc|אֲדָר|tr=ʾăḏār}}, ji {{ji|akk|syc|Addarum|𒌚𒊺|tr=Addarum}}. ==== Jê ==== * {{g|syc|ܐܕܪܝܐ|tr=ʾāḏārāyā|w=aîdî adarê}} ==== Dûnde ==== * {{dû|ar|آذار|deyn=1}} * {{dû|ku|adar|deyn=1}} * {{dû|ckb|ئادار|deyn=1}} hclt3ednt7d3jgpdu7xlrj37iwlnz3k 6865664 6865663 2026-10-24T17:02:29Z Wikihez 7344 /* Etîmolojî */ 6865664 wikitext text/x-wiki == {{ziman|aii}} == === Navdêr === {{navdêr|aii|tr=adar}} # {{mijar|aii|mehên salê}} {{g|ku|adar}}, sêyem meha salê === Çavkanî === {{rûpela wergerê|aii|adar}} == {{ziman|syc}} == === Bilêvkirin === * {{IPA|syc|[ʔɑðɑr]}} === Navdêr === {{navdêr|syc|tr=ʾāḏār}} # [[adar|adar]] {{îzah|[[meh|meha]] [[sal|salê]] ya [[sisê|sisêyan]]}} ==== Etîmolojî ==== {{etîmon|syc|:mîr|arc:אֲדָר<tr:ʾăḏār>}} ==== Jê ==== * {{g|syc|ܐܕܪܝܐ|tr=ʾāḏārāyā|w=aîdî adarê}} ==== Dûnde ==== * {{dû|ar|آذار|deyn=1}} * {{dû|ku|adar|deyn=1}} * {{dû|ckb|ئادار|deyn=1}} 2twtjcubkrnb1gq16ooei324cg6dxq0 6865665 6865664 2026-10-24T17:04:56Z Wikihez 7344 Siryaniya klasîk/Navdêr: beşa «Etîmolojî» hate nûkirin (DefSideBoxes) 6865665 wikitext text/x-wiki == {{ziman|aii}} == === Navdêr === {{navdêr|aii|tr=adar}} # {{mijar|aii|mehên salê}} {{g|ku|adar}}, sêyem meha salê === Çavkanî === {{rûpela wergerê|aii|adar}} == {{ziman|syc}} == === Bilêvkirin === * {{IPA|syc|[ʔɑðɑr]}} === Navdêr === {{navdêr|syc|tr=ʾāḏār}} # [[adar|adar]] {{îzah|[[meh|meha]] [[sal|salê]] ya [[sisê|sisêyan]]}} ==== Etîmolojî ==== {{etîmon|syc|:mîr|arc:אֲדָר<tr:ʾăḏār><etimon:dariştî<akk:Addarum<cuda:𒌚𒊺><tr:Addarum>>>}} ==== Jê ==== * {{g|syc|ܐܕܪܝܐ|tr=ʾāḏārāyā|w=aîdî adarê}} ==== Dûnde ==== * {{dû|ar|آذار|deyn=1}} * {{dû|ku|adar|deyn=1}} * {{dû|ckb|ئادار|deyn=1}} qo2bxowl4iw7jzr6m1xoqgxbcj67r7p 6865693 6865665 2026-10-24T17:41:06Z Balyozbot 7867 [[Special:PermanentLink/6298023|Bot]]: rêzkirina beşan 6865693 wikitext text/x-wiki == {{ziman|aii}} == === Navdêr === {{navdêr|aii|tr=adar}} # {{mijar|aii|mehên salê}} {{g|ku|adar}}, sêyem meha salê === Çavkanî === {{rûpela wergerê|aii|adar}} == {{ziman|syc}} == === Bilêvkirin === * {{IPA|syc|[ʔɑðɑr]}} === Navdêr === {{navdêr|syc|tr=ʾāḏār}} # [[adar|adar]] {{îzah|[[meh|meha]] [[sal|salê]] ya [[sisê|sisêyan]]}} ==== Jê ==== * {{g|syc|ܐܕܪܝܐ|tr=ʾāḏārāyā|w=aîdî adarê}} ==== Etîmolojî ==== {{etîmon|syc|:mîr|arc:אֲדָר<tr:ʾăḏār><etimon:dariştî<akk:Addarum<cuda:𒌚𒊺><tr:Addarum>>>}} ==== Dûnde ==== * {{dû|ar|آذار|deyn=1}} * {{dû|ku|adar|deyn=1}} * {{dû|ckb|ئادار|deyn=1}} bi5cmy87ceubrqbu2chhxjnstzev7rr 6865699 6865693 2026-10-24T18:12:18Z Balyozbot 7867 Bot: Paqijiyên kozmetîk (Lînk paqij kir.) 6865699 wikitext text/x-wiki == {{ziman|aii}} == === Navdêr === {{navdêr|aii|tr=adar}} # {{mijar|aii|mehên salê}} {{g|ku|adar}}, sêyem meha salê === Çavkanî === {{rûpela wergerê|aii|adar}} == {{ziman|syc}} == === Bilêvkirin === * {{IPA|syc|[ʔɑðɑr]}} === Navdêr === {{navdêr|syc|tr=ʾāḏār}} # [[adar]] {{îzah|[[meh]]a [[sal]]ê ya [[sisê]]yan}} ==== Jê ==== * {{g|syc|ܐܕܪܝܐ|tr=ʾāḏārāyā|w=aîdî adarê}} ==== Etîmolojî ==== {{etîmon|syc|:mîr|arc:אֲדָר<tr:ʾăḏār><etimon:dariştî<akk:Addarum<cuda:𒌚𒊺><tr:Addarum>>>}} ==== Dûnde ==== * {{dû|ar|آذار|deyn=1}} * {{dû|ku|adar|deyn=1}} * {{dû|ckb|ئادار|deyn=1}} l500uj35a0vs7qnrlvu8ha0jy84nm5r Modul:koda zimanî 828 1326032 6865707 6105912 2026-10-25T10:07:11Z Xqbot 13246 Beralîkirina ducarî li ser [[Modul:ziman/templates]] hat sererastkirin 6865707 Scribunto text/plain return require [[Modul:ziman/templates]] oz24h9jmle455f8zhz1nain3flmvg5l Modul:koda zimanî/inglîzî 828 1326033 6865708 6105914 2026-10-25T10:07:16Z Xqbot 13246 Beralîkirina ducarî li ser [[Modul:ziman/templates/inglîzî]] hat sererastkirin 6865708 Scribunto text/plain return require [[Modul:ziman/templates/inglîzî]] mnvjplamj4zl07jgf6g93mk7ia4r0nw MediaWiki:Gadget-wikt.translation-adder.js 8 1359496 6865704 6865648 2026-10-24T20:46:01Z Wikihez 7344 Translation adder: forget the nest link once it is removed, so it comes back after the nesting is undone 6865704 javascript text/javascript // <nowiki> /* * Page: [[MediaWiki:Gadget-wikt.translation-adder.js]] * * Adds a form under each translation box ({{werger-ser}} … {{werger-bin}}) to add a line such as * * {{Z|de}}: {{W+|de|Wasser|n}} * in Kurmancî alphabetical order, and a ± link on the box heading to change its gloss. Forked from * en.wiktionary's [[en:MediaWiki:Gadget-TranslationAdder.js]] (by [[en:User:Conrad.Irwin]] and others). * * DefSideBoxes ([[MediaWiki:Gadget-wikt.dsb.js]]) loads it from the pencil on a Werger heading and calls * attach(root, editor) with an editor from wikt.dsb-panels, so the changes join its save queue. Without * an editor, edits pile up in this gadget's own box at the top left. * * The form reads only boxes from [[Modul:translations]] (table.translations with data-gloss); the older * div.translations boxes are left to the "translation_editor" gadget. */ /* global mw, $, AdderWrapper, LangMetadata, Editor */ require("./wikt.translation-adder/editor.js"); require("./wikt.translation-adder/language-utils.js"); require("./wikt.translation-adder/data.js"); var suggest = require("ext.gadget.wikt.suggest"); var ALPHABET = "abcçdeêfghiîjklmnopqrsştuûvwxyz"; // Box templates in wikitext; the /ceribandin copies are the test versions. var TOP = /\{\{\s*[Ww]erger-(?:ser|bnr-h)(?:\/ceribandin)?\s*(?=[|}])/; var BOTTOM = /\{\{\s*[Ww]erger-bin(?:\/ceribandin)?\s*\}\}/; // code -> Kurmancî name, and back; filled once from wikt.suggest's language list. var codeToName = null; var nameToCode = null; var namesPromise = null; function loadNames() { if (!namesPromise) { namesPromise = suggest.languages().then(function (data) { codeToName = data; nameToCode = {}; Object.keys(data).forEach(function (code) { var name = data[code].toLowerCase(); if (!nameToCode[name]) { nameToCode[name] = code; } }); }); } return namesPromise; } // A language code from a code or a Kurmancî name, or null. function toCode(txt) { txt = (txt || "").trim(); if (codeToName[txt]) { return txt; } return nameToCode[txt.toLowerCase()] || null; } // The name of a language, or of a family lines are nested under. function groupName(code) { return codeToName[code] || new LangMetadata().getGroupName(code) || code; } function ucfirst(s) { return s.charAt(0).toUpperCase() + s.slice(1); } // Sort key in Kurmancî alphabetical order; a letter outside the alphabet sorts after its base letter. function sortKey(s) { return Array.from(s.toLowerCase().replace(/['ʼ", -]/g, "")).map(function (ch) { var i = ALPHABET.indexOf(ch); if (i !== -1) { return String.fromCharCode(0x100 + i * 2); } i = ALPHABET.indexOf(ch.normalize("NFD").charAt(0)); return i !== -1 ? String.fromCharCode(0x101 + i * 2) : ch; }).join(""); } function compareNames(a, b) { var ka = sortKey(a), kb = sortKey(b); if (ka !== kb) { return ka < kb ? -1 : 1; } return a < b ? -1 : a > b ? 1 : 0; } function sameName(a, b) { return sortKey(a) === sortKey(b); } // The HTML of a rendered line after its "Language:" label. function afterColon(html) { var div = document.createElement('div'); div.innerHTML = html; var walker = document.createTreeWalker(div, NodeFilter.SHOW_TEXT); var node; while ((node = walker.nextNode())) { var i = node.data.indexOf(':'); if (i !== -1) { var range = document.createRange(); range.setStart(div, 0); range.setEnd(node, i + 1); range.deleteContents(); break; } } return div.innerHTML; } var PICKER_SIZE = 12; // A name without its diacritics, so "ital" finds "îtalî". function fold(s) { return s.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, ""); } // folded name -> code, built on first use. var foldedNames = null; // Up to PICKER_SIZE codes for what was typed: the code itself, then names starting with it (shortest // first, so "fran" offers fransî before franc-comtoisî), then codes starting with it, common languages // first ("cm" offers cmn), then names containing it. function matchLanguages(term) { term = term.trim().toLowerCase(); var exact = codeToName[term] ? [term] : []; if (term.length < 2) { return exact; } if (!foldedNames) { foldedNames = Object.keys(nameToCode).map(function (name) { return [fold(name), nameToCode[name]]; }); } var folded = fold(term); var meta = new LangMetadata(); var starts = [], contains = []; foldedNames.forEach(function (pair) { var i = pair[0].indexOf(folded); if (pair[1] === term || i === -1) { return; } (i === 0 ? starts : contains).push(pair[1]); }); var codes = Object.keys(codeToName).filter(function (code) { return code !== term && code.indexOf(term) === 0 && starts.indexOf(code) === -1; }).sort(function (a, b) { return (meta.isCommon(b) - meta.isCommon(a)) || a.length - b.length || (a < b ? -1 : 1); }); function byName(a, b) { return compareNames(codeToName[a], codeToName[b]); } starts.sort(function (a, b) { return codeToName[a].length - codeToName[b].length || byName(a, b); }); contains = contains.filter(function (code) { return codes.indexOf(code) === -1; }); return exact.concat(starts, codes, contains.sort(byName)).slice(0, PICKER_SIZE); } // Wraps a language input in wikt.suggest's dropdown of matching languages; picking one writes its name, and // a code typed in is replaced by its name when the field is left. onChange runs whenever the value changes. function languagePicker(input, onChange) { var box = newNode('span', { 'class': 'translation-adder-langbox' }, input); suggest(input, { items: function (term) { return matchLanguages(term).map(function (code) { return { value: codeToName[code], code: code }; }); }, onPick: onChange }); input.addEventListener('input', onChange); input.addEventListener('blur', function () { var value = input.value.trim(); if (codeToName[value]) { input.value = codeToName[value]; } onChange(); }); return box; } // Puts node at the end of a line's own content: after its last translation and that translation's ✎ ×, // before the lines nested under it. function appendToLine(line, node) { if (/(?:^|\s)translation-adder-wrap(?:\s|$)/.test(line.className) && line.firstElementChild) { line = line.firstElementChild; } var stop = null; for (var child = line.firstChild; child; child = child.nextSibling) { if (/^(UL|DL)$/.test(child.nodeName) || (child.nodeType === 1 && /(?:^|\s)translation-adder-line-tools(?:\s|$)/.test(child.className))) { stop = child; break; } } line.insertBefore(node, stop); } function newNode(tagname) { var node = document.createElement(tagname); for (var i = 1; i < arguments.length; i++) { var argument = arguments[i]; if (typeof argument == 'string') { node.appendChild(document.createTextNode(argument)); } else if (typeof argument == 'object') { if (argument instanceof Node) { node.appendChild(argument); } else { for (var j in argument) { if (j === 'class') { node.className = argument[j]; } else if (j == 'style') { node.style.cssText = argument[j]; } else if (typeof argument[j] == 'function') { node.addEventListener(j, argument[j], false); } else { node.setAttribute(j, argument[j]); } } } } } return node; } // Form settings kept in localStorage. function Preferences() { var KEY = "wikt-translation-adder"; var storage = mw.storage.getObject(KEY) || {}; this.get = function (name, def) { return storage[name] || def; }; this.set = function (name, value) { if (value === null || storage[name] === value) return; storage[name] = value; mw.storage.setObject(KEY, storage); }; } var util = { // Index of str (a string or RegExp) in text at or after pos, skipping comments, nowiki and templates // other than a match itself; -1 if none. getVanillaIndexOf: function (str, text, pos) { function find(s) { if (typeof s === 'string') return text.indexOf(s, pos); var i = text.substring(pos).search(s); return i === -1 ? -1 : i + pos; } pos = pos || 0; do { var cpos = text.indexOf('<!--', pos), tpos = text.indexOf('{{', pos), wpos = text.indexOf('<nowiki>', pos), spos = find(str); pos = Math.min( cpos == -1 ? Infinity : cpos, tpos == -1 ? Infinity : tpos, wpos == -1 ? Infinity : wpos, spos == -1 ? Infinity : spos ); if (pos == Infinity) return -1; if (pos == spos) return pos; var close = pos == cpos ? '-->' : pos == wpos ? '</' + 'nowiki>' : '}}'; // split, so this page's own <nowiki> does not end here var end = text.indexOf(close, pos); if (end == -1) return -1; pos = end + close.length; } while (true); }, // The template starting at pos: {name, end (after "}}"), params: [{key, value}]} (key null if positional). parseTemplate: function (text, pos) { var depth = 0, parts = [], start = pos + 2; for (var i = pos; i < text.length; i++) { var two = text.substr(i, 2); if (two === '{{' || two === '[[') { depth++; i++; } else if (two === '}}' || two === ']]') { depth--; i++; if (depth === 0) { parts.push(text.substring(start, i - 1)); break; } } else if (text.charAt(i) === '|' && depth === 1) { parts.push(text.substring(start, i)); start = i + 1; } } return { name: parts[0], end: i + 1, params: parts.slice(1).map(function (p) { var m = /^\s*([^=\[\]{}|]+?)\s*=([\s\S]*)$/.exec(p); return m ? { key: m[1], value: m[2] } : { key: null, value: p }; }) }; }, // The gloss (first positional parameter) of the box template starting at pos. getWikitextGloss: function (text, pos) { var params = util.parseTemplate(text, pos).params; for (var i = 0; i < params.length; i++) { if (params[i].key === null || params[i].key === '1') return params[i].value.trim(); } return ''; }, // The box template at pos with gloss as its first positional parameter. setWikitextGloss: function (text, pos, gloss) { var t = util.parseTemplate(text, pos); var done = false; var params = t.params.map(function (p) { if (!done && (p.key === null || p.key === '1')) { done = true; return p.key === null ? gloss : '1=' + gloss; } return p.key === null ? p.value : p.key + '=' + p.value; }); if (!done) params.unshift(gloss); return text.substring(0, pos) + '{{' + t.name + params.map(function (p) { return '|' + p; }).join('') + '}}' + text.substring(t.end); }, // Whether the words of the box's gloss (as the page shows it) appear, in order, in the wikitext gloss. matchGloss: function (wikitextGloss, gloss) { wikitextGloss = wikitextGloss.replace(/\[\[(?:[^\[\]|]*\|)?([^\[\]]*)\]\]/g, '$1').replace(/'{2,}/g, ''); if (/^\s*$/.test(gloss)) return /^\s*$/.test(wikitextGloss); var words = gloss.split(/[^\p{L}\p{N}]+/u).filter(Boolean); var pos = 0; for (var i = 0; i < words.length; i++) { pos = wikitextGloss.indexOf(words[i], pos); if (pos == -1) return false; } return true; }, // The table.translations of a node inside a box, or of a box heading. getTable: function (node) { var frame = $(node).closest('.NavFrame'); var table = $(node).closest('table.translations'); return table.length ? table[0] : frame.find('table.translations')[0]; }, getTransGloss: function (node) { var table = util.getTable(node); return table ? table.dataset.gloss || '' : ''; }, // [start, end] of the box's list in text: from the line after the opening template to the closing one. getTransTable: function (text, node) { var gloss = util.getTransGloss(node); var table = util.getTable(node); var tables = $('table.translations').get(); var all = [], found = []; var pos = -1; while ((pos = util.getVanillaIndexOf(TOP, text, pos + 1)) > -1) { all.push(pos); if (util.matchGloss(util.getWikitextGloss(text, pos), gloss)) found.push(pos); } if (found.length != 1) { var same = tables.filter(function (t) { return (t.dataset.gloss || '') === gloss; }); if (all.length === tables.length) { // Every box on the page is one in the wikitext: they match by order. found = [all[tables.indexOf(table)]]; } else if (found.length > 1 && same.length === found.length) { // Boxes with the same gloss are told apart by their order on the page. found = [found[same.indexOf(table)]]; } } if (found.length == 1 && found[0] !== undefined) { var start = util.parseTemplate(text, found[0]).end; start = text.indexOf('\n', start) + 1; var end = text.substring(start).search(BOTTOM); if (start > 0 && end > -1) return [start, start + end, found[0]]; } console.trace("getTransTable failure; node = %o, gloss = %o", node, gloss); return false; }, validateNoWikisyntax: function (field, nonempty) { return function (txt, error) { if (/[\{\}#]/.test(txt)) return error("Di qada " + field + " de herfên {}# bi kar neyne."); if (nonempty && !txt) return error(ucfirst(field) + " binivîse."); return txt; }; }, // Codes from [[Modul:gender and number/data]], in the order they are written. genderList: { "n": "nêr", "n-d": "nêr, dual", "n-p": "nêr, pirjimar", "m": "mê", "m-d": "mê, dual", "m-p": "mê, pirjimar", "g": "giştî", "g-d": "giştî, dual", "g-p": "giştî, pirjimar", "nt": "nêtar", "nt-d": "nêtar, dual", "nt-p": "nêtar, pirjimar", "y": "yekjimar", "d": "dual", "p": "pirjimar", "împf": "împerfektîv", "pf": "perfektîv" }, genderRows: [["n", "n-d", "n-p"], ["m", "m-d", "m-p"], ["g", "g-d", "g-p"], ["nt", "nt-d", "nt-p"], ["y", "d", "p"], ["împf", "pf"]] }; // The language name a line starts with ("Almanî: …"). function getLangName(li) { var guess = li.textContent || ''; guess = guess.substr(0, guess.indexOf(':')); return guess.replace(/^\s*/, ''); } // The language code of a line, from {{Z}}'s span.trad-xx or else its first translation's lang attribute. // Only the line's own nodes count: a group line written as text ("Sorbî:") has no code of its own. function getLangCode(li) { var own = /(?:^|\s)trans-(\S+)/.exec(li.className); if (own) return own[1]; var lang = false; for (var node = li.firstChild; node && !/^(UL|DL)$/.test(node.nodeName); node = node.nextSibling) { if (node.nodeType !== 1) { continue; } var spans = [node].concat(Array.prototype.slice.call(node.getElementsByTagName('span'))); for (var i = 0; i < spans.length; i++) { var m = /(?:^|\s)trad-(\S+)/.exec(spans[i].className); if (m) return m[1]; if (!lang && spans[i].lang) lang = spans[i].lang; } } return lang; } // Whether a line is the group line for code: {{Z|code}}, or the group's name written as text. function isGroupLine(li, code) { var own = getLangCode(li); return own ? own === code : sameName(getLangName(li), groupName(code)); } function TranslationAdders(editor, $root) { // The ± link on a box heading, which edits its gloss. function TranslationLabeller(insertDiv) { var original_span; var adder_form; var initial_value; var edit_button; var editing = false; var adderInterface = { 'fields': { 'gloss': function (txt, error) { return util.validateNoWikisyntax('mane', true)(txt, error); } }, 'createForm': function () { var thisId = "a" + String(Math.random()).replace(".", ""); adder_form = newNode('form', { style: 'display: inline', width: 'auto', click: kill_event }, newNode('label', { 'for': thisId }, "Mane: "), newNode('input', { type: 'text', name: 'gloss', value: initial_value, style: 'width: 50%', title: 'Maneya ku ev tercime jê re ne, bi kurtî', id: thisId }), newNode('input', { type: 'submit', name: 'preview', value: 'Pêşdîtin' }) ); return adder_form; }, 'onsubmit': function (values, render) { render("''" + values.gloss + "''", function (new_html) { if (editing) toggle_editing(false); var old_html = original_span.innerHTML; editor.addEdit({ 'undo': function () { original_span.innerHTML = old_html; if (!editing) toggle_editing(); }, 'redo': function () { original_span.innerHTML = new_html; if (editing) toggle_editing(); }, 'edit': function (text) { return perform_edit(text, values.gloss); }, 'summary': 'mane: "' + (values.gloss.length > 50 ? values.gloss.substr(0, 50) + '…"' : values.gloss + '"') }, original_span); }); } }; function perform_edit(wikitext, gloss) { var pos = util.getTransTable(wikitext, insertDiv); if (!pos) { editor.error("Qutiya tercimeyan nehat dîtin."); return wikitext; } return util.setWikitextGloss(wikitext, pos[2], gloss); } // Don't open and close the box when using the form. function kill_event(e) { e.stopPropagation(); } function toggle_editing() { if (editing) { adder_form.style.display = "none"; original_span.style.display = "inline"; editing = false; return; } editing = true; edit_button.text("Tê barkirin…"); editor.withCurrentText(function (currentText) { var pos = util.getTransTable(currentText, insertDiv); edit_button.text('±'); if (!pos) return editor.error("Qutiya tercimeyan nehat dîtin."); initial_value = util.getWikitextGloss(currentText, pos[2]); if (!original_span) { original_span = newNode('span', { 'class': 'wt-edit-recurse' }); for (var i = 0; i < insertDiv.childNodes.length; i++) { var child = insertDiv.childNodes[i]; if (child != edit_button[0] && child.className !== 'NavToggle') { original_span.appendChild(insertDiv.removeChild(child)); i--; } } insertDiv.appendChild(original_span); new AdderWrapper(editor, adderInterface, insertDiv, original_span); } original_span.style.display = "none"; adder_form.style.display = "inline"; adder_form.getElementsByTagName('input')[0].focus(); }); } edit_button = $('<a href="#" class="translation-adder-gloss">±</a>') .attr("title", "Maneya qutiyê biguherîne").css("padding", "2px").css("margin-left", "-5px") .on("click", function (e) { e.preventDefault(); kill_event(e); toggle_editing(); return false; }); $(insertDiv).prepend(edit_button); } function TranslationAdder(insertUl) { var langmetadata = new LangMetadata(); this.fields = { lang: function (txt, error) { var code = toCode(txt); if (!code) return error("Koda zimanî an navê zimanî binivîse (de, almanî, …)."); if (code == 'ku' || code == 'kmr') return error("Zimanekî ji bilî kurmancî hilbijêre."); return code; }, word: function (txt, error) { if (txt.indexOf(',') == -1 || forceComma) { forceComma = false; if (langmetadata.expectedCase(toCode(thiz.elements.lang.value), mw.config.get('wgTitle'), txt) || forceCase) { forceCase = false; return util.validateNoWikisyntax('tercime', true)(txt, error); } if (prefs.get('case-knowledge', 'none') == 'none') { return error(newNode('span', "Tercime pir caran bi herfa biçûk dest pê dikin. Heke tu bawer î ku bi herfa mezin e, ", newNode('span', { style: "color: var(--wikt-palette-blue, #0000FF); text-decoration: underline; cursor: pointer;", click: function () { forceCase = true; inputForm.onsubmit(); prefs.set('case-knowledge', 'guru'); } }, "ji bo berdewamkirinê li vir bitikîne."))); } else { var msg = newNode('span', newNode('span', { style: "color: var(--wikt-palette-blue, #0000FF); text-decoration: underline; cursor: pointer;", click: function () { prefs.set('case-knowledge', 'none'); try { msg.parentNode.removeChild(msg); } catch (e) { } editor.undo(); } }, "Li \"Paşve\" bitikîne"), " heke tu ne bawer î ku ev tercime bi herfa mezin e."); error(msg); return txt; } } if (prefs.get('comma-knowledge', 'none') == 'none') { return error(newNode('span', "Her carê tenê tercimeyekê lê zêde bike. Heke ev tercimeyek e ku virgul tê de heye, ", newNode('span', { style: "color: var(--wikt-palette-blue, #0000FF); text-decoration: underline; cursor: pointer;", click: function () { forceComma = true; inputForm.onsubmit(); prefs.set('comma-knowledge', 'guru'); } }, "ji bo lêzêdekirinê li vir bitikîne."))); } else { var msg = newNode('span', newNode('span', { style: "color: var(--wikt-palette-blue, #0000FF); text-decoration: underline; cursor: pointer;", click: function () { prefs.set('comma-knowledge', 'none'); try { msg.parentNode.removeChild(msg); } catch (e) { } editor.undo(); } }, "Li \"Paşve\" bitikîne"), " heke te dixwest çend tercimeyan bi hev re lê zêde bikî: ev nabe."); error(msg); return txt; } }, qual: util.validateNoWikisyntax('not'), tr: util.validateNoWikisyntax('transliterasyon'), lit: util.validateNoWikisyntax('maneya herfî'), rawPageName: util.validateNoWikisyntax('navê rûpelê'), nested: function (txt, error) { if (!txt) return ''; var group = toCode(txt) || (langmetadata.getGroupName(txt.trim()) ? txt.trim() : null); return group || error("Ji bo \"di bin zimanê\" koda zimanekî an malbatekê binivîse."); }, nclass1: util.validateNoWikisyntax('sinifa navdêrê'), nclass2: util.validateNoWikisyntax('sinifa pirjimariyê') }; var fields = this.fields; Object.keys(util.genderList).forEach(function (g) { fields[g] = 'checkbox'; }); this.createForm = function () { function createGenderNode(name, text) { var inp = document.createElement("input"); inp.type = "checkbox"; inp.name = name; var lbl = document.createElement("label"); lbl.appendChild(inp); lbl.appendChild(document.createTextNode(text)); return lbl; } var genderControls = {}; for (var g in util.genderList) genderControls[g] = createGenderNode(g, util.genderList[g]); var langName = newNode('span', { 'class': 'translation-adder-langname' }); var controls = { lang: newNode('input', { size: 12, type: 'text', name: 'lang', value: prefs.get('curlang', ''), placeholder: 'ziman', title: 'Koda zimanî (de, fr, …) an navê wî (almanî, fransî, …)' }), transliteration: newNode('p', "Transliterasyon: ", newNode('input', { name: "tr", title: "Tercime bi herfên latînî." }), " (nimûne: zìmǔ ji bo 字母)"), literal: newNode('p', "Maneya herfî: ", newNode('input', { name: "lit", title: "Maneya kelîme bi kelîme ya tercimeyê." })), qualifier: newNode('p', "Not: ", newNode('input', { name: 'qual', title: "Notek kurt li ser tercimeyê" }), " (nimûne: kevn, devkî)"), display: newNode('p', "Navê rûpelê: ", newNode('input', { name: 'rawPageName', title: "Heke tercime ne forma bingehîn be, navê rûpela ku jê re lînk bê dayîn." }), " (nimûne: 疲れる ji bo 疲れた)"), nested: newNode('p', "Di bin zimanê: ", newNode('input', { name: 'nested', title: "Zimanê ku ev ziman di bin wî de tê rêzkirin" }), " (nimûne: zh ji bo mandarînî)"), genders: genderControls, nclass: newNode('p', "Sinifa navdêrê: ", newNode('input', { type: 'text', size: 4, name: 'nclass1', title: "Sinifa navdêrê di forma yekjimar de." }), " Sinifa pirjimariyê: ", newNode('input', { type: 'text', size: 4, name: 'nclass2', title: "Sinifa navdêrê di forma pirjimar de, heke hebe." })) }; var $gender = $("<p>"); util.genderRows.forEach(function (row) { var $div = $("<div>"); row.forEach(function (code) { $div.append(controls.genders[code]); }); $gender.append($div); }); controls.gender = $gender[0]; langInput = controls.lang; var showButton = newNode('span', { 'click': function () { advancedMode = !advancedMode; showButton.textContent = advancedMode ? " Kêmtir" : " Zêdetir"; updateFieldVisibility.call(langInput, true); }, 'style': "color: var(--wikt-palette-blue,#0000FF); cursor: pointer;" }, advancedMode ? " Kêmtir" : " Zêdetir"); function autoTransliterate() { var rawPageName = langmetadata.computeRawPageName(toCode(thiz.elements.lang.value), thiz.elements.word.value); if (rawPageName && rawPageName !== thiz.elements.word.value) thiz.elements.rawPageName.value = rawPageName; } function updateFieldVisibility(preserve) { preserve = (preserve === true); function show() { for (var i = 0; i < arguments.length; i++) { arguments[i].style.display = arguments[i].nodeName == 'P' ? "block" : "inline"; } } function hide() { for (var i = 0; i < arguments.length; i++) arguments[i].style.display = "none"; } // Shows the remaining arguments if the first is true, else hides them. function toggle(condition) { var nodes = [].slice.call(arguments, 1); (condition ? show : hide).apply(this, nodes); } var lang = toCode(langInput.value) || ''; // A code in the field gets its name beside it, until leaving the field puts the name in. var typed = langInput.value.trim(); langName.textContent = codeToName[typed] ? " (" + codeToName[typed] + ")" : ""; if (!preserve) { autoTransliterate(); // Mandarînî goes under Çînî and so on, unless "Di bin zimanê" is changed. thiz.elements.nested.value = lang ? langmetadata.getNested(lang) : ''; } var scriptGuess = langmetadata.guessScript(lang); if (!advancedMode) { var g = lang ? langmetadata.getGenders(lang) : undefined; if (g === undefined) { hide(controls.gender); } else { for (var genderName in util.genderList) { toggle(g.indexOf(genderName) != -1, controls.genders[genderName]); } } toggle(g, controls.gender); toggle(langmetadata.hasNounClasses(lang), controls.nclass); var hasAutomaticTransliteration = new window.LanguageUtils().HasAutomaticTransliteration(lang); toggle(scriptGuess && scriptGuess != 'Latn' && !hasAutomaticTransliteration, controls.transliteration); toggle(langmetadata.needsRawPageName(lang), controls.display); hide(controls.literal, controls.qualifier, controls.nested); } else { show.apply(this, [controls.gender].concat( Object.keys(util.genderList).map(function (k) { return controls.genders[k]; }), [controls.nclass, controls.transliteration, controls.literal, controls.qualifier, controls.display, controls.nested])); } } var langBox = languagePicker(langInput, function () { updateFieldVisibility.call(langInput); }); window.setTimeout(function () { updateFieldVisibility.call(langInput); }, 0); inputForm = newNode('form', newNode('p', "Tercimeyekê lê zêde bike: ", langBox, langName, newNode('b', ': '), newNode('input', { 'name': 'word', placeholder: 'tercime', title: 'Tercime bi wî zimanî', size: 20, keyup: autoTransliterate, change: autoTransliterate }), newNode('input', { 'type': 'submit', 'value': 'Pêşdîtin' }), showButton ), controls.gender, controls.nclass, controls.transliteration, controls.literal, controls.display, controls.qualifier, controls.nested ); return inputForm; }; this.onsubmit = function (values, render) { var wikitext; langmetadata.retrieveRawPageName(values.lang, values.word, values.rawPageName, function (rawPageName, needsRawPageName) { if (needsRawPageName) { values.rawPageName = rawPageName; values.wordMinus = ''; } else { values.rawPageName = ''; values.wordMinus = rawPageName; } langmetadata.hasWiktionaryWithEntry(values.lang, values.rawPageName || values.wordMinus, function (hasInterwiki) { var templateBody = '|' + values.lang + '|' + langmetadata.applyOrthographicalCorrections(values.lang, values.rawPageName || values.word) + (values.nclass1 ? '|c' + values.nclass1 : '') + (values.nclass2 ? '|c' + values.nclass2 : ''); templateBody += Object.keys(util.genderList).map(function (k) { return values[k] ? '|' + k : ''; }).join(""); templateBody += (values.tr ? '|tr=' + values.tr : '') + (values.lit ? '|lit=' + values.lit : '') + (values.rawPageName ? '|cuda=' + values.word : ''); var qualifier = values.qual ? ' {{i|' + values.qual + '}}' : ''; wikitext = '{{Z|' + values.lang + '}}: {{' + (hasInterwiki ? "W+" : "W") + templateBody + "}}" + qualifier; render(wikitext, function (html) { registerEdits(values, wikitext, html); }); }); }); }; var thiz = this; var prefs = new Preferences(); var langInput; var inputForm; var advancedMode = prefs.get('more-display', 'none') != 'none'; var forceComma = false; var forceCase = false; function resetElements() { prefs.set('more-display', advancedMode ? 'block' : 'none'); ['word', 'nclass1', 'nclass2', 'lit', 'tr', 'rawPageName', 'qual'].forEach(function (f) { thiz.elements[f].value = ''; }); Object.keys(util.genderList).forEach(function (g) { thiz.elements[g].checked = false; }); prefs.set('curlang', thiz.elements.lang.value); } // Runs after the new line has been rendered: finds where it goes and registers the edit. function registerEdits(values, wikitext, content) { var li = newNode('li', { 'class': 'trans-' + values.lang }); li.innerHTML = content; var lang = getLangName(li); var summary = '+' + codeToName[values.lang] + ': [[' + langmetadata.applyOrthographicalCorrections(values.lang, values.rawPageName || values.word) + ']]'; var insertBefore = null; var nextLanguage = null; var nestedCode = values.nested; // A top-level line for the language already there takes the translation, and then moves under its group. var table = util.getTable(insertUl); var nestAfter = nestedCode && misplacedLines(table, values.lang).length ? values.lang : null; if (nestAfter) { nestedCode = ''; } var nestedHeading = nestedCode ? ucfirst(groupName(nestedCode)) : ''; var nestedWikitext = "\n* {{Z|" + nestedCode + "}}:\n*: " + wikitext; function addEdit(edit, span) { var fields = ["lang", "word", "nclass1", "nclass2", "rawPageName", "qual", "tr", "lit"]; editor.addEdit({ 'undo': function () { edit.undo(); if (fields.slice(1).every(function (f) { return thiz.elements[f].value === ""; })) { for (var i = 0; i < fields.length; i++) { thiz.elements[fields[i]].value = values[fields[i]]; } for (var genderName in util.genderList) { thiz.elements[genderName].checked = values[genderName]; } } }, 'redo': function () { edit.redo(); // Editing mode, so the new translation has its ✎ and × at once. setLineEditing(table, editor, true); for (var i = 0; i < fields.length; i++) { if (thiz.elements[fields[i]].value != values[fields[i]]) return; } resetElements(); }, 'edit': edit.edit, 'summary': summary }, span); if (nestAfter) { editor.addEdit(nestEdit(table, nestAfter), null); } } if (lang && !nestedCode) { // Every line in this box. var lis = $(insertUl).parent().parent().find('li').get() .concat($(insertUl).parent().parent().find('dd').get()); for (var j = 0; j < lis.length; j++) { if (lis[j].getElementsByTagName('form').length > 0) continue; var ln = getLangName(lis[j]); if (ln && sameName(ln, lang)) { var span = newNode('span', { 'class': 'translation-adder-added' }); var parent = lis[j]; if (parent.getElementsByTagName('ul').length + parent.getElementsByTagName('dl').length == 0) { span.innerHTML = ", " + afterColon(content); addEdit({ 'redo': function () { appendToLine(parent, span); }, 'undo': function () { parent.removeChild(span); }, 'edit': getEditFunction(values, wikitext, ln, values.lang, function (text, ipos) { // Adding to the language's existing line. var lineend = text.indexOf('\n', ipos); return text.substr(0, lineend) + "," + wikitext.substr(wikitext.indexOf(':') + 1) + text.substr(lineend); }) }, span); return resetElements(); } else { var node = parent.firstChild; var hastrans = false; while (node) { if (node.nodeType == 1) { var nn = node.nodeName; if (nn == 'UL' || nn == 'DL') { span.innerHTML = (hastrans ? ", " : " ") + afterColon(content); addEdit({ 'redo': function () { parent.insertBefore(span, node); }, 'undo': function () { parent.removeChild(span); }, 'edit': getEditFunction(values, wikitext, ln, values.lang, function (text, ipos) { // Adding to a language that has nested lines under it. var lineend = text.indexOf('\n', ipos); return text.substr(0, lineend) + (hastrans ? "," : "") + wikitext.substr(wikitext.indexOf(':') + 1) + text.substr(lineend); }) }, span); return resetElements(); } else { hastrans = true; } } node = node.nextSibling; } } } else if (ln && compareNames(ln, lang) > 0 && (!nextLanguage || compareNames(ln, nextLanguage) < 0) && lis[j].parentNode.parentNode.nodeName != 'LI') { nextLanguage = ln; var before = lis[j]; insertBefore = [{ 'redo': function () { before.parentNode.insertBefore(li, before); }, 'undo': function () { before.parentNode.removeChild(li); }, 'edit': getEditFunction(values, wikitext, ln, getLangCode(before), function (text, ipos) { // A new line before the next language's line. var lineend = text.lastIndexOf('\n', ipos); return text.substr(0, lineend) + "\n* " + wikitext + text.substr(lineend); }) }, li]; } } } if (nestedCode) { nextLanguage = null; insertBefore = null; li.innerHTML = nestedHeading + ":" + "<dl><dd class=\"trans-" + values.lang + "\">" + content + "</dd></dl>"; var tops = insertUl.parentNode.parentNode.getElementsByTagName('li'); for (var k = 0; k < tops.length; k++) { if (tops[k].getElementsByTagName('form').length > 0) continue; // Only top-level lines. if (tops[k].parentNode.parentNode.nodeName != 'TD') continue; var tln = getLangName(tops[k]); if (tln && sameName(tln, nestedHeading)) { var group = tops[k]; var sublis = group.getElementsByTagName('li'); if (!sublis.length) sublis = group.getElementsByTagName('dd'); if (sublis.length == 0) { var dd = newNode('dd', { 'class': 'trans-' + values.lang }); var dl = newNode('dl', dd); dd.innerHTML = content; addEdit({ 'redo': function () { group.appendChild(dl); }, 'undo': function () { group.removeChild(dl); }, 'edit': getEditFunction(values, wikitext, nestedHeading, nestedCode, function (text, ipos) { // The first nested line under the group's line. var lineend = text.indexOf('\n', ipos); return text.substr(0, lineend) + "\n*: " + wikitext + text.substr(lineend); }) }, dd); return resetElements(); } var item = newNode(sublis[0].nodeName, { 'class': 'trans-' + values.lang }); var linestart = item.nodeName == 'DD' ? '\n*: ' : '\n** '; item.innerHTML = content; for (var m = 0; m < sublis.length; m++) { var subln = getLangName(sublis[m]); var sub = sublis[m]; if (subln && sameName(subln, lang)) { var addSpan = newNode('span', { 'class': 'translation-adder-added' }); addSpan.innerHTML = ", " + afterColon(content); addEdit({ 'redo': function () { appendToLine(sub, addSpan); }, 'undo': function () { sub.removeChild(addSpan); }, 'edit': getEditFunction(values, wikitext, lang, values.lang, function (text, ipos) { // Adding to an existing nested line. var lineend = text.indexOf('\n', ipos); return text.substr(0, lineend) + "," + wikitext.substr(wikitext.indexOf(':') + 1) + text.substr(lineend); }) }, addSpan); return resetElements(); } else if (subln && langmetadata.nestsBefore(lang, subln)) { addEdit({ 'redo': function () { sub.parentNode.insertBefore(item, sub); }, 'undo': function () { sub.parentNode.removeChild(item); }, 'edit': getEditFunction(values, wikitext, subln, getLangCode(sub), function (text, ipos) { // A nested line in order. var lineend = text.lastIndexOf('\n', ipos); return text.substr(0, lineend) + linestart + wikitext + text.substr(lineend); }) }, item); return resetElements(); } } var last = sublis[sublis.length - 1]; addEdit({ 'redo': function () { last.parentNode.appendChild(item); }, 'undo': function () { last.parentNode.removeChild(item); }, 'edit': getEditFunction(values, wikitext, getLangName(last), getLangCode(last), function (text, ipos) { // A nested line at the end of its group. var lineend = text.indexOf('\n', ipos); return text.substr(0, lineend) + linestart + wikitext + text.substr(lineend); }) }, item); return resetElements(); } else if (tln && compareNames(tln, nestedHeading) > 0 && (!nextLanguage || compareNames(tln, nextLanguage) < 0)) { nextLanguage = tln; var next = tops[k]; insertBefore = [{ 'redo': function () { next.parentNode.insertBefore(li, next); }, 'undo': function () { next.parentNode.removeChild(li); }, 'edit': getEditFunction(values, wikitext, tln, getLangCode(next), function (text, ipos) { // A new group line with the nested line under it. var lineend = text.lastIndexOf('\n', ipos); return text.substr(0, lineend) + nestedWikitext + text.substr(lineend); }) }, li]; } } wikitext = "{{Z|" + nestedCode + "}}:\n*: " + wikitext; } li.className = "trans-" + values.lang; if (insertBefore) { addEdit(insertBefore[0], insertBefore[1]); } else { // After the last line. addEdit({ 'redo': function () { insertUl.appendChild(li); }, 'undo': function () { insertUl.removeChild(li); }, 'edit': getEditFunction(values, wikitext) }, li); } return resetElements(); } // The wikitext change for this submission. With findLanguage, callback gets the position of that // language's line; without, the line goes at the end of the box. function getEditFunction(values, wikitext, findLanguage, findLangCode, callback) { return function (text) { var p = util.getTransTable(text, insertUl); if (!p) return editor.error("Qutiya tercimeyan ji bo '" + values.lang + ":" + values.word + "' nehat dîtin. Maneyên qutiyan divê ji hev cuda bin."); var stapos = p[0]; var endpos = p[1]; if (findLanguage) { var box = text.substring(stapos, endpos); var sub = values.nested ? "[:*]?" : ""; var escapedName = mw.util.escapeRegExp(findLanguage); var patterns = [ "\\*" + sub + " ?\\[\\[" + escapedName + "\\]\\]:", "\\*" + sub + " ?" + escapedName + ":" ]; if (findLangCode) patterns.unshift("\\*" + sub + " ?\\{\\{\\s*Z\\s*\\|\\s*" + mw.util.escapeRegExp(findLangCode) + "\\s*(?:\\|[^{}]*)?\\}\\}\\s*:"); var ipos = -1; for (var i = 0; i < patterns.length && ipos == -1; i++) { ipos = box.search(new RegExp(patterns[i], "i")); } if (ipos > -1) { return callback(text, ipos + stapos); } return editor.error("Rêza zimanê " + findLanguage + " nehat dîtin. Ji kerema xwe rêzê rast bike."); } return text.substr(0, endpos) + "* " + wikitext + "\n" + text.substr(endpos); }; } } function createTranslationAdderRow(li) { var $ul = $("<ul>").append(li); return $("<tr>") .addClass("translation-adder-row") .append($("<td>").attr("colspan", "3").css("text-align", "left").append($ul)); } $root.find('table.translations').each(function () { if (this.dataset.translationAdder) { return; } this.dataset.translationAdder = "1"; var td = $(this).find("td.translations-cell")[0]; if (!td) { return; } var uls = $(td).children("ul").get(); if (uls.length == 0) { uls = [td.appendChild(newNode('ul'))]; } var li = document.createElement('li'); $(this).append(createTranslationAdderRow(li)); new AdderWrapper(editor, new TranslationAdder(uls[uls.length - 1]), li); var head = $(this).closest('.NavFrame').children('.NavHead')[0]; if (head) { new TranslationLabeller(head); } }); } // HTML for wikitext as this page renders it, without the paragraph around it. function render(wikitext) { return new mw.Api().parse(wikitext, { title: mw.config.get('wgPageName'), pst: true, disablelimitreport: true }).then(function (html) { var $out = $('<div>').html(html); var $p = $out.find('p').first(); return ($p.length ? $p : $out.children().first()).html().trim(); }); } // The wikitext of a translation line: {start, restStart, end, rest}, where rest is what follows // "Language:"; null when the line is not found. function findLine(text, line) { var box = util.getTransTable(text, line); if (!box) { return null; } var code = getLangCode(line); var name = getLangName(line); var label = code ? "\\{\\{\\s*Z\\s*\\|\\s*" + mw.util.escapeRegExp(code) + "\\s*(?:\\|[^{}\\n]*)?\\}\\}" : "(?:\\[\\[" + mw.util.escapeRegExp(name) + "\\]\\]|" + mw.util.escapeRegExp(name) + ")"; var part = text.substring(box[0], box[1]); var m = new RegExp("^\\*[:*]* ?" + label + "\\s*:[ \\t]*(.*)$", "im").exec(part); if (!m) { return null; } var start = box[0] + m.index; var end = start + m[0].length; return { start: start, restStart: end - m[1].length, end: end, rest: m[1], label: text.substring(start, end - m[1].length) }; } // A line's own nodes: everything before the lines nested under it, without this gadget's buttons. function ownNodes(line) { var nodes = []; for (var node = line.firstChild; node && !/^(UL|DL)$/.test(node.nodeName); node = node.nextSibling) { if (!(node.nodeType === 1 && /(?:^|\s)translation-adder-(?:line-tools|term-edit)(?:\s|$)/.test(node.className))) { nodes.push(node); } } return nodes; } var TERM_CALL = /\{\{\s*W[+-]?(?:\/ceribandin)?\s*\|/g; // The {{W}} calls in the wikitext after "Language:", in order: [{start, end, text}]. function termCalls(rest) { var out = []; var m; TERM_CALL.lastIndex = 0; while ((m = TERM_CALL.exec(rest))) { var end = util.parseTemplate(rest, m.index).end; out.push({ start: m.index, end: end, text: rest.substring(m.index, end) }); TERM_CALL.lastIndex = end; } return out; } // rest with its i-th {{W}} call replaced by text, or removed with the comma that joins it to the others. function replaceTerm(rest, i, text) { var call = termCalls(rest)[i]; if (!call) { return null; } if (text) { return rest.substring(0, call.start) + text + rest.substring(call.end); } var before = rest.substring(0, call.start); var after = rest.substring(call.end); if (/,\s*$/.test(before)) { before = before.replace(/\s*,\s*$/, ''); } else { after = after.replace(/^\s*,\s*/, ''); } return (before + after).trim(); } // The rendered translations of a line, in order: the element each {{W}} call starts with. function termNodes(line) { var nodes = []; ownNodes(line).forEach(function (n) { if (n.nodeType === 1 && /(?:^|\s)translation-adder-added(?:\s|$)/.test(n.className)) { nodes.push.apply(nodes, Array.prototype.slice.call(n.childNodes)); } else { nodes.push(n); } }); // A translation starts with its link's span, or with the "ttbc" span of one marked for checking. // The second form after a "/" (traditional / simplified Chinese) belongs to the same translation. var terms = []; var afterSlash = false; nodes.forEach(function (n) { if (n.nodeType === 3) { if (n.data.trim()) { afterSlash = n.data.trim() === '/'; } return; } if (n.nodeType !== 1) { return; } // The separator is drawn in a span of its own. if (!n.lang && n.textContent.trim() === '/') { afterSlash = true; return; } var isTerm = /(?:^|\s)ttbc(?:\s|$)/.test(n.className) || (n.lang && !/(?:^|\s)(?:tr|ts)(?:\s|$)/.test(n.className)); if (isTerm && !(afterSlash && terms.length)) { terms.push(n); } afterSlash = false; }); return terms; } // The template dialog of [[MediaWiki:Gadget-wikt.cite.js]], built from the template's TemplateData. // Resolves with the edited call, "" when it is removed, or null when cancelled. function templateDialog(call) { return mw.loader.using('ext.gadget.wikt.cite').then(function (require) { return require('ext.gadget.wikt.cite').openTemplateDialog(call); }); } // On one translation line: ✎ and × after each translation (its template in a dialog, and removing it). function LineTools(editor, line) { var name = getLangName(line); if (!name) { return; } var code = getLangCode(line); var title = ucfirst(codeToName[code] || name); var $tools = $('<span class="translation-adder-line-tools">'); var self = this; this.$tools = $tools; this.line = line; // Whether editing mode is on; set by setLineEditing(). this.editing = true; var nested = line.querySelector('ul, dl'); if (nested) { $(nested).before($tools); } else { $(line).append($tools); } function notFound() { return editor.error("Rêza " + title + " di wîkîmetnê de nehat dîtin."); } // The i-th translation drawn is the i-th {{W}} call only when the line holds nothing else that draws // one ({{g}}, {{l}}, …); otherwise ✎ and × could reach the wrong one, so they refuse. function callsMatch(found) { if (termCalls(found.rest).length === termNodes(line).length) { return true; } editor.error("Tercimeyên rêza " + title + " bi wîkîmetnê re li hev nayên; rêzê bi destan biguherîne."); return false; } // Queues a new text after "Language:", drawn in place from its rendering. function queueRest(makeRest, summary) { editor.withCurrentText(function (text) { var found = findLine(text, line); var rest = found && makeRest(found.rest); if (rest === null || rest === undefined) { return notFound(); } render(found.label.replace(/^\*[:*]* ?/, '') + ' ' + rest).then(function (html) { var before = ownNodes(line); var holder = document.createElement('span'); holder.innerHTML = html; var after = Array.prototype.slice.call(holder.childNodes); editor.addEdit({ redo: function () { before.forEach(function (n) { $(n).detach(); }); after.forEach(function (n) { line.insertBefore(n, $tools[0]); }); self.markTerms(); }, undo: function () { after.forEach(function (n) { $(n).detach(); }); before.forEach(function (n) { line.insertBefore(n, $tools[0]); }); self.markTerms(); }, edit: function (current) { var at = findLine(current, line); var next = at && makeRest(at.rest); if (next === null || next === undefined) { return notFound(); } return current.substring(0, at.restStart) + next + current.substring(at.end); }, summary: summary }, line); }); }); } // The pencil after each translation, put back whenever the line is redrawn. this.markTerms = function () { $(line).children('.translation-adder-term-edit') .add($(line).children('.translation-adder-added').children('.translation-adder-term-edit')) .remove(); var terms = termNodes(line); terms.forEach(function (term, i) { var $edit = $('<a href="#" class="translation-adder-term-edit translation-adder-term-pencil"></a>') .attr({ title: 'Vê tercimeyê biguherîne', 'aria-label': 'Vê tercimeyê biguherîne' }); // After everything the translation draws: its interwiki link, gender and transliteration. var last = term; while (last.nextSibling && !/^(UL|DL)$/.test(last.nextSibling.nodeName) && terms.indexOf(last.nextSibling) === -1 && !(last.nextSibling.nodeType === 3 && /[,;]/.test(last.nextSibling.data)) && !(last.nextSibling.nodeType === 1 && /translation-adder-(?:line-tools|added)/.test(last.nextSibling.className))) { last = last.nextSibling; } var $del = $('<a href="#" class="translation-adder-term-edit translation-adder-term-close"></a>') .attr({ title: 'Vê tercimeyê rake', 'aria-label': 'Vê tercimeyê rake' }); $(last).after($edit, $del); $edit.add($del).toggle(self.editing); // The only translation of a line with nothing under it takes the line with it. $del.on('click', function (e) { e.preventDefault(); editor.withCurrentText(function (text) { var found = findLine(text, line); if (!found || !termCalls(found.rest)[i]) { return notFound(); } if (!callsMatch(found)) { return; } if (termCalls(found.rest).length === 1 && !line.querySelector('ul, dl')) { removeLine(); } else { queueRest(function (rest) { return replaceTerm(rest, i, ''); }, '−' + title); } }); }); $edit.on('click', function (e) { e.preventDefault(); editor.withCurrentText(function (text) { var found = findLine(text, line); var call = found && termCalls(found.rest)[i]; if (!call) { return notFound(); } if (!callsMatch(found)) { return; } templateDialog(call.text).then(function (edited) { if (edited === null || edited === call.text) { return; } queueRest(function (rest) { return replaceTerm(rest, i, edited); }, (edited ? '±' : '−') + title); }); }); }); }); }; this.markTerms(); function removeLine() { editor.addEdit({ redo: function () { line.classList.add('translation-adder-removed'); }, undo: function () { line.classList.remove('translation-adder-removed'); }, edit: function (current) { var at = findLine(current, line); if (!at) { return notFound(); } return current.substring(0, at.start) + current.substring(at.end + (current.charAt(at.end) === '\n' ? 1 : 0)); }, summary: '−' + title }, line); } } // ---- nesting: a language en.wiktionary nests (cmn) goes under its group's line ({{Z|zh}}) ---- // The language code of a wikitext line, from its {{Z}}. function lineCode(l) { var m = /^\*[:*]* ?\{\{\s*Z\s*\|\s*([^|}\s]+)/.exec(l); return m ? m[1] : null; } // The language name of a wikitext line, for sorting. function lineName(l) { var code = lineCode(l); if (code) { return groupName(code); } var m = /^\*[:*]* ?(?:\[\[)?([^\]:|]+)/.exec(l); return m ? m[1].trim() : ''; } function isChildLine(l) { return /^\*[:*]/.test(l) && !/^\*[:*][:*]/.test(l); } // text with the top-level lines of node's box whose language nests (only that language, if given) moved // under their group line, which is added in order where there is none. A group that already has a line for // the language gets its translations added to it. function nestLines(text, node, only) { var p = util.getTransTable(text, node); if (!p) { return null; } var meta = new LangMetadata(); var body = text.substring(p[0], p[1]); var trimmed = body.replace(/\n+$/, ''); var tail = body.slice(trimmed.length); var head = [], entries = []; trimmed.split('\n').forEach(function (l) { if (/^\*(?![:*])/.test(l)) { entries.push({ line: l, code: lineCode(l), children: [] }); } else if (entries.length) { entries[entries.length - 1].children.push(l); } else { head.push(l); } }); var moved = 0; entries.slice().forEach(function (e) { var parent = e.code && meta.getNested(e.code); if (!parent || (only && e.code !== only)) { return; } entries.splice(entries.indexOf(e), 1); var group = entries.filter(function (x) { return x.code ? x.code === parent : sameName(lineName(x.line), groupName(parent)); })[0]; if (!group) { group = { line: '* {{Z|' + parent + '}}:', code: parent, children: [] }; var at = entries.findIndex(function (x) { return compareNames(lineName(x.line), groupName(parent)) > 0; }); entries.splice(at === -1 ? entries.length : at, 0, group); } var prefix = group.children.some(function (c) { return /^\*\*/.test(c); }) ? '**' : '*:'; var deeper = e.children.map(function (c) { return prefix + c.slice(1); }); var same = group.children.findIndex(function (c) { return isChildLine(c) && lineCode(c) === e.code; }); if (same !== -1) { var terms = e.line.replace(/^\*\s*\{\{[^{}]*\}\}\s*:\s*/, ''); group.children[same] = group.children[same].replace(/\s*$/, '') + (terms ? ', ' + terms : ''); [].splice.apply(group.children, [same + 1, 0].concat(deeper)); } else { var name = codeToName[e.code] || e.code; var at2 = group.children.findIndex(function (c) { return isChildLine(c) && compareNames(lineName(c), name) > 0; }); [].splice.apply(group.children, [at2 === -1 ? group.children.length : at2, 0] .concat([prefix + ' ' + e.line.replace(/^\*\s*/, '')], deeper)); } moved++; }); if (!moved) { return text; } var out = head.slice(); entries.forEach(function (x) { out.push(x.line); out.push.apply(out, x.children); }); return text.substring(0, p[0]) + out.join('\n') + tail + text.substring(p[1]); } // The top-level lines of a box. function topLines(table) { return $(table).find('td.translations-cell').first().children('ul').children('li').get(); } // The top-level lines whose language nests: [{li, code, parent}]. function misplacedLines(table, only) { var meta = new LangMetadata(); return topLines(table).map(function (li) { var code = getLangCode(li); var parent = code && meta.getNested(code); return parent && (!only || code === only) ? { li: li, code: code, parent: parent } : null; }).filter(Boolean); } // Draws nestLines() on the page: the lines move under their group, highlighted. Returns the undo. function nestDom(table, only) { var undos = []; misplacedLines(table, only).forEach(function (m) { var group = topLines(table).filter(function (li) { return isGroupLine(li, m.parent); })[0]; if (!group) { var made = newNode('li', { 'class': 'trans-' + m.parent + ' translation-adder-new' }, ucfirst(groupName(m.parent)) + ':'); var next = topLines(table).filter(function (li) { return compareNames(getLangName(li), getLangName(made)) > 0; })[0]; m.li.parentNode.insertBefore(made, next || null); group = made; undos.push(function () { $(made).remove(); }); } var list = $(group).children('dl, ul')[0]; if (!list) { var newList = list = group.appendChild(newNode('dl')); undos.push(function () { $(newList).remove(); }); } var home = m.li.parentNode, after = m.li.nextSibling; var item = $(list).children().filter(function () { return getLangCode(this) === m.code; })[0]; if (item) { var span = newNode('span', { 'class': 'translation-adder-new' }); var holder = document.createElement('div'); ownNodes(m.li).forEach(function (n) { holder.appendChild(n.cloneNode(true)); }); span.innerHTML = ', ' + afterColon(holder.innerHTML); var sub = $(item).children('dl, ul')[0]; item.insertBefore(span, sub || null); m.li.style.display = 'none'; undos.push(function () { $(span).remove(); m.li.style.display = ''; }); } else { var before = $(list).children().filter(function () { return compareNames(getLangName(this), getLangName(m.li)) > 0; })[0]; // In a "*:" list the line is drawn as a <dd>, as the saved page will have it. var wrap = list.nodeName === 'DL' ? newNode('dd', { 'class': 'translation-adder-wrap' }) : null; if (wrap) { wrap.appendChild(m.li); list.insertBefore(wrap, before || null); } else { list.insertBefore(m.li, before || null); } m.li.classList.add('translation-adder-new'); undos.push(function () { m.li.classList.remove('translation-adder-new'); home.insertBefore(m.li, after); $(wrap).remove(); }); } }); return function () { undos.reverse().forEach(function (f) { f(); }); }; } // The change that nests the lines of table's box (only one language's, if given). function nestEdit(table, only) { var undo = null; return { redo: function () { undo = nestDom(table, only); }, undo: function () { if (undo) { undo(); undo = null; } }, edit: function (text) { return nestLines(text, table, only); }, summary: 'tercime di bin zimanên xwe de' }; } // Shows (on) or hides the ✎ and × on every translation line of the boxes in root, and on a box with // lines that belong under another language a link that moves them there. function setLineEditing(root, editor, on) { return loadNames().then(function () { editor = editor || new Editor(); // root may be a box itself. var $tables = $(root).find('table.translations').addBack('table.translations'); $tables.each(function () { var table = this; var $row = $(table).data('translationAdderNest'); if (!$row && on) { var count = misplacedLines(table).length; if (!count) { return; } var $nest = $('<a href="#">').text(count === 1 ? 'Rêzekê di bin zimanê wê de bi cih bike' : count + ' rêzan di bin zimanên wan de bi cih bike'); $row = $('<tr class="translation-adder-nest-row">').append($('<td colspan="3">').append('↳ ', $nest)); $(table).find('td.translations-cell').first().parent().before($row); $(table).data('translationAdderNest', $row); $nest.on('click', function (e) { e.preventDefault(); editor.addEdit(nestEdit(table), null); // Built afresh if the nesting is undone and lines are misplaced again. $(table).removeData('translationAdderNest'); $row.remove(); }); } if ($row) { $row.toggle(on); } }); $tables.find('td.translations-cell').find('li, dd').each(function () { var tools = $(this).data('translationAdderTools'); if (!tools && on) { tools = new LineTools(editor, this); $(this).data('translationAdderTools', tools); } if (tools && tools.$tools) { tools.editing = on; tools.$tools.toggle(on); if (on) { tools.markTerms(); } $(this).find('.translation-adder-term-edit').filter(function () { return $(this).closest('li, dd')[0] === tools.line; }).toggle(on); } }); }); } // Adds the forms to the boxes in root (an element or jQuery object). editor collects the changes: by // default this gadget's own Editor; DefSideBoxes passes one that queues them in its save box. function attach(root, editor) { return loadNames().then(function () { TranslationAdders(editor || new Editor(), $(root)); }); } window.wikt = window.wikt || {}; window.wikt.translationAdder = { attach: attach, setLineEditing: setLineEditing, compareNames: compareNames }; module.exports = window.wikt.translationAdder; // </nowiki> 74ue3plxewlkymab85abv51b5gvn9vi MediaWiki:Gadget-wikt.dsb-sense.js 8 1359509 6865668 6865612 2026-10-24T17:12:00Z Wikihez 7344 DSB: keep add-examples' form alive when a queued preview is redrawn, so it can be opened again 6865668 javascript text/javascript // <nowiki> /* * Page: [[MediaWiki:Gadget-wikt.dsb-sense.js]] * * The per-sense panel and the example editor of DefSideBoxes, loaded by wikt.dsb from a sense's or an * example's pencil. The queue, previews and shared helpers are in [[MediaWiki:Gadget-wikt.dsb-panels.js]]. */ (function () { "use strict"; var edit = require("ext.gadget.wikt.edit"); var cite = require("ext.gadget.wikt.cite"); var util = edit.util; var wt = edit.wt; var startData = edit.data; var canonicalTemplateKey = wt.canonicalTemplateKey; var aliasPattern = wt.aliasPattern; var splitLeadingCalls = wt.splitLeadingCalls; var parseTemplateCalls = wt.parseTemplateCalls; var fetchTemplateData = wt.fetchTemplateData; var shared = require("ext.gadget.wikt.dsb-panels").shared; var SubmitAbort = shared.SubmitAbort; var announceContent = shared.announceContent; var apiErrorMessage = shared.apiErrorMessage; var buildWordListField = shared.buildWordListField; var dropQueueEntry = shared.dropQueueEntry; var dsbQueue = shared.dsbQueue; var fetchPageContent = shared.fetchPageContent; var hideQueueIfIdle = shared.hideQueueIfIdle; var locateSection = shared.locateSection; var openQueueBox = shared.openQueueBox; var placeLabel = shared.placeLabel; var queueChange = shared.queueChange; var queuedContent = shared.queuedContent; var redrawPreviews = shared.redrawPreviews; var renderWikitext = shared.renderWikitext; // The six per-sense groups start.js writes as "#: {{tpl|lang|word1|word2}}" sub-lines under a "#" definition. // Array order controls where a new group line lands relative to existing ones. Every group lives behind the // quick row's "Hevmane û Bêhtir" dropdown; only the gloss and Nimûne/jêgirtin links sit in the row itself. var SENSE_GROUPS = startData.senseGroups; var GLOSS_LABEL = "Maneyê biguhêre"; var NEWLINE = String.fromCharCode(10); // A gloss is one field on the page: the sense, then {{îzah|…}} explaining it when there is one. function joinGloss(mane, izah) { return izah ? $.trim(mane + " {{îzah|" + izah + "}}") : $.trim(mane); } // The two halves are linked separately, never joined first: linkify leaves template calls alone by // design, so anything inside {{îzah|…}} would never be looked at. // // A half is skipped when there is nothing in it worth looking up, and -- when onlyUnlinked is set -- // when it already carries a link. Someone who has linked a word by hand has made that half theirs, and // a save must not go on linking the rest of it behind their back; "Oto-lînk bike" leaves the flag off // and still links on demand. function linkifyGlossParts(mane, izah, done, onlyUnlinked) { function needsLinking(text) { if (!$.trim(text) || !util.hasLinkableText(text)) { return false; } return !(onlyUnlinked && text.indexOf("[[") !== -1); } function step(text, next) { if (!needsLinking(text)) { next(text, null); return; } util.linkifyText(text, function (linked, error) { // An empty answer would wipe what the user typed, so only real text is taken. next(typeof linked === "string" && $.trim(linked) ? $.trim(linked) : text, error || null); }); } step(mane, function (linkedMane, maneError) { step(izah, function (linkedIzah, izahError) { done(linkedMane, linkedIzah, maneError || izahError); }); }); } /** * Puts a rendered sense in place of the one on the page, keeping this gadget's own furniture (the * pencil's toolbar, the quick row, any open panel) where it is. The page's own nodes are detached * rather than dropped, so the returned function can put them straight back when the change is * cancelled or superseded. * * Nothing labels the result: the change is shown by the sense simply reading the way it will read, * and the queue box is what says nothing is saved yet. */ // add-examples builds its form once per sense and reuses it, but jQuery's remove() strips the handlers // of everything inside: a form opened on a drawn example or in a new-sense row is moved back under its // sense before that content goes, or its buttons are dead the next time it opens. function rescueExampleForms($el, $li) { var $forms = $el.find(".add-example-form"); if (!$forms.length) { return; } var $ul = $li.children("ul").last(); if ($ul.length) { $ul.after($forms); } else { $li.append($forms); } } function replaceSenseInPlace($li, item) { var html = item.html; var $anchor = $li.children(".dsb-toolbar").last(); // class/id/data-* off the parsed <li>, so a queued maneid shows its pill here exactly as it will // once saved. The old values are kept for the restore below. var node = $li.get(0); var before = {}; $.each(node.attributes, function (_, attr) { before[attr.name] = attr.value; }); $.each(item.attrs, function (name, value) { if (name !== "class") { $li.attr(name, value); } }); var addedClasses = (item.attrs["class"] || "").split(/\s+/).filter(function (c) { return c && !$li.hasClass(c); }); $li.addClass(addedClasses.join(" ")); // add-examples hangs its own <ul> off the sense and opens its form as that <ul>'s next sibling. // Detaching those leaves the form to open into a tree nobody can see -- "+ Nimune/jegirtin" takes // the click and shows nothing -- so they stay where they are. Only the rows already in that <ul> // are hidden, since the preview draws the examples itself; the tool's own title line stays. var $keep = $li.children("ul, .add-example-form"); var $hiddenRows = $keep.filter("ul").children("li").filter(function () { return !$(this).find(".add-example-form-title").length; }); $hiddenRows.addClass("dsb-preview-hidden"); var originals = $li.contents().filter(function () { return !$(this).is(".dsb-toolbar, .dsb-quick-row, .dsb-subsection-panel, .dsb-preview-block, .dsb-sense-preview"); }).not($keep).get(); // Where the sense's own nodes sat, so cancelling puts them back there rather than above the quick // row -- the row belongs between the sense and its examples. var backAfter = originals.length ? originals[0].previousSibling : null; var $rendered = $("<span class='dsb-sense-preview'></span>").html(html); if ($anchor.length) { $anchor.after($rendered); } else { $li.prepend($rendered); } $(originals).detach(); announceContent($rendered); // The id pill is drawn by the same code a page load uses, so a queued maneid looks like a saved // one rather than like something this gadget invented. if (window.wikt && wikt.showIDs && wikt.showIDs.process) { wikt.showIDs.process($li); } // dsb.js puts the example pencils back on the redrawn examples. The originals keep theirs. $li.triggerHandler("dsbSenseRedrawn"); return function () { $hiddenRows.removeClass("dsb-preview-hidden"); $li.removeClass(addedClasses.join(" ")); $.each(item.attrs, function (name) { if (name === "class") { return; } if (Object.prototype.hasOwnProperty.call(before, name)) { $li.attr(name, before[name]); } else { $li.removeAttr(name); } }); $li.children(".senseid-displayed, .etymid-displayed, .etymonid-displayed").remove(); if (backAfter && backAfter.parentNode === node) { $(backAfter).after(originals); } else if ($anchor.length) { $anchor.after(originals); } else { $li.prepend(originals); } rescueExampleForms($rendered, $li); $rendered.remove(); }; } /** * The <li> out of a parsed "#" block, and the attributes it carries. * * The parse wraps it in its own <ol>, which must not reach the page: the sense already has a number * from the list it lives in. A leading {{maneid}} also makes the parser emit an empty * "li.mw-empty-elt" ahead of the real one, so the first <li> is not necessarily the sense. * * The attributes matter as much as the content: {{maneid|ku|x}} renders as class="senseid" * data-id="x" on the <li> itself, which is what wikt.showids draws its pill from. */ function parsedSenseItem(html, depth) { var $item = $("<div></div>").html(html).find("ol > li").filter(function () { return !$(this).hasClass("mw-empty-elt"); }).first(); // A sub-sense parsed on its own comes back one <ol> deeper per "#": "##" is a list inside a list. // Descend as far as the sense's own depth, or its number would be drawn inside a second list -- // "2." with a "1." under it. for (var level = 1; level < (depth || 1) && $item.length; level++) { var $inner = $item.children("ol").children("li").filter(function () { return !$(this).hasClass("mw-empty-elt"); }).first(); if (!$inner.length) { break; } $item = $inner; } if (!$item.length) { return { html: html, attrs: {} }; } var attrs = {}; $.each($item.get(0).attributes, function (_, attr) { attrs[attr.name] = attr.value; }); return { html: $item.html(), attrs: attrs }; } /** * Where a sense sits in the page the queue would save. A queued removal of an earlier sense moves * everything below it up one, while the path was read off the page before that. Returns null when the * sense itself, or a sense it hangs under, is the one being removed. */ function queuedSensePath(language, definitionLevel) { var path = definitionLevel.slice(); var gone = false; dsbQueue.entries.forEach(function (entry) { var other = entry.removesSense && entry.sensePath; if (!other || entry.senseLanguage !== language || other[0] !== path[0]) { return; } var depth = other.length - 1; if (depth >= path.length) { return; // a sub-sense of something else; it moves nothing here } for (var i = 1; i < depth; i++) { if (other[i] !== path[i]) { return; // another branch of the list } } if (other[depth] < path[depth]) { path[depth] -= 1; } else if (other[depth] === path[depth]) { gone = true; } }); return gone ? null : path; } /** * Redraws one sense where it sits, from the page the queue would save -- so a queued gloss edit, a * queued example and everything else pending on that sense are shown together, rendered by the parser * rather than described in a box. Returns the queue's own "take the preview down" function. * * One preview per sense: a second queued change takes the first drawing down and draws the queue. */ function previewSense($li, language, sectionType, sectionOrdinal, definitionLevel) { var cancelled = false; var restore = null; function undo() { cancelled = true; if (restore) { restore(); restore = null; } if ($li.data("dsbPreview") === undo) { $li.removeData("dsbPreview"); } } var previous = $li.data("dsbPreview"); if (typeof previous === "function") { previous(); } $li.data("dsbPreview", undo); fetchPageContent().then(function (pageContent) { if (cancelled) { return; } var path = queuedSensePath(language, definitionLevel); if (!path) { return; } var wikitext; try { wikitext = senseBlockWikitext(queuedContent(pageContent), language, sectionType, sectionOrdinal, path); } catch (e) { return; } renderWikitext(wikitext).then(function (html) { if (cancelled || $li.data("dsbPreview") !== undo || !$li.closest("body").length) { return; } restore = replaceSenseInPlace($li, parsedSenseItem(html, definitionLevel.length - 1)); }); }); return undo; } // The parts of a sense the form actually changed, so the summary lists them instead of saying nothing. // A save on a sense supersedes the one queued for it (they share a key), so it has to write that one's // fields too. newer over older: a field the newer save touched wins, the rest stays as the older save // left it. A gloss is only ever present when its box was open, so a missing one means untouched. function mergeSenseChanges(older, newer) { if (!older) { return newer; } var merged = { gloss: newer.gloss || older.gloss, maneid: newer.changed.maneid ? newer.maneid : older.maneid, etiket: newer.changed.etiket ? newer.etiket : older.etiket, kategori: newer.changed.kategori ? newer.kategori : older.kategori, words: {}, changed: $.extend({}, older.changed, newer.changed) }; SENSE_GROUPS.forEach(function (group) { merged.words[group.key] = newer.changed["word:" + group.key] ? newer.words[group.key] : (older.words[group.key] || []); }); return merged; } // The sense's fields as the page has them, with a queued change written over the top: what the boxes // prefill from and what collectChanges() diffs against, so reopening a box shows the value that is // waiting to be saved rather than the one it is about to replace. function overlaySenseFields(fields, queued) { if (!queued) { return fields; } var out = { gloss: queued.gloss || fields.gloss, maneid: queued.changed.maneid ? queued.maneid : fields.maneid, etiket: queued.changed.etiket ? queued.etiket : fields.etiket, kategori: queued.changed.kategori ? queued.kategori : fields.kategori, words: {} }; SENSE_GROUPS.forEach(function (group) { out.words[group.key] = queued.changed["word:" + group.key] ? queued.words[group.key] : fields.words[group.key]; }); return out; } function senseChangeLabels(changes) { var parts = []; var changed = changes.changed || {}; if (changes.gloss) { parts.push("mane"); } if (changes.newSense) { parts.push("maneyeke nû"); } SENSE_GROUPS.forEach(function (group) { if (changed["word:" + group.key]) { parts.push(group.label.toLowerCase()); } }); if (changed.maneid) { parts.push("id"); } if (changed.etiket) { parts.push("etîket"); } if (changed.kategori) { parts.push("kategorî"); } return parts; } var findDefinitionLine = wt.findDefinitionLine; /** * The wikitext of one sense's own block: its "#" line plus everything nested under it -- the "#:" word * lines, the "#*" citations and any sub-senses -- stopping at the next line of the same depth that * starts a new sense. Parsed on its own that block renders as exactly the <li> the page shows. */ function senseBlockWikitext(pageContent, language, sectionType, sectionOrdinal, definitionLevel) { var loc = locateSection(pageContent, language, sectionType, sectionOrdinal); var lines = loc.lines; var defLine = findDefinitionLine(lines, loc.posLineIndex, definitionLevel); var depth = definitionLevel.length - 1; var out = [lines[defLine]]; for (var i = defLine + 1; i < lines.length; i++) { var m = /^(#+)([:*]?)/.exec(lines[i]); if (!m || m[1].length < depth) { break; } // Same depth and no ":" or "*" after the hashes is the next sense, not part of this one. if (m[1].length === depth && !m[2]) { break; } out.push(lines[i]); } return out.join("\n"); } // The word-list call a "#:" line under a sense is made of, as {name, words}: name as the page spells it, // words its parameters after the language, each whole even when it holds a template or a piped link. // Null when the line is not one call of keys (canonical names), or carries anything beside the call. function senseGroupCall(line, marker, keys) { var lead = new RegExp("^" + marker + ":\\s*").exec(line); if (!lead) { return null; } var parsed = parseTemplateCalls(line.slice(lead[0].length)); if (parsed.otherContent || parsed.calls.length !== 1) { return null; } var call = parsed.calls[0]; if (keys.indexOf(canonicalTemplateKey(call.name)) === -1) { return null; } return { name: call.name, words: call.params.slice(1).map(function (p) { return $.trim(p); }) }; } // Inserts or extends a "#: {{tplKey|lang|word1|word2}}" sub-line for one sense (start.js's wordLine() // format). If a line for this tplKey already exists under the definition, missing words are appended to // it; otherwise a new line lands after the last existing group line, always before any "#*" citation lines. function insertSenseWords(pageContent, language, sectionType, sectionOrdinal, definitionLevel, tplKey, words, opts) { opts = opts || {}; var loc = locateSection(pageContent, language, sectionType, sectionOrdinal); var lines = loc.lines; var defLine = findDefinitionLine(lines, loc.posLineIndex, definitionLevel); var marker = new Array(definitionLevel.length).join("#"); // definitionLevel.length - 1 "#" characters // An existing {{hevwate}} stays {{hevwate}} rather than being silently renamed to {{hevmane}}. var tplLineStart = new RegExp("^" + marker + ":\\s*\\{\\{\\s*(" + aliasPattern(tplKey) + ")\\s*\\|"); var groupKeysPattern = SENSE_GROUPS.map(function (g) { return aliasPattern(g.key); }).join("|"); var groupLineRegex = new RegExp("^" + marker + ":\\s*\\{\\{\\s*(" + groupKeysPattern + ")\\s*\\|"); var anyBlockLineRegex = new RegExp("^" + marker + "[:*]"); var lastGroupLine = -1; for (var i = defLine + 1; i < lines.length; i++) { if (!anyBlockLineRegex.test(lines[i])) { break; } var found = senseGroupCall(lines[i], marker, [tplKey]); // A line of this list that is more than its one call cannot be rewritten without losing what // else it holds, nor left beside a second one. if (!found && tplLineStart.test(lines[i])) { throw new SubmitAbort("Rêza «" + tplKey + "» ya vê maneyê nayê xwendin; wê bi destan biguhêre."); } if (found) { var foundKey = found.name; if (opts.replace) { // Editing an existing list: an empty result means the user cleared it, so drop the line. if (words.length) { lines[i] = marker + ": {{" + foundKey + "|" + language + "|" + words.join("|") + "}}"; } else { lines.splice(i, 1); } return pageContent.slice(0, loc.langSectionIndex) + lines.join("\n"); } var existingWords = found.words; words.forEach(function (w) { if (existingWords.indexOf(w) === -1) { existingWords.push(w); } }); lines[i] = marker + ": {{" + foundKey + "|" + language + "|" + existingWords.join("|") + "}}"; return pageContent.slice(0, loc.langSectionIndex) + lines.join("\n"); } if (groupLineRegex.test(lines[i])) { lastGroupLine = i; } } // Nothing to write and no line to edit: a call with no words is a module error ("Parametreya 2 // lazim e"), so an empty list leaves the page alone rather than writing one. if (!words.length) { return pageContent; } var insertAt = lastGroupLine >= 0 ? lastGroupLine + 1 : defLine + 1; lines.splice(insertAt, 0, marker + ": {{" + tplKey + "|" + language + "|" + words.join("|") + "}}"); return pageContent.slice(0, loc.langSectionIndex) + lines.join("\n"); } // Canonical left-to-right order of the small templates that can prefix a definition line's gloss text: // maneid, then kategori (K), then etîket (e). var LEADING_TPL_ORDER = startData.leadingTplOrder; // True for a leading call the advanced panel edits in a box of its own -- those are kept out of the // gloss box so the same template is never editable in two places at once. Redirect spellings count: // {{f}} and {{etîket}} are {{e}}. function hasOwnFieldBox(key) { return LEADING_TPL_ORDER.indexOf(canonicalTemplateKey(key)) !== -1; } // Inserts, extends, or (with opts.replace) overwrites one of the small templates that prefix a definition // line's gloss text -- {{maneid|lang|id}}, {{K|lang|kat1|...}} or {{e|lang|etîket1|...}}. Under // opts.replace an empty values list removes the call rather than writing an empty one. function insertLeadingSenseTpl(pageContent, language, sectionType, sectionOrdinal, definitionLevel, tplKey, values, opts) { opts = opts || {}; var loc = locateSection(pageContent, language, sectionType, sectionOrdinal); var lines = loc.lines; var defLine = findDefinitionLine(lines, loc.posLineIndex, definitionLevel); var marker = /^#+/.exec(lines[defLine])[0]; var afterMarker = lines[defLine].slice(marker.length).replace(/^\s+/, ""); // Collecting the whole leading-call run means an existing tplKey call is found and merged wherever it // already sits, not just when it happens to be first. var split = splitLeadingCalls(afterMarker); var calls = split.calls; var rest = split.rest; var existing = null; calls.forEach(function (c) { if (canonicalTemplateKey(c.key) === tplKey) { existing = c; } }); if (existing) { if (opts.replace) { // Editing an existing call: an empty result means the user cleared it, so drop the call. if (values.length) { existing.params = [language].concat(values); } else { calls = calls.filter(function (c) { return c !== existing; }); } } else { var existingVals = existing.params.slice(1); values.forEach(function (v) { if (existingVals.indexOf(v) === -1) { existingVals.push(v); } }); existing.params = [language].concat(existingVals); } } else if (!values.length) { return pageContent; // nothing to add, and nothing there to clear } else { // Not present yet -- insert right before the first existing call that outranks tplKey in // LEADING_TPL_ORDER (an unrecognized call always outranks everything), or at the end of the run. var myRank = LEADING_TPL_ORDER.indexOf(tplKey); var insertAt = calls.length; for (var i = 0; i < calls.length; i++) { var otherRank = LEADING_TPL_ORDER.indexOf(canonicalTemplateKey(calls[i].key)); if (otherRank === -1 || otherRank > myRank) { insertAt = i; break; } } calls.splice(insertAt, 0, { key: tplKey, params: [language].concat(values) }); } var rebuilt = calls.map(function (c) { return "{{" + c.key + "|" + c.params.join("|") + "}}"; }).join(" "); lines[defLine] = marker + " " + (rebuilt ? rebuilt + " " : "") + rest; return pageContent.slice(0, loc.langSectionIndex) + lines.join("\n"); } // Replaces just the gloss text of a definition line, leaving any leading template calls untouched -- // the save half of "Maneyê biguhêre" (edit sense). function updateSenseGloss(pageContent, language, sectionType, sectionOrdinal, definitionLevel, newGloss) { var loc = locateSection(pageContent, language, sectionType, sectionOrdinal); var lines = loc.lines; var defLine = findDefinitionLine(lines, loc.posLineIndex, definitionLevel); var marker = /^#+/.exec(lines[defLine])[0]; var afterMarker = lines[defLine].slice(marker.length).replace(/^\s+/, ""); // The box holds everything except the calls with their own field, so those are put back in front. // Dropping "{{mane?}}" here is what clears start.js's placeholder once a real gloss is written. var kept = splitLeadingCalls(afterMarker).calls.filter(function (c) { return hasOwnFieldBox(c.key); }); var leadingText = kept.map(function (c) { return "{{" + c.key + "|" + c.params.join("|") + "}}"; }).join(" "); lines[defLine] = marker + " " + (leadingText ? leadingText + " " : "") + newGloss; return pageContent.slice(0, loc.langSectionIndex) + lines.join("\n"); } // Deletes one sense: its definition line plus everything indented under it (its "#:" groups, "#*" // citations, any sub-senses). Refuses to empty a section, since a POS heading with no senses is worse // than the sense the user wanted gone. // A new sense goes directly below the one whose pencil asked for it -- after the lines that sense owns // (its "#:" examples, "#*" citations and "##" sub-senses), so it reads as the next sense rather than // landing at the foot of the section. It takes the same marker depth as its neighbour, so asking from // a "##" sub-sense adds a sibling sub-sense. // extras are the sense's own "#:" lines, written under it in one go: a sense that is not on the // page yet cannot be located by number, so everything it carries goes in with the insertion. function insertNewSense(pageContent, language, sectionType, sectionOrdinal, definitionLevel, text, extras) { var loc = locateSection(pageContent, language, sectionType, sectionOrdinal); var lines = loc.lines; var defLine = findDefinitionLine(lines, loc.posLineIndex, definitionLevel); var marker = /^#+/.exec(lines[defLine])[0]; var end = defLine + 1; var ownedRegex = new RegExp("^" + marker + "[#:*]"); while (end < lines.length && ownedRegex.test(lines[end])) { end++; } var block = [marker + " " + text]; (extras || []).forEach(function (extra) { block.push(marker + extra); }); lines.splice.apply(lines, [end, 0].concat(block)); return pageContent.slice(0, loc.langSectionIndex) + lines.join("\n"); } function removeSense(pageContent, language, sectionType, sectionOrdinal, definitionLevel) { var loc = locateSection(pageContent, language, sectionType, sectionOrdinal); var lines = loc.lines; var defLine = findDefinitionLine(lines, loc.posLineIndex, definitionLevel); var marker = /^#+/.exec(lines[defLine])[0]; var end = defLine + 1; var ownedRegex = new RegExp("^" + marker + "[#:*]"); while (end < lines.length && ownedRegex.test(lines[end])) { end++; } // Top-level senses of this section only -- "##" sub-senses go with their parent either way. if (definitionLevel.length === 2) { var siblings = 0; for (var i = loc.posLineIndex + 1; i < lines.length && !/^==/.test(lines[i]); i++) { if (/^#[^*#:]/.test(lines[i])) { siblings++; } } if (siblings < 2) { throw new SubmitAbort("Ev maneya dawî ya vê beşê ye. Ji bo rakirinê divê tu tevahiya beşê rakî."); } } lines.splice(defLine, end - defLine); return pageContent.slice(0, loc.langSectionIndex) + lines.join("\n"); } function fetchSenseFields(language, sectionType, sectionOrdinal, definitionLevel) { return fetchPageContent().then(function (content) { return readSenseFields(content, language, sectionType, sectionOrdinal, definitionLevel); }); } // Everything the advanced panel can edit about one sense, read off its definition line and the "#:" lines // under it: the raw gloss (templates included), the leading maneid/K/e values, and each word-list group. function readSenseFields(pageContent, language, sectionType, sectionOrdinal, definitionLevel) { var loc = locateSection(pageContent, language, sectionType, sectionOrdinal); var lines = loc.lines; var defLine = findDefinitionLine(lines, loc.posLineIndex, definitionLevel); var defMarker = /^#+/.exec(lines[defLine])[0]; var afterMarker = lines[defLine].slice(defMarker.length).replace(/^\s+/, ""); var leading = {}; splitLeadingCalls(afterMarker).calls.forEach(function (c) { leading[canonicalTemplateKey(c.key)] = c.params.slice(1); }); // Only start.js's "{{mane?|lang}}" placeholder is hidden; every other template stays visible so it can // be edited by hand in the gloss box. // The gloss box shows the line minus the calls that have their own box ({{maneid}}, {{K}}, {{e}} and // their redirects) and minus start.js's "{{mane?}}" placeholder. Everything else -- a {{g}} link, a // {{guharto}} -- stays visible and editable there. var split = splitLeadingCalls(afterMarker); var glossCalls = split.calls.filter(function (c) { return !hasOwnFieldBox(c.key) && canonicalTemplateKey(c.key) !== "mane?"; }); var glossLead = glossCalls.map(function (c) { return "{{" + c.key + "|" + c.params.join("|") + "}}"; }).join(" "); var gloss = $.trim((glossLead ? glossLead + " " : "") + split.rest); var marker = new Array(definitionLevel.length).join("#"); var groupKeys = SENSE_GROUPS.map(function (g) { return g.key; }); var anyBlockLineRegex = new RegExp("^" + marker + "[:*]"); var words = {}; for (var i = defLine + 1; i < lines.length; i++) { if (!anyBlockLineRegex.test(lines[i])) { break; } var call = senseGroupCall(lines[i], marker, groupKeys); if (call) { words[canonicalTemplateKey(call.name)] = call.words; } } return { gloss: gloss, maneid: leading.maneid ? leading.maneid[0] : "", etiket: leading.e || [], kategori: leading.K || [], words: words }; } // ---- template-parameter editing ------------------------------------------------------------------- // A gloss that is nothing but one template call gets a labelled box per parameter instead of a raw // wikitext line, the way VisualEditor's template dialog works. // The single template call a gloss is made of, or null when the line is anything less tidy. {{g|...}} is a // link inside the gloss rather than the gloss itself, so it neither disqualifies the line nor gets a form. function glossTemplateTarget(gloss) { var parsed = parseTemplateCalls(gloss || ""); if (parsed.otherContent) { return null; } var editable = parsed.calls.filter(function (c) { return canonicalTemplateKey(c.name) !== "g"; }); return editable.length === 1 ? editable[0] : null; } // ---- "guhartina pêşketî" (advanced editing): combine several independent per-sense edits into ONE save ---- // Threads pageContent through the same pure functions every single-field form uses, applying only the // pieces the caller actually filled in. A piece that conflicts with the page (maneid already set, a // subsection that's already there) is skipped with a warning rather than failing the whole save. Throws // SubmitAbort if nothing was filled in, so this can never turn into a no-op save. function applyAdvancedChanges(pageContent, language, sectionType, sectionOrdinal, definitionLevel, changes) { var content = pageContent; var warnings = []; var appliedAnything = false; if (changes.gloss) { content = updateSenseGloss(content, language, sectionType, sectionOrdinal, definitionLevel, changes.gloss); appliedAnything = true; } if (changes.newSense) { content = insertNewSense(content, language, sectionType, sectionOrdinal, definitionLevel, changes.newSense, changes.newSenseExtras); appliedAnything = true; } // Every box below is prefilled with what the sense already has, so a save replaces that value rather // than merging into it -- and clearing a box removes the template. changes.changed marks the boxes // whose contents actually differ from the page, so an opened-but-untouched box writes nothing. var replace = { replace: true }; if (changes.changed.maneid) { content = insertLeadingSenseTpl(content, language, sectionType, sectionOrdinal, definitionLevel, "maneid", changes.maneid ? [changes.maneid] : [], replace); appliedAnything = true; } if (changes.changed.etiket) { content = insertLeadingSenseTpl(content, language, sectionType, sectionOrdinal, definitionLevel, "e", changes.etiket, replace); appliedAnything = true; } if (changes.changed.kategori) { content = insertLeadingSenseTpl(content, language, sectionType, sectionOrdinal, definitionLevel, "K", changes.kategori, replace); appliedAnything = true; } SENSE_GROUPS.forEach(function (group) { if (changes.changed["word:" + group.key]) { content = insertSenseWords(content, language, sectionType, sectionOrdinal, definitionLevel, group.key, changes.words[group.key], replace); appliedAnything = true; } }); if (!appliedAnything) { throw new SubmitAbort("Tiştek nehat guhartin."); } return { content: content, warnings: warnings }; } // Plain removable-tag field, used for Etîket and Kategorî (simple value lists with no per-word modifiers). // Enter or "," commits the current text as a tag; Backspace on an empty input removes the last tag; // values() also commits whatever is still typed but not yet confirmed. function buildTagField(placeholder) { var $input = $("<input type='text' class='dsb-input dsb-tag-input'>").attr("placeholder", placeholder); var $element = $("<span class='dsb-tagfield'></span>").append($input); function currentValues() { var vals = []; $element.children(".dsb-tag").each(function () { vals.push($(this).data("value")); }); return vals; } function addTag(val) { val = $.trim(val || ""); if (!val || currentValues().indexOf(val) !== -1) { return; } var $tag = $("<span class='dsb-tag'></span>").text(val).data("value", val); var $remove = $("<button type='button' class='dsb-tag-remove' title='Jê bibe'>&#215;</button>"); $remove.on("click", function () { $tag.remove(); $input.trigger("focus"); }); $tag.append($remove); $tag.insertBefore($input); } $input.on("keydown", function (e) { if (e.which === 13 || e.which === 188) { // Enter or comma e.preventDefault(); addTag($input.val()); $input.val(""); } else if (e.which === 8 && !$input.val()) { $element.children(".dsb-tag").last().remove(); } }); $input.on("blur", function () { addTag($input.val()); $input.val(""); }); return { $element: $element, // Replaces every tag, for prefilling from what the sense already has. setValues: function (vals) { $element.children(".dsb-tag").remove(); vals.forEach(function (v) { addTag(v); }); $input.val(""); }, values: function () { addTag($input.val()); $input.val(""); return currentValues(); }, focus: function () { $input.trigger("focus"); } }; } // The template-param dialog (openTemplateDialog/buildTemplateParamForm) moved to wikt.cite, shared with // start.js's own Etîmolojî and Çavkanî pickers: cite.openTemplateDialog / cite.buildTemplateParamForm. // Each new example queued is its own entry, so several can be waiting at once. var exampleSeq = 0; // Takes the save over from add-examples while its form is open for one sense: its "Qeyd bike" becomes // "Lê zêde bike" and the edit joins the pending queue instead of publishing on its own, so examples and // whatever else is queued go up as one edit. Installed on every open, so the handler always closes over // the sense whose form is actually open. ctx: {$li, $h3, language, sectionType, sectionOrdinal, // definitionLevel, $save, $status, afterQueue}. function takeOverExampleSave(ctx) { if (!(wikt.addExamples && wikt.addExamples.setSubmitHandler)) { return; // older add-examples: it publishes on its own, as before } // Lets the form read an example as the queue has already changed it. wikt.addExamples.pendingContent = queuedContent; wikt.addExamples.setSubmitHandler(function (job) { exampleSeq++; queueChange( placeLabel(ctx.language, ctx.sectionType, ctx.$h3), // add-examples' own summary, so the combined edit still credits the tool and names its // version. The trailing stop goes: this is one item in a list, not a sentence of its own. (job.summary || "nimûne/jêgirtin hate zêdekirin").replace(/\.\s*$/, ""), function (pageContent) { // add-examples builds against a revision object, and returns {text, summary}. var built = job.transform({ content: pageContent }); return { content: built.text, warnings: [] }; }, ctx.$save, ctx.$status, // Drawn like any other queued change, in the sense it belongs to -- except a removal, // which strikes the line through where it sits, as "Maneyê rake" does for a sense. function () { if (job.removes && ctx.itemEl) { var $item = $(ctx.itemEl).addClass("dsb-example-doomed"); return function () { $item.removeClass("dsb-example-doomed"); }; } return previewSense(ctx.$li, ctx.language, ctx.sectionType, ctx.sectionOrdinal, ctx.definitionLevel); }, // An edit to an example already on the page brings its own key, so editing it again replaces it. { key: job.key || ("example:" + ctx.sectionType + "|" + ctx.sectionOrdinal + "|" + ctx.definitionLevel.join(".") + "|" + exampleSeq), sensePath: ctx.definitionLevel } ); job.done(); if (ctx.afterQueue) { ctx.afterQueue(); } }); } // Opens add-examples' form on one example already under a sense -- dsb.js's pencil on it. Its save joins // the queue like any other change. function editExample($li, $h3, language, sectionType, sectionOrdinal, definitionLevel, itemEl) { takeOverExampleSave({ $li: $li, $h3: $h3, language: language, sectionType: sectionType, sectionOrdinal: sectionOrdinal, definitionLevel: definitionLevel, $save: $(), $status: $(), itemEl: itemEl, afterQueue: openQueueBox }); if (!(wikt.addExamples && wikt.addExamples.editFor && wikt.addExamples.editFor($li.get(0), itemEl))) { mw.notify("Amûra nimûneyan li vê maneyê nehat dîtin."); } } // Builds the whole "guhartina pêşketî" panel into $quickRow: gloss and the two most-used word lists // (Hevmane/Dijmane) sit directly in the picker row; the remaining word lists, maneid, etîket, kategorî // and Nimûne/jêgirtin live behind a "Hevmane û Bêhtir" dropdown; one shared "Lê zêde bike" queues everything the // user filled in as a single edit via applyAdvancedChanges() and queueChange(). Nimûne/jêgirtin is an // immediate proxy-click into a different gadget's own form, not part of this combined save. // pending, when given, means this panel composes a sense that is not on the page yet: it edits no // line, and its save queues one insertion carrying the definition, its word lists and its // quotations. Everything the user sees is the panel's own, so a new sense is edited exactly like a // saved one. See openNewSenseRow(). function buildAdvancedPanel($quickRow, $li, $h3, language, sectionType, sectionOrdinal, definitionLevel, isLastSense, pending) { // "#:" lines for a pending sense's quotations, in the order add-examples handed them over. var pendingQuotes = pending ? pending.state.quotes.slice() : []; var $pendingQuotes = $("<div class='dsb-new-sense-quotes'></div>"); // "+" marks the actions that add something, matching the dropdown's own "+ Hevmane" labels. var $nimune = $("<a href='#' class='dsb-quick-link'></a>").text("+ Nimûne/jêgirtin"); $nimune.on("click", function (e) { e.preventDefault(); if (pending) { collectQuotation(); $moreMenu.slideUp(); return; } takeOverExampleSave({ $li: $li, $h3: $h3, language: language, sectionType: sectionType, sectionOrdinal: sectionOrdinal, definitionLevel: definitionLevel, $save: $save, $status: $status }); // Toggle, so clicking this a second time closes the form again. add-examples builds nothing // on the page of its own, so this is the only way its form opens. var drive = wikt.addExamples.toggleFor || wikt.addExamples.openFor; if (!(drive && drive($li.get(0)))) { mw.notify("Amûra nimûneyan li vê maneyê nehat dîtin."); } $moreMenu.slideUp(); }); // The form has to be opened on a sense that exists, so it opens on the one this row hangs off; // only the line it builds is kept, and the form itself is moved under the row, title and all. function collectQuotation() { if (!(wikt.addExamples && wikt.addExamples.setSubmitHandler)) { mw.notify("Amûra nimûneyan ne berdest e."); return; } wikt.addExamples.setSubmitHandler(function (job) { if (!job.line) { job.fail("Ev guhartoya amûra nimûneyan nikare rêzê bide."); return; } pendingQuotes.push(job.line.replace(/^#+/, "")); $pendingQuotes.append($("<div class='dsb-new-sense-quote'></div>").text(job.line)); job.done(); }); if (!(wikt.addExamples.openFor && wikt.addExamples.openFor($li.get(0)))) { mw.notify("Amûra nimûneyan li vê maneyê nehat dîtin."); return; } // Its title is a list item in the sense's own example list; taken out of that list so it // does not read as a numbered sense of its own. var $title = $li.find(".add-example-form-title").first().closest("li"); var $form = $li.find(".add-example-form").first(); if ($title.length) { $pendingQuotes.after($("<div class='dsb-new-sense-form-title'></div>") .append($title.contents())); $title.remove(); } if ($form.length) { $quickRow.find(".dsb-new-sense-form-title").first().after($form); } } // getters holds one function per currently-open box (key -> () => value); collectChanges() only ever // reads from a box the user actually clicked to open. var getters = {}; // What the sense currently holds, fetched once and shared by every box that prefills from it. // collectChanges() also diffs against it, so an untouched box never queues a change. var original = null; var sensePromise = null; function loadSense() { if (!sensePromise) { if (pending) { original = { gloss: pending.state.text || "", maneid: pending.state.maneid || "", etiket: pending.state.etiket || [], kategori: pending.state.kategori || [], words: pending.state.lists || {} }; sensePromise = $.Deferred().resolve(original).promise(); } else { sensePromise = fetchSenseFields(language, sectionType, sectionOrdinal, definitionLevel).then(function (fields) { original = fields; return fields; }); } } return sensePromise.then(withQueued); } // The change already queued for this sense, as the fields it writes. Read back from the queue // rather than kept in a variable here, so dropping the entry from the queue box also drops this. function queuedSenseChanges() { if (pending) { return null; } var key = senseQueueKey(); var found = null; dsbQueue.entries.forEach(function (entry) { if (entry.key === key && entry.senseChanges) { found = entry.senseChanges; } }); return found; } // The sense with whatever is queued for it written over the top (nothing queued: as the page has it). function withQueued(fields) { return overlaySenseFields(fields, queuedSenseChanges()); } function sameList(a, b) { return (a || []).join("\u0000") === (b || []).join("\u0000"); } // -- gloss ("Maneyê biguhêre" -- the one box that EDITS the sense's wording; everything else here only ADDS) -- function addGlossField() { var $fields = $("<div class='dsb-gloss-fields'></div>"); var $textarea = $("<textarea class='dsb-input dsb-edit-gloss' rows='2'></textarea>") .attr("placeholder", util.msg.loading).prop("disabled", true); var $autoLink = $("<button type='button' class='dsb-autolink'>Oto-lînk bike</button>").prop("disabled", true); var $toRaw = $("<a href='#' class='dsb-quick-link dsb-gloss-raw'>Wekî wîkîtekst biguhêre</a>").hide(); var $status = $("<span class='dsb-status'></span>"); var originalGloss = null; var tplForm = null; // set while the parameter boxes are showing instead of the raw line var tplCall = null; // The gloss of a non-Kurdish entry is a translation followed by {{îzah|…}} explaining it. That // is one field on the page, so it stays one box here; the explanation opens beside it only when // asked for, and the two are joined back into a single gloss on save. A Kurdish sense is its // own definition, so it is never offered one -- though a ku gloss that somehow already carries // an {{îzah}} still opens its box below, rather than being edited blind. var offerIzah = language !== "ku"; var $izah = $("<textarea class='dsb-input dsb-edit-izah' rows='2'></textarea>") .attr("placeholder", "Îzaha maneyî… ji bo school-a îngilîzî 'cihê tehsîlgirtinê'"); // A non-Kurdish gloss is a translation and its explanation, so both boxes open together. A Kurdish // sense is its own definition and gets no îzah box, unless its gloss already carries one. var $izahWrap = $("<div class='dsb-izah-wrap'></div>") .append($("<label class='dsb-adv-label'>Îzaha maneyî</label>").append($izah)) .toggle(offerIzah); $fields.append($textarea); // The template form edits one call inside the line, so its result is spliced back into the rest. function currentGloss() { if (tplForm) { return $.trim(originalGloss.slice(0, tplCall.start) + tplForm.values() + originalGloss.slice(tplCall.end)); } return joinGloss($.trim($textarea.val()), $.trim($izah.val())); } function showRaw() { tplForm = null; tplCall = null; $fields.empty().append($textarea); $autoLink.show(); $toRaw.hide(); } loadSense().then( function (fields) { originalGloss = fields.gloss; // An existing gloss that already ends in {{îzah|…}} comes apart into the two boxes, so // editing it does not mean editing template syntax by hand. var parts = util.splitTercimeIzah(fields.gloss); $textarea.val(parts ? $.trim(parts.tercime) : fields.gloss) .prop("disabled", false) // A non-Kurdish gloss is a translation; the box under it takes the explanation. .attr("placeholder", offerIzah ? util.msg.tercimePrompt : "Maneyê binivîse…"); if (parts) { $izah.val($.trim(parts.izah)); $izahWrap.show(); } $autoLink.prop("disabled", false); var target = glossTemplateTarget(fields.gloss); if (!target) { return; } $.when(fetchTemplateData(target.name), cite.templateAliases(target.name)).then(function (td, aliases) { // The fetch is async; leave the raw box alone if it has already been typed into. if ($.trim($textarea.val()) !== $.trim(originalGloss)) { return; } tplCall = target; tplForm = cite.buildTemplateParamForm(target, td, aliases); $fields.empty().append(tplForm.$element); $autoLink.hide(); // linkifying a bare template call makes no sense // A gloss that is one template call carries no separate explanation. $izahWrap.hide(); $toRaw.show(); }); }, function (codeOrAbort, result) { $textarea.attr("placeholder", ""); var message = codeOrAbort instanceof SubmitAbort ? codeOrAbort.message : "Nikare maneya heyî bar bike: " + apiErrorMessage(codeOrAbort, result); $status.removeClass("dsb-status-ok").addClass("dsb-status-error").text(message); } ); $autoLink.on("click", function () { var mane = $.trim($textarea.val()); var izah = $.trim($izah.val()); if (!mane && !izah) { return; } $autoLink.prop("disabled", true); $status.removeClass("dsb-status-ok dsb-status-error").text("Tê lînkkirin…"); linkifyGlossParts(mane, izah, function (linkedMane, linkedIzah, error) { $textarea.val(linkedMane); $izah.val(linkedIzah); $autoLink.prop("disabled", false); if (error) { $status.addClass("dsb-status-error").text(error); } else { $status.text(""); } }); }); $toRaw.on("click", function (e) { e.preventDefault(); $textarea.val(currentGloss()); // read the form before showRaw() discards it showRaw(); }); getters.gloss = function () { var v = currentGloss(); // A pending sense has no line on the page to differ from: whatever is in the box is the sense. return (pending || (v && v !== originalGloss)) ? (v || null) : null; }; return $("<div class='dsb-adv-group'></div>").append( $("<div class='dsb-adv-label'></div>").text("Mane"), $fields, $izahWrap, $("<div class='dsb-form-actions'></div>").append($autoLink, $toRaw, $status) ); } // -- one SENSE_GROUPS word-list box (Hevmane/Dijmane/etc.) -- function addWordField(group) { var field = buildWordListField(group.label + "…"); loadSense().then(function (fields) { var current = fields.words[group.key]; if (current && current.length) { field.setValues(current); } }); getters["word:" + group.key] = function () { return field.values(); }; // The hint is senseGroups' own, so the box carries the same example sentence the wizard puts // beside its copy of this list. var $label = $("<div class='dsb-adv-label'></div>").text(group.label); if (group.hint) { $label.append($("<span class='dsb-adv-hint'></span>").text(group.hint)); } return $("<div class='dsb-adv-group'></div>").append($label, field.$element); } // -- maneid (single value; re-adding one that already exists is rejected -- see applyAdvancedChanges) -- // "Maneyeke din" opens a row of its own directly under this sense, so the list numbers it as the // sense it is about to become, and it carries its own buttons: everything it collects -- the // definition, its word lists, its quotations -- goes onto the page as a single insertion, because a // sense that is not saved yet has no line number for a second change to find (see insertNewSense). var newSenseKey = "newSense:" + definitionLevel.join("."); function queuedNewSense() { var found = null; dsbQueue.entries.forEach(function (entry) { if (entry.key === newSenseKey) { found = entry; } }); return found; } function dropQueuedNewSense() { dsbQueue.entries.slice().forEach(function (entry) { if (entry.key === newSenseKey) { dropQueueEntry(entry); } }); } // A sense that is not on the page yet is edited with this same panel, in a row of its own: same // picker, same dropdown, same buttons. Only the save differs -- it writes an insertion rather // than editing a line -- and the row renders what the insertion will say. function openNewSenseRow(state) { var existing = $quickRow.data("dsbNewSenseRow"); if (existing && existing.closest("body").length && !state) { existing.find("textarea").first().trigger("focus"); return; } if (existing) { rescueExampleForms(existing, $li); existing.remove(); } if (state) { // The rendered row belongs to the queue entry: hide it while the box is open, and leave // the entry alone so cancelling can put it back. $li.nextAll("li.dsb-new-sense-pending").first().remove(); } openQueueBox(); var $row = $("<li class='dsb-sense-preview dsb-new-sense-row'></li>"); var $panel = $("<div class='dsb-quick-row dsb-new-sense'></div>"); $row.append($panel); $li.after($row); $quickRow.data("dsbNewSenseRow", $row); buildAdvancedPanel($panel, $li, $h3, language, sectionType, sectionOrdinal, definitionLevel, isLastSense, { state: state || { text: "", lists: {}, quotes: [], maneid: "", etiket: [], kategori: [] }, key: newSenseKey, $row: $row, close: function () { rescueExampleForms($row, $li); $row.remove(); $quickRow.removeData("dsbNewSenseRow"); hideQueueIfIdle(); }, reopen: openNewSenseRow, queued: queuedNewSense, drop: dropQueuedNewSense }); $panel.show(); $panel.find("textarea").first().trigger("focus"); } function addManeidField() { var $input = $("<input type='text' class='dsb-input' placeholder='id…'>"); loadSense().then(function (fields) { $input.val(fields.maneid); }); getters.maneid = function () { return $.trim($input.val()); }; return $("<div class='dsb-adv-group'></div>").append($("<div class='dsb-adv-label'></div>").text("Maneid"), $input); } // -- etîket / kategorî -- function addEtiketField() { var field = buildTagField("Etîket…"); loadSense().then(function (fields) { field.setValues(fields.etiket); }); getters.etiket = function () { return field.values(); }; return $("<div class='dsb-adv-group'></div>").append($("<div class='dsb-adv-label'></div>").text("Etîket"), field.$element); } function addKategoriField() { var field = buildTagField("Kategorî…"); loadSense().then(function (fields) { field.setValues(fields.kategori); }); getters.kategori = function () { return field.values(); }; return $("<div class='dsb-adv-group'></div>").append($("<div class='dsb-adv-label'></div>").text("Kategorî"), field.$element); } // -- the picker row: the gloss and Nimûne/jêgirtin links sit directly in the row; every word group and // the rest live behind a "Hevmane û Bêhtir" dropdown. Clicking any link builds and appends its box // to $openBoxes and hides that link; the box's own "×" removes it, clears its getter, and un-hides the // link -- several boxes can be open at once. No "Beşek (====)" entry here: buildSubsectionPanel()'s // own "+ Binebeşekê lê zêde bike" trigger already covers page-level subsections. ---- var FIELD_DEFS = [{ key: "gloss", label: GLOSS_LABEL, build: addGlossField, primary: true }] .concat(SENSE_GROUPS.map(function (group) { return { key: "word:" + group.key, label: group.label, build: function () { return addWordField(group); }, primary: false }; })) .concat([ { key: "maneid", label: "Maneid", build: addManeidField, primary: false }, { key: "etiket", label: "Etîket", build: addEtiketField, primary: false }, { key: "kategori", label: "Kategorî", build: addKategoriField, primary: false } ]); // Every sense offers this: the new one lands directly below whichever sense asked for it (see // insertNewSense), so it is no longer only the last one that can add to the end. // No build(): its link opens a row of its own (openNewSenseRow), not a box in this panel. FIELD_DEFS.push({ key: "newSense", label: util.msg.addAnotherSense, primary: false }); var $picker = $("<div class='dsb-field-picker'></div>"); var $moreMenu = $("<div class='dsb-more-menu'></div>").hide(); var $openBoxes = $("<div class='dsb-open-boxes'></div>"); // $actions (built below) stays hidden until at least one field box is actually open -- otherwise // "Lê zêde bike" sits there enabled with nothing to queue, which just produces an empty no-op change. var openBoxCount = 0; function updateActionsVisibility() { $actions.toggle(openBoxCount > 0); } function makeFieldLink(def) { var $link = $("<a href='#' class='dsb-quick-link dsb-field-pick'></a>").text(def.key === "gloss" ? def.label : "+ " + def.label); $link.on("click", function (e) { e.preventDefault(); if (def.key === "newSense") { $moreMenu.slideUp(); openNewSenseRow(); return; } openQueueBox(); var $box = def.build(); var $remove = $("<a href='#' class='dsb-box-remove' title='Rake'>×</a>"); $remove.on("click", function (e2) { e2.preventDefault(); delete getters[def.key]; $box.remove(); $link.show(); openBoxCount--; updateActionsVisibility(); }); $box.prepend($remove); $openBoxes.append($box); util.initManualResize($box); $link.hide(); $moreMenu.slideUp(); openBoxCount++; updateActionsVisibility(); }); return $link; } // Destructive, so it lives at the bottom of the dropdown behind a confirmation, and shares the // sense's queue key: deleting supersedes any edit still pending on the same sense. function makeDeleteLink() { var $link = $("<a href='#' class='dsb-quick-link dsb-field-delete'>Maneyê rake</a>"); $link.on("click", function (e) { e.preventDefault(); $moreMenu.slideUp(); if (pending) { // Nothing to remove from the page: the sense only exists in the queue. pending.drop(); pending.close(); return; } OO.ui.confirm("Ev mane û hemû rêzên bin wê dê werin rakirin. Dewam bike?").done(function (ok) { if (!ok) { return; } queueChange( placeLabel(language, sectionType, $h3), "maneyek hate rakirin", function (baseContent) { return removeSense(baseContent, language, sectionType, sectionOrdinal, definitionLevel); }, $save, $note, function () { $li.addClass("dsb-sense-doomed"); return function () { $li.removeClass("dsb-sense-doomed"); }; }, { key: senseQueueKey(), sensePath: definitionLevel, senseLanguage: language, removesSense: true } ); $note.show(); }); }); return $link; } // Only the links the row actually shows are built now; the dropdown's nine are 43% of the work and // nobody sees them until "Hevmane û Bêhtir" is clicked, so buildMenuLinks() waits for that. FIELD_DEFS.forEach(function (def) { if (!def.primary || (pending && def.key === "newSense")) { return; } $picker.append(makeFieldLink(def)); if (def.key === "gloss") { $picker.append($nimune); // directly after "Maneyê biguhêre" } }); // Three sections, ruled apart: what labels this sense, the word lists that hang off it, and adding // another sense. "Maneyê rake" is appended after these by makeDeleteLink() and so closes the last // one. The word lists follow senseGroups' "order" -- that array's own order is the order the "#:" // lines are written to the page in, which is not a reading order; the wizard's boxes read the same // field, so both gadgets list them alike. Anything not named here still appears, after these, so a // field added later is never silently dropped from the menu. var MENU_GROUPS = [ ["etiket", "kategori", "maneid"], SENSE_GROUPS.slice().sort(function (a, b) { return (a.order || 0) - (b.order || 0); }).map(function (g) { return "word:" + g.key; }), ["newSense"] ]; var menuBuilt = false; function buildMenuLinks() { if (menuBuilt) { return; } menuBuilt = true; var byKey = {}; FIELD_DEFS.forEach(function (def) { if (!def.primary && !(pending && def.key === "newSense")) { byKey[def.key] = def; } }); var placed = {}; MENU_GROUPS.forEach(function (group, groupIndex) { var defs = group.map(function (key) { return byKey[key]; }).filter(Boolean); defs.forEach(function (def, i) { placed[def.key] = true; var $link = makeFieldLink(def); // The rule goes on the first entry of every group after the first. if (groupIndex > 0 && i === 0) { $link.addClass("dsb-menu-group-start"); } $moreMenu.append($link); }); }); FIELD_DEFS.forEach(function (def) { if (!def.primary && !placed[def.key] && !(pending && def.key === "newSense")) { $moreMenu.append(makeFieldLink(def)); } }); $moreMenu.append(makeDeleteLink()); } // Lives inside $picker (not appended straight to $quickRow) so .dsb-more-menu's CSS can position it as // an overlay anchored to $picker, instead of pushing $openBoxes/the rest of the page down when it opens. var $moreArrow = $("<span class='dsb-more-arrow'></span>").text("▸"); var $moreToggle = $("<a href='#' class='dsb-quick-link dsb-more-toggle'></a>") .text(util.msg.moreMenu + " ").append($moreArrow); $moreToggle.on("click", function (e) { e.preventDefault(); buildMenuLinks(); $moreMenu.slideToggle(function () { $moreArrow.text($moreMenu.is(":visible") ? "▾" : "▸"); }); }); $picker.append($moreToggle, $moreMenu); // Outside clicks are handled by one shared document listener (see closeMoreMenus), not one per panel: // hovering a sense builds its panel, so a long entry would otherwise accumulate dozens of them. $moreMenu.data("dsbArrow", $moreArrow); // -- combined save: whatever boxes are open right now, queued together via queueChange(); the actual // save happens when the user clicks "Guhartinan qeyd bike" on the floating queue box. ---- // Small "not saved yet" preview of everything this queued change will do, appended right under the // sense's gloss (plain text, not a real render of {{hevmane}}/etc.). function collectChanges() { // Against what the boxes were filled from, queued change and all -- a box reopened and left // alone writes nothing, and one the user has just emptied counts as emptied. var base = withQueued(original || { maneid: "", etiket: [], kategori: [], words: {} }); var changed = {}; var words = {}; SENSE_GROUPS.forEach(function (group) { var getter = getters["word:" + group.key]; words[group.key] = getter ? getter() : []; if (getter && !sameList(words[group.key], base.words[group.key])) { changed["word:" + group.key] = true; } }); var maneid = getters.maneid ? getters.maneid() : ""; var etiket = getters.etiket ? getters.etiket() : []; var kategori = getters.kategori ? getters.kategori() : []; if (getters.maneid && maneid !== (base.maneid || "")) { changed.maneid = true; } if (getters.etiket && !sameList(etiket, base.etiket)) { changed.etiket = true; } if (getters.kategori && !sameList(kategori, base.kategori)) { changed.kategori = true; } return { gloss: getters.gloss ? getters.gloss() : null, maneid: maneid, etiket: etiket, kategori: kategori, words: words, changed: changed }; } // One insertion carrying the whole sense: its leading calls and definition on the "#" line, then // a "#:" line per word list and per quotation, in the order the wizard writes them. function newSenseWikitext(changes) { var leading = LEADING_TPL_ORDER.map(function (key) { var values = key === "maneid" ? (changes.maneid ? [changes.maneid] : []) : key === "e" ? changes.etiket : key === "K" ? changes.kategori : []; return values && values.length ? "{{" + key + "|" + language + "|" + values.join("|") + "}}" : null; }).filter(Boolean).join(" "); var lines = []; SENSE_GROUPS.forEach(function (group) { var words = changes.words[group.key] || []; if (words.length) { lines.push(": {{" + group.key + "|" + language + "|" + words.join("|") + "}}"); } }); lines = lines.concat(pendingQuotes); return { text: (leading ? leading + " " : "") + $.trim(changes.gloss || ""), extras: lines }; } function pendingState(changes) { return { text: $.trim(changes.gloss || ""), lists: changes.words, quotes: pendingQuotes.slice(), maneid: changes.maneid, etiket: changes.etiket, kategori: changes.kategori }; } function queueNewSense(changes) { if (!$.trim(changes.gloss || "")) { $status.removeClass("dsb-status-ok").addClass("dsb-status-error").text("Maneya nû vala ye."); return; } var built = newSenseWikitext(changes); var held = pendingState(changes); var block = ["# " + built.text].concat(built.extras.map(function (extra) { return "#" + extra; })).join(NEWLINE); pending.close(); queueChange( placeLabel(language, sectionType, $h3), "maneyeke nû hate zêdekirin", function (baseContent) { return { content: insertNewSense(baseContent, language, sectionType, sectionOrdinal, definitionLevel, built.text, built.extras), warnings: [] }; }, $save, $status, // Drawn fresh on every call: redrawPreviews() runs this again whenever anything else // leaves the queue, and the row it drew last time is gone by then. function () { var $pending = $("<li class='dsb-sense-preview dsb-new-sense-pending'></li>"); $li.after($pending); var $edit = $("<span class='dsb-example-toolbar'></span>").append( $("<a href='#' class='dsb-toggle'></a>").attr("title", GLOSS_LABEL) .on("click", function (e) { e.preventDefault(); e.stopPropagation(); pending.reopen(held); })); renderWikitext(block).then(function (html) { if (!$pending.closest("body").length) { return; } var $content = $("<div class='mw-parser-output'></div>") .html(parsedSenseItem(html, 1).html); var $block = $content.children("dl, ul, ol").first(); if ($block.length) { $block.before($edit); } else { $content.append($edit); } $pending.empty().append($content); announceContent($pending); }, function () { $pending.empty().append($("<span></span>").text(built.text), $edit); }); return function () { $pending.remove(); }; }, { key: pending.key, sensePath: definitionLevel, senseLanguage: language } ); } // Both the field save and "Maneyê rake" queue under this, so the later one supersedes the earlier. function senseQueueKey() { return "sense:" + sectionType + "|" + sectionOrdinal + "|" + definitionLevel.join("."); } var $save = $("<button type='button' class='dsb-save'></button>").text(util.msg.add); // Where queueChange() writes its confirmation for actions that have no box of their own. var $note = $("<div class='dsb-status dsb-quick-note'></div>").hide(); var $cancel = $("<button type='button' class='dsb-cancel'></button>").text(util.msg.cancel); var $status = $("<span class='dsb-status'></span>"); var $actions = $("<div class='dsb-form-actions'></div>").append($save, $cancel, $status).hide(); // Emptying the boxes is what says the change has been taken: they were left open with their // text in them, so "Lê zêde bike" could be clicked again and queue the same values twice. function closeOpenBoxes() { $openBoxes.find(".dsb-box-remove").trigger("click"); } $cancel.on("click", function () { if (pending) { pending.close(); if (pending.queued()) { redrawPreviews(); } return; } // Close the boxes too, not just the row. Hiding alone left every field still open with its // text in it, so the next click on the pencil reopened the half-filled panel that had just // been cancelled. Each box's own "x" already clears its getter, restores its link and updates // the counter, so those are triggered rather than repeating the teardown here. $openBoxes.find(".dsb-box-remove").trigger("click"); $note.hide().text(""); // dsb.js owns the pencil's pinned state; tell it rather than hiding behind its back, or the // next click on the pencil would only toggle "pinned" off and appear to do nothing. $quickRow.trigger("dsbCancel"); hideQueueIfIdle(); }); $save.on("click", function () { var changes = collectChanges(); function afterLinkify() { if (pending) { queueNewSense(changes); return; } // This save supersedes any change still queued for the same sense, so it has to write that // one's fields too: the boxes it was made from are closed by now and collectChanges() cannot // see them. var merged = mergeSenseChanges(queuedSenseChanges(), changes); var parts = senseChangeLabels(merged); queueChange( placeLabel(language, sectionType, $h3), parts.length ? parts.join(", ") + (parts.length > 1 ? " hatin guhartin" : " hate guhartin") : "mane hate guhartin", function (baseContent) { return applyAdvancedChanges(baseContent, language, sectionType, sectionOrdinal, definitionLevel, merged); }, $save, $status, function () { return previewSense($li, language, sectionType, sectionOrdinal, definitionLevel); }, // Re-saving this same sense supersedes its pending change rather than queuing another. { key: senseQueueKey(), sensePath: definitionLevel, senseChanges: merged } ); closeOpenBoxes(); } $save.prop("disabled", true); // Auto-linkify the gloss as part of this save, but only a half nobody has linked by hand. // Split back into its two halves first, so the explanation is linked on its own rather than // sitting unseen inside {{îzah|…}}. if (changes.gloss) { $status.removeClass("dsb-status-ok dsb-status-error").text("Tê lînkkirin…"); var glossParts = util.splitTercimeIzah(changes.gloss); linkifyGlossParts( glossParts ? $.trim(glossParts.tercime) : changes.gloss, glossParts ? $.trim(glossParts.izah) : "", function (linkedMane, linkedIzah, error) { // The change is queued either way, so a gloss that came back empty is not written // back -- that would save the sense with its wording gone. var joined = joinGloss(linkedMane, linkedIzah); if ($.trim(joined)) { changes.gloss = joined; } if (error) { $status.removeClass("dsb-status-ok").addClass("dsb-status-error").text(error); } afterLinkify(); }, true ); } else { afterLinkify(); } }); // The links sit under the buttons, so each open box pushes them down rather than leaving them far above. $quickRow.empty().append($openBoxes, $actions, $picker, $note); if (pending) { // The gloss box is what a new sense is: it opens with the row, and the quotations the row // collects sit above the actions. Done here, once $actions exists. $quickRow.append($pendingQuotes); pending.state.quotes.forEach(function (extra) { $pendingQuotes.append($("<div class='dsb-new-sense-quote'></div>").text("#" + extra)); }); $picker.children(".dsb-field-pick").filter(function () { return $(this).text() === GLOSS_LABEL; }).trigger("click"); } } module.exports = { buildAdvancedPanel: buildAdvancedPanel, editExample: editExample }; }()); // </nowiki> 4plgu9bhe97oqcuuxf6xk9db7hsry1u